廣東工業大學自動化學院 莫俊暉 許錦標
利用STM32F103ZET6芯片作為硬件平臺,通過在基于嵌入式的PLC模塊中添加以太網模塊和HTTP協議層,構建一個對嵌入式PLC模塊進行監測的WEB系統。
由于傳統PLC具有不方便拓展新模塊,而且成本較高等問題,最近幾年已經出現了許多基于嵌入式的PLC方面的研究。傳統PLC設備使用組態軟件來對PLC進行監控或下載程序,然而傳統PLC在不同廠家之間使用不同的組態軟件,并且傳統PLC組態軟件無法應用在新型嵌入式PLC上進行監控。
為了解決以上問題,并為嵌入式PLC設備提供一種接入以太網的方式,本文在以STM32F103ZET6為核心控制器的嵌入式PLC模塊上增加HTTP協議層及WEB服務器的相關功能,使工程師可以通過瀏覽網頁的B/S方式對該嵌入式PLC的狀態進行在線監測。
該嵌入式PLC系統使用STM32F103ZET6作為核心控制器,主要包括STM32最小系統、輸入輸出電路、串口以及SPI等通信接口。該系統的以太網通信部分使用以太網模塊W5500芯片完成TCP協議棧的功能,W5500以太網芯片通過SPI通信接口與STM32進行數據傳輸。
本部分將對該模塊的軟件功能進行設計,軟件功能包括硬件系統的初始化、通信接口處理、PLC指令執行、WEB服務器等功能及網頁文件的設計。其中主要闡述WEB服務器的執行過程和網頁文件的設計,如圖1所示。

圖1 基于嵌入式PLC模塊的WEB監測系統硬件結構

圖2 主函數流程示意圖

圖3 WEB服務器流程圖
系統主函數主要為一個循環的過程,在每個循環中按順序執行輸入輸出點位的刷新、PLC程序的執行和WEB服務器程序等功能,如圖2所示。
WEB服務器程序負責接收瀏覽器發送的HTTP報文,并根據報文 內容做出響應。HTTP協議是基于TCP協議的應用層協議,本文使用W5500以太網芯片完成TCP協議的傳輸,WEB服務器程序只需要按照HTTP協議的標準,通過SPI通信接口對從W5500中相關寄存器讀取的字符串內容進行解析處理即可。完成WEB服務器相關功能之后,STM32通過SPI通信接口將HTTP響應報文寫入到W5500芯片的相應寄存器中,由W5500芯片負責將報文返回到發起請求的瀏覽器中。如圖3所示。
2.2.1 HTTP報文的解析
超文本協議HTTP是一種基于TCP/IP通信協議的應用層協議,常用于瀏覽器與服務器之間傳輸超文本文件。HTTP協議的請求報文包括請求行、報文頭和報文體。請求行中包括了請求方法、請求URL和HTTP協議版本,請求頭中包括服務器可以發送的編碼格式、報文體長度等報文屬性信息。在該系統中實現嵌入式PLC模塊的WEB監測功能,只需要關注請求方法和請求URL。
請求方法包括GET、POST、DELETE、HEAD、OPTION和PUT等,而在該系統中需要用到請求方法中最常用的GET方法和POST方法。GET方法主要用于瀏覽器向WEB服務器請求獲取數據,POST方法主要用于瀏覽器向WEB服務器提交數據,其中使用POST方法提交的數據會包含在HTTP協議的報文體中。請求URL是統一資源定位符,用于描述該報文所請求的資源在服務器中的位置,通常會指向一個HTML頁面或者一個圖像等文件。
當該系統從W5500以太網芯片中以字符串的形式讀取到HTTP報文之后,WEB服務器程序通過對字符串進行處理,提取和解析請求行中的請求方法和URL,可以得到該請求所指定的執行動作。
2.2.2 CGI程序
CGI是外部與WEB服務器之間的接口標準,負責具體執行HTTP的請求,執行WEB服務器需要實現的功能,并按照執行結果生成網頁文件。在該系統中CGI是一段子程序的程序代碼。
當系統解析HTTP報文獲得請求方法和URL之后,就可以確定該報文要求服務器所執行的功能,得到瀏覽器向服務器請求何種數據。需要服務器執行的CGI程序通常以文件路徑的形式在請求報文的URL中指定。根據接收到的URL,系統調用對應的子程序,執行該請求對應的動作實現相應的功能,包括查詢嵌入式PLC模塊的各輸入輸出點位狀態等。
然后CGI程序根據執行的結果,生成HTTP響應報文,通過SPI通信接口寫入W5500芯片的相應寄存器,發送到發起請求的瀏覽器。HTTP響應報文包括響應行、響應頭部和響應體。響應行和響應頭部通常包含報文協議版本、狀態碼及狀態描述等信息,該系統將HTTP協議響應行和響應頭部以字符串數組保存起來。待CGI程序執行完具體功能之后,根據執行結果,在其中填充狀態碼及狀態描述等相應的數據信息。最后將具體執行結果或者嵌入式PLC模塊相關輸入輸出點位的數據填入網頁文件中生成對應的網頁作為響應體,并且添加上HTTP響應行和響應報文頭部,合并為HTTP響應報文,通過W5500芯片返回到發起請求的瀏覽器。
HTML是一種超文本標記語言,是一種常用于編寫網頁文件的標準標記語言,HTML運行在瀏覽器上,由瀏覽器來解析、渲染和執行。由于在該嵌入式系統中沒有使用文件系統的相關功能,沒有文件的概念,所以網頁文件通過HTML語言編輯之后以字符串數組常量的形式保存到STM32芯片中。
在嵌入式PLC的WEB監控系統中,工程師需要通過瀏覽器頁面對嵌入式PLC模塊的各個點位輸入和輸出進行實時的監測。因為監測系統的網頁需要實時返回嵌入式PLC系統中的數據,所以需要在網頁文件中使用JavaScript網頁腳本每隔一段時間向WEB服務器請求相關的嵌入式PLC出入輸出數據。而這一過程將有大量時間花費在等待服務器讀取數據、解析數據和返回數據上,這將導致瀏覽器長時間處在刷新的狀態。為了解決這個問題就需要在網頁文件中使用AJAX技術,即異步的JavaScript和XML技術。它是一種瀏覽器的腳本技術,可以在不重新加載整個頁面的情況下,與WEB服務器交換數據并更新部分的網頁內容。利用AJAX技術向服務器請求數據,瀏覽器將不再需要等待從WEB服務器中返回的數據,它可以在數據返回的時候再進行處理。
并且通過AJAX技術向服務器請求數據,可以只請求需要實時更新的數據,而服務器可以只返回請求的數據而不再需要返回整個網頁文件。這將大大提升了數據傳輸的效率,節省了STM32嵌入式系統寶貴的運行資源,同時WEB監測系統的實時性也能夠得到保證。
結束語:本文分析了嵌入式PLC相關研究在目前存在的聯網遠程監測的主要問題,并針對該問題提出了一種解決方案。在基于STM32F103ZET6芯片的嵌入式PLC模塊的基礎之上增加了W5500以太網芯片,在嵌入式PLC模塊軟件中添加HTTP協議層和WEB服務器功能,為嵌入式PLC模塊提供一種接入以太網的方法,并且為工程師提供一種以B/S模式對嵌入式PLC模塊進行監控的方法。該解決方案使用嵌入式系統構建,成本較低,客戶端使用瀏覽器,無需使用專用的組態軟件,利用現成的以太網網絡進行通信,能夠大大降低系統組建的成本,并且簡化了系統搭建的流程。