李 鵬,王 莉
(江漢大學(xué) 智能制造學(xué)院,湖北 武漢 430056)
隨著工業(yè)技術(shù)的快速發(fā)展,借助于檢測終端、控制終端、顯示終端及無線傳輸端為一體的智能化控制系統(tǒng)逐漸成為工控領(lǐng)域的發(fā)展方向。在工業(yè)領(lǐng)域大多采用可編程邏輯控制器(pro?grammable logic controller,PLC)與觸摸屏結(jié)合的方式完成現(xiàn)場操控[1],PLC 技術(shù)穩(wěn)定性好、抗干擾性強,但是成本較高。微控制器技術(shù)采用超大規(guī)模集成電路技術(shù)把中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、中斷系統(tǒng)等功能集合為一體[2],具有體積小、功耗低及成本低等特點。微控制器技術(shù)可廣泛用于自動化控制領(lǐng)域,替代傳統(tǒng)可編程控制器的部分功能,實現(xiàn)現(xiàn)場對象的邏輯控制,有較好的應(yīng)用前景。
傳統(tǒng)的工控領(lǐng)域大多采用的是同廠商的觸摸屏與PLC 相互結(jié)合的應(yīng)用方案[3]。本文以STM32 單片機(jī)與西門子Smart 700 觸摸屏為例,為了實現(xiàn)不同廠商設(shè)備間的數(shù)據(jù)通信技術(shù)問題,建立與微控制器通信案例,技術(shù)上采用Modbus RTU 標(biāo)準(zhǔn)的通信協(xié)議建立設(shè)備間的通信橋梁。采用Smart 700 觸摸屏作為上位機(jī)運行人機(jī)交互控制界面,STM32 作為下位機(jī)完成數(shù)據(jù)采集及設(shè)備控制等功能,設(shè)備間采用RS485 接口,按照Modbus RTU 通信協(xié)議方式建立單片機(jī)與觸摸屏的驅(qū)動,編寫通信協(xié)議、設(shè)計軟件并進(jìn)行實驗測試。
西門子Smart 700 觸摸屏是一種廣泛應(yīng)用于工業(yè)現(xiàn)場人機(jī)交互的屏幕系統(tǒng),具備微小的操作系統(tǒng)、高分辨率寬屏顯示、節(jié)能降耗及強大且豐富的通信能力[4]。Smart 700 觸摸屏人機(jī)界面功能強大,其界面設(shè)計主要是在WinCC flexible 中實現(xiàn),根據(jù)項目需求設(shè)計按鈕、圖形、數(shù)字等功能按鍵來處理、監(jiān)控、管理多變的信息化顯示屏幕。
觸摸屏的通信配置在WinCC flexible 軟件中進(jìn)行選型設(shè)計(通信?連接?通信驅(qū)動程序),驅(qū)動選擇Modicon Modbus v3 驅(qū)動程序,通信協(xié)議配置如表1 所示。
表1 HMI 設(shè)備通信配置Tab.1 HMI device communication configurations
Modbus 通信協(xié)議是Modicon 公司為使用PLC 通信而發(fā)表[5],該協(xié)議廣泛用于工業(yè)現(xiàn)場,通過該協(xié)議可以完成多控制器之間、不同型號設(shè)備之間的數(shù)據(jù)通信[6]。該協(xié)議采用主從應(yīng)答通信,明確規(guī)定了主從應(yīng)答通信行為、設(shè)備識別碼、設(shè)備驗證碼及標(biāo)準(zhǔn)的報文結(jié)構(gòu)格式,目前是工業(yè)電子設(shè)備之間常用的連接方式。Modbus 主要有以下3 種通信方式:以太網(wǎng)的Modbus TCP、異步串行通信的Modbus RTU、基于高速令牌傳遞網(wǎng)絡(luò)的Modbus PLUS[7]。常用的物理接口有RS232/RS422/RS485、光纖、無線等通信接口[8?9]。本文采用異步串行通信,通信接口采用RS485 的連接。
協(xié)議格式是完成不同設(shè)備間溝通的橋梁,Smart 700 觸摸屏配套的組態(tài)軟件是WinCC flexi?ble,該軟件內(nèi)無單片機(jī)的驅(qū)動。本節(jié)研究兩個方面的內(nèi)容,即Modbus RTU 數(shù)據(jù)通信的命令串格式和觸摸屏發(fā)出命令的含義。
Modbus 通信方式有多種,本文主要采用Modbus RTU 異步串行通信方式,其數(shù)據(jù)格式包括:地址碼+ 功能碼+ 數(shù)據(jù)+ 循環(huán)冗余校驗(cycle redundancy check,CRC),各部分含義如表2所示。
表2 Modbus RTU 消息幀格式Tab.2 Modbus RTU message frame format
主機(jī)對從機(jī)的操作有讀數(shù)據(jù)操作和寫數(shù)據(jù)操作,完成對特定內(nèi)存單元的數(shù)據(jù)進(jìn)行讀取和預(yù)設(shè)功能。
主機(jī)對從機(jī)寫數(shù)據(jù)操作,如表3 所示。
表3 主機(jī)對從機(jī)寫數(shù)據(jù)格式Tab.3 Writing data format from host to slave
主機(jī)對從機(jī)讀數(shù)據(jù)操作,如表4 所示。
表4 主機(jī)對從機(jī)讀數(shù)據(jù)格式Tab.4 Host reading data format from slave
單片機(jī)接收到這串?dāng)?shù)據(jù)后,根據(jù)消息幀數(shù)據(jù)開始進(jìn)行CRC 校驗,判斷數(shù)據(jù)是否正確,如果判斷數(shù)據(jù)無誤,則返回信息給主機(jī),應(yīng)答格式如表5 所示。
表5 從機(jī)對主機(jī)反饋數(shù)據(jù)格式Tab.5 The data format of the slave to host feedback
地址碼主要是用來識別同一線路上不同設(shè)備的信息號,區(qū)別特定對象上的數(shù)據(jù)身份,其構(gòu)成可以從1 到247 標(biāo)號。主機(jī)發(fā)送帶設(shè)備地址的消息幀,從機(jī)都可以收到信息,但是只有設(shè)置了匹配的設(shè)備號才能響應(yīng)。
功能號主要是用來說明該數(shù)據(jù)幀的用途,從機(jī)根據(jù)幀信息完成數(shù)據(jù)的讀取或賦值功能,完成幀數(shù)據(jù)的動作,常用的功能碼如表6 所示。
表6 Modbus RTU 常用功能碼Tab.6 Modbus RTU common function codes
常用的寄存器地址分配有離散量輸入,地址范圍0X00001 ~0X0FFFF,輸出繼電器地址范圍0X10001 ~0X1FFFF,輸入寄存器地址范圍0X30001 ~0X3FFFF,輸出寄存器地址范圍0X40001 ~0X4FFFF。
Smart 700 IE 1000 觸摸屏的人機(jī)交互界面是通過WinCC flexible 組態(tài)編程軟件完成功能界面設(shè)計,然后下載到觸摸屏內(nèi)。本文建立了Modicon Modbus 標(biāo)準(zhǔn)通信協(xié)議驅(qū)動,其運行流程如圖1 所示。系統(tǒng)運行開始,從起始單元進(jìn)行主動查詢,發(fā)送查詢功能碼,如果工控機(jī)有預(yù)設(shè)操作,系統(tǒng)跳轉(zhuǎn)發(fā)送預(yù)設(shè)參數(shù),完成后繼續(xù)發(fā)送下一個單元請求查詢命令;如果上位機(jī)無預(yù)設(shè)指令,上位機(jī)繼續(xù)發(fā)送讀取內(nèi)存單元命令。當(dāng)上位機(jī)獲取到了響應(yīng)讀取指令,先獲取指令值,且上位機(jī)地址指針自加并發(fā)送下一幀讀取命令,同時判斷地址指針的范圍,范圍內(nèi)繼續(xù)循環(huán),范圍外重新開始新的一輪請求查詢。當(dāng)上位機(jī)沒有收到響應(yīng),在循環(huán)周期內(nèi)繼續(xù)請求當(dāng)前讀取數(shù)據(jù),周期外將會從起始地址開始請求。在一個周期內(nèi)完成所有內(nèi)存單元的查詢工作,周期循環(huán)執(zhí)行。
圖1 Smart 700 觸摸屏Modbus 運行流程圖Fig.1 Smart 700 touch screen Modbus operation flow chart
Smart 700 IE 1000 觸摸屏與單片機(jī)通信采用主從通信模式,上位機(jī)Smart 700 為主機(jī),從機(jī)為STM32 主控板。主機(jī)配置有Modicon Modbus 通信協(xié)議驅(qū)動程序,上電后系統(tǒng)自動開始運行,上位機(jī)Smart 700 作為主機(jī)自動按周期循環(huán)發(fā)送請求讀取內(nèi)存數(shù)據(jù)命令,通過RS485 通信接口發(fā)送到STM32 單片機(jī)。下位機(jī)接收到上位機(jī)請求命令后,首先進(jìn)行CHR 數(shù)據(jù)校驗,如果校驗錯誤,返回重新查詢接收;如果校驗正確,解析獲取功能碼。如果是讀取命令,單片機(jī)按照Modbus命令格式發(fā)送內(nèi)存單元的數(shù)值到上位機(jī);如果接收到的是寫命令,單片機(jī)將對本機(jī)內(nèi)存單元進(jìn)行賦值操作。解析完成讀寫命令后,返回重新查詢接收,循環(huán)查詢上位機(jī)的請求命令,掉電后自動停止發(fā)送,其流程圖如圖2 所示。
圖2 Smart 700 觸摸屏與STM32 單片機(jī)Modbus 通信流程圖Fig.2 Modbus communication flow chart between Smart 700 touch screen and STM32 MCU
STM32F1X 單片機(jī)作為下位機(jī)[10?11],主要完成功能包括編寫Modbus 解析程序、RS485 發(fā)送接收程序、傳感器信號檢測、接收及驅(qū)動信號發(fā)送等。
CRC 是檢查通信可靠性的一種方式,Modbus RTU 為了獲取數(shù)據(jù)的準(zhǔn)確性,采用16 位CRC對接收數(shù)據(jù)進(jìn)行處理。其校驗流程如圖3 所示。單片機(jī)獲取消息幀后,截取總長度的前n ~16位字符串?dāng)?shù)據(jù),進(jìn)行累加,獲取結(jié)果的低16 位數(shù)據(jù),然后將計算的CRC 與發(fā)送到的CRC 進(jìn)行對比,完成數(shù)據(jù)校驗。
圖3 CRC 數(shù)據(jù)校驗流程圖Fig.3 CRC data verification flow chart
以下為單片機(jī)CRC 校驗的部分腳本程序:
u16 Computes_CRC16(u8 *DAT,u8 L)//指針DAT 為要校驗數(shù)組,L 為組長
{u16ComCRC = 0xffff;u8 i;u8 j;
for(i = 0;i < L;i++)
{ComCRC = ComCRC ^ DAT[i];
for(j = 0;j < 8;j++)
{if(ComCRC & 0x01)
{ComCRC = ComCRC>> 1;ComCRC = ComCRC ^ 0xA001;}
else{ComCRC = ComCRC>> 1;}
}}return(ComCRC);}
STM32 單片機(jī)數(shù)據(jù)接收主要采用串口中斷模式進(jìn)行數(shù)據(jù)的接收[12],Modbus 傳輸數(shù)據(jù)是固定的數(shù)字幀(屏發(fā)送請求信息幀如下所示:01 03 9C 40 00 01 AB 8E),先接收數(shù)據(jù)存入緩沖區(qū)BUFF 內(nèi),然后對數(shù)據(jù)進(jìn)行分析、校驗,將有效的數(shù)據(jù)提取到運行BUFF 內(nèi)用于條件判斷及數(shù)據(jù)提取。
單片機(jī)接收到Smart 700 觸摸屏的通信請求后,先獲取運行BUFF 內(nèi)的數(shù)組,提取校驗,數(shù)據(jù)無誤發(fā)送Modbus 響應(yīng)數(shù)組,發(fā)送函數(shù)代碼如下所示。
void RS485_TX_DATA(u8 TmpH,u8 TmpL)
{ModTX.Gnm_1[0]= 0x01;//設(shè)備號
ModTX.Gnm_1[1]= 0x03;//功能碼
ModTX.Gnm_1[2]= 0x02;//發(fā)送字符個數(shù)
ModTX.Gnm_1[3]= TmpH;//發(fā)送字符高八位
ModTX.Gnm_1[4]= TmpL;//發(fā)送字符低八位
DataMsg = ModTX.Gnm_1;//數(shù)組指針幅值
RXcrc = Computes_CRC16(DataMsg,5);//開始CRC 校驗
RS485_Send_Data(ModTX.Gnm_1,7);}//發(fā)送一串響應(yīng)數(shù)組
系統(tǒng)測試對象是基于水泥灌漿自動控制系統(tǒng)的通信測試,主要包括觸摸屏西門子Smart 700設(shè)備、STM32 為主的主控板和現(xiàn)場壓力傳感器等,實現(xiàn)設(shè)備間通信。系統(tǒng)測試分為兩個部分,第一部分是Smart 700 觸摸屏循環(huán)請求獲取內(nèi)存單元值命令調(diào)試,串口反饋數(shù)據(jù)給觸摸屏;串口調(diào)試數(shù)據(jù)如圖4 所示。
圖4 Smart 700 觸摸屏通信測試Fig.4 Communication test of Smart 700 touch screen
屏請求數(shù)據(jù):01 03 9C 40 00 01 AB 8E,是請求40000 地址一個數(shù)據(jù)。
串口響應(yīng)信息:01 03 02 00 13 F9 89,響應(yīng)一個數(shù)據(jù)19 給40000 地址。
屏請求數(shù)據(jù):01 03 9C 41 00 01 FA 4E,響應(yīng)格式同上。
屏請求數(shù)據(jù):01 03 9C 42 00 01 0A 4E,單片機(jī)響應(yīng)后,繼續(xù)請求,地址增加,在預(yù)定周期內(nèi)請求所有輸入寄存器的數(shù)據(jù),完成后,程序從起始地址循環(huán)發(fā)送請求數(shù)據(jù)。
第二部分是觸摸屏與下發(fā)控制命令調(diào)試,給串口發(fā)送預(yù)設(shè)值,為單片機(jī)測試做準(zhǔn)備。如圖4所示,人機(jī)交互界面有按鈕控件,點擊壓力預(yù)設(shè)按鈕,確認(rèn)下發(fā)后,串口響應(yīng)后的指令如下:
屏預(yù)設(shè)數(shù)據(jù):01 06 9C 47 00 07 56 4D,其中01 是設(shè)備號,06 是預(yù)設(shè)功能碼,0x9C、0x47 為寄存器位地址碼,0x07 為系統(tǒng)預(yù)設(shè)的壓力值,0x56、0x4D 為CRC 校驗碼。其他控制測試為同樣方法。
最后就是總體功能測試,主要完成主控板與Smart 700 觸摸屏間的數(shù)據(jù)通信測試,其測試結(jié)果如圖5 所示。測試方法是主控板通過仿真器與觸摸屏設(shè)備進(jìn)行聯(lián)調(diào),觀察接收寄存器數(shù)據(jù),該數(shù)據(jù)為觸摸屏下發(fā)的Modbus 數(shù)據(jù)幀,然后進(jìn)行數(shù)據(jù)的處理、顯示及分析等。
如圖5 所示,當(dāng)前顯示實時壓力為3.5MPa,運行中觸摸屏請求數(shù)據(jù)幀格式為:01 03 9C 47 00 01 1A 4F,該指令為屏請求獲取內(nèi)存地址40007 單位的值,也就是實測壓力值。
單片機(jī)接收到上位機(jī)請求數(shù)據(jù)幀后,按照通信協(xié)議,將當(dāng)前檢測到的實測壓力值按照雙方的通信格式,發(fā)送響應(yīng)幀為:01 03 02 00 23 F9 9D,其中0x00、0x23 為響應(yīng)的壓力值,當(dāng)前壓力傳感器數(shù)據(jù)(十六進(jìn)制發(fā)送),發(fā)送到觸摸屏進(jìn)行顯示。
觸摸屏的按鈕功能測試,點擊觸摸屏預(yù)設(shè)壓力下發(fā)控制按鈕后,觸摸屏下發(fā)命令格式為:01 06 9C 49 00 06 F6 4E,當(dāng)單片機(jī)讀取到該數(shù)據(jù)幀后,獲取第二位0x06 為功能碼,知道當(dāng)前操作為預(yù)設(shè)操作,單片機(jī)開始提取數(shù)據(jù),獲取到的第四位和第五位的數(shù)據(jù)為0x00、0x06,即為觸摸屏下發(fā)的預(yù)設(shè)壓力值。單片機(jī)將獲取的數(shù)據(jù)賦給全局變量,用于程序邏輯控制、計算及顯示等,如圖5 所示,預(yù)設(shè)壓力為0.6 MPa(Set_YaLi= 0x06),其他觸摸屏按鈕功能預(yù)設(shè)方法一樣,如其中管道長度預(yù)設(shè)值為0.7 m(Set_GuanDao_Long = 0x07),鉆孔預(yù)設(shè)深度為0.5 m(Set_ZuanKong_Long = 0x05)等。
觸摸屏發(fā)送請求命令周期是小于50 ms,觸摸屏控制變量不多,1 s 周期內(nèi)基本可完成全部內(nèi)存單元的查詢,通過單片機(jī)單位時間內(nèi)收到的數(shù)據(jù)可判斷其穩(wěn)定性。Modbus 通訊方式是標(biāo)準(zhǔn)的信息幀,還帶有CRC 數(shù)據(jù)校驗功能,實驗過程數(shù)據(jù)傳輸穩(wěn)定,實現(xiàn)了兩者之間的數(shù)據(jù)通信。
圖5 STM32 單片機(jī)與Smart 700 觸摸屏聯(lián)合調(diào)試Fig.5 Joint debugging of STM32 MCU and Smart 700 touch screen
本文分析了Modbus RTU 的通信規(guī)則及Smart 700 觸摸屏的Modbus 驅(qū)動配置,了解了報文信息的規(guī)則,然后結(jié)合STM32 單片機(jī)的結(jié)構(gòu)特征,編寫了Modbus 的數(shù)據(jù)通信協(xié)議,完成了人機(jī)界面設(shè)計,最后通過實驗測試,實現(xiàn)了單片機(jī)與觸摸屏的數(shù)據(jù)通信,達(dá)到了設(shè)計的要求。本次實驗可以加大單片機(jī)技術(shù)在觸摸屏領(lǐng)域的應(yīng)用,替換傳統(tǒng)可編程控制器與觸摸屏項結(jié)合的工業(yè)設(shè)計模式,減少設(shè)備成本,擴(kuò)展性能強,信號傳輸穩(wěn)定,可廣泛用于工控領(lǐng)域,具有一定的實際意義,并且該軟件具備二次開發(fā)性能,可為同類項目通信提供參考。