,, ,
(上海大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,上海 200072)
基于STM32的中央空調(diào)控制策略通信方法與實(shí)現(xiàn)
嚴(yán)良文,賴雪峰,韓濤,張?jiān)诜?/p>
(上海大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,上海 200072)
Modbus是Modicon公司推出的一種通信協(xié)議, 在工業(yè)自動(dòng)化行業(yè)的廣泛使用已使之成為事實(shí)工業(yè)標(biāo)準(zhǔn)。在自動(dòng)化系統(tǒng)中有大量支持Modbus協(xié)議的設(shè)備,包括PLC和智能儀器儀表等,以高性能嵌入式微處理器作為從站,能夠很好地適應(yīng)系統(tǒng)對功能、可靠性、成本、體積及功耗方面的嚴(yán)格要求[1]。S7-200PLC 是德國西門子公司生產(chǎn)的一種小型PLC,其功能強(qiáng)大,在自動(dòng)化控制設(shè)備中得到了廣泛的應(yīng)用。在PLC 控制系統(tǒng)的運(yùn)行過程中,操作人員為了更好地進(jìn)行控制,需要實(shí)時(shí)改變系統(tǒng)的某些參數(shù),也需要了解、掌握控制系統(tǒng)中的一些實(shí)時(shí)信息。利用上位機(jī)組態(tài)王、單片機(jī)系統(tǒng),與PLC 控制系統(tǒng)通過RS232/RS485傳輸媒介,可以實(shí)現(xiàn)控制系統(tǒng)的實(shí)時(shí)控制和監(jiān)測。
在此,設(shè)計(jì)開發(fā)了基于STM32F103C8T6單片機(jī)的從站,采用Modbus協(xié)議,以實(shí)現(xiàn)與主站PLC及PC的通信,主要完成控制策略算法的計(jì)算和相關(guān)參數(shù)的處理。
STM32F103單片機(jī)使用的是意法半導(dǎo)體公司的32位ARM Cortex-M3內(nèi)核。為了實(shí)現(xiàn)它與具有Modbus協(xié)議的PLC和組態(tài)王之間的通訊,設(shè)計(jì)出了相應(yīng)的軟硬件。
系統(tǒng)采用的是STM32F103C8T6,最高工作頻率為72MHz,擁有可達(dá)64KB的閃存、20KB的SRAM和非常豐富的外設(shè)。內(nèi)部集成了復(fù)位電路、調(diào)壓器、低電壓檢測和精確的RC振蕩器等,使用戶的開發(fā)過程更加方便。STM32F103系列單片機(jī)功能強(qiáng)大且功耗低,是32位市場上功耗最低的產(chǎn)品。
Modbus通信采用主從方式,即僅主設(shè)備可以初始化通信過程,從設(shè)備只能根據(jù)主設(shè)備提供的數(shù)據(jù)做出響應(yīng)。標(biāo)準(zhǔn)的Modbus使用RS232C、RS422或RS485串行接口。Modbus一次通信發(fā)送和接收的數(shù)據(jù)包由若干幀組成,協(xié)議正是定義了這些幀的意義,控制器只要按照協(xié)議解釋其接收和發(fā)送的數(shù)據(jù),就能與在同一網(wǎng)絡(luò)中采用同樣協(xié)議的控制器實(shí)現(xiàn)通信[2]。由于RS485采用平衡發(fā)送和差分接收,具有抑制共模干擾能力,并且傳輸距離為幾十米到上千米,因此,設(shè)計(jì)采用RS485串行接口。
Modbus協(xié)議有2種傳輸模式:ASCII(美國信息交換碼)模式和RTU(遠(yuǎn)程終端單元)模式。用戶可根據(jù)自己的需要來選擇通訊模式,但Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和所設(shè)置的參數(shù)(包括波特率、校驗(yàn)方式和數(shù)據(jù)位等)。RTU模式信息幀的8位數(shù)據(jù)包括2個(gè)4位16進(jìn)制字符,相對于ASCII模式,RTU模式表達(dá)相同的信息需要較少的位數(shù),并且在相同速率下具有更大的數(shù)據(jù)流量。系統(tǒng)采用的是西門子S7-200系列PLC,其集成了RTU模式的指令。因此,采用Modbus協(xié)議的RTU模式。
在RTU模式中,沒有起始位也沒有停止位,傳送信息開始于一個(gè)默認(rèn)的至少3.5個(gè)字符時(shí)間的間隔。然后發(fā)送的第1個(gè)域是設(shè)備地址域。每個(gè)從設(shè)備接收到第1個(gè)域時(shí)都進(jìn)行判斷是否發(fā)給自己的,在接收到最后一個(gè)字符后,一個(gè)至少3.5個(gè)字符時(shí)間的停頓標(biāo)定了消息的結(jié)束,新的消息可在此停頓后開始,整個(gè)消息幀必須是一個(gè)連續(xù)的流傳輸。如果在幀完成之前有超過1.5個(gè)字符時(shí)間的停頓,接收設(shè)備將刷新不完整的信息并假定下一個(gè)字符是一個(gè)新消息的地址域。同樣,如果一個(gè)新消息在小于3.5個(gè)字符時(shí)間內(nèi)接著前一個(gè)消息開始,接收的設(shè)備將認(rèn)為它是前一個(gè)消息的延續(xù)。由于在最后的CRC域的值是不可能正確的,將導(dǎo)致一個(gè)錯(cuò)誤。RTU消息幀的結(jié)構(gòu)如表1所示。
表1 RTU格式消息幀結(jié)構(gòu)
起始位站地址功能代碼數(shù)據(jù)CRC低字節(jié)CRC高字節(jié)結(jié)束符≥3.5字符8bit8bitN個(gè)bit16bit≥3.5字符
a.站地址。第1個(gè)域?yàn)檎镜刂?,用來選擇相應(yīng)的從設(shè)備。
b.功能碼。從站接收到主站發(fā)來的功能代碼,將執(zhí)行相對應(yīng)的功能。
c.數(shù)據(jù)域。主站發(fā)給從站的數(shù)據(jù)域中,包含了從站要完成功能指示的動(dòng)作所必需的附加信息。
d.CRC校驗(yàn)。RTU模式傳輸時(shí),信息包含了一個(gè)基于CRC方法的校驗(yàn)域,用來判斷數(shù)據(jù)傳輸?shù)恼_與否。CRC編碼方法通常有程序計(jì)算法和查表法,為提高通訊速度,系統(tǒng)采用查表法。
3.1 單片機(jī)Modbus協(xié)議設(shè)計(jì)
在系統(tǒng)中,STM32F103作為從站,PLC和上位機(jī)組態(tài)王作為主站進(jìn)行通訊,選用RTU傳輸模式進(jìn)行數(shù)據(jù)傳輸,從站通訊流程如圖1所示。
圖1 從站通訊流程
通訊時(shí)主站向從站發(fā)送Modbus協(xié)議幀,包含了從站地址、功能碼,從站執(zhí)行該功能的相關(guān)參數(shù)及16位的CRC校驗(yàn),單片機(jī)產(chǎn)生中斷,開始接收消息;消息接收完成后先判斷從站地址是否與本機(jī)相符,如不相符拋棄該消息返回主程序;否則進(jìn)行CRC校驗(yàn),若校驗(yàn)錯(cuò)誤則生成錯(cuò)誤代碼返回,請求主機(jī)重發(fā)消息;如果校驗(yàn)正確,則判斷功能碼儀表是否支持,是則按功能碼進(jìn)入相應(yīng)的處理程序[3]。
3.2 STM32F103串口USART配置
Modbus協(xié)議在使用RTU傳輸模式時(shí),需對其波特率、數(shù)據(jù)位、停止位、校驗(yàn)位和控制特性進(jìn)行配置。串口初始化代碼如下:
USART_InitStructure.USART_BaudRate = 9600;//波特率設(shè)置,9600
USART_InitStructure.USART_WordLength=USART_WordLength_8b;//數(shù)據(jù)位數(shù)設(shè)置,8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位設(shè)置,1位
USART_InitStructure.USART_Parity = USART_Parity_No ;//是否奇偶校驗(yàn),無
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制模式設(shè)置,沒有使能
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收與發(fā)送都使能
USART_Init(USART3, &USART_InitStructure);//初始化USART3
3.3 接收與發(fā)送消息幀處理程序設(shè)計(jì)
系統(tǒng)在從站接收到主站發(fā)來的消息幀后,判斷其地址,CRC校驗(yàn)后,根據(jù)其功能碼06H(寫單個(gè)保持寄存器),10H(寫多個(gè)寄存器)和03H(讀取保持寄存器),來判斷從站進(jìn)入相應(yīng)功能程序。功能選擇是PLC和組態(tài)王根據(jù)用戶信息輸入來選擇Modbus相應(yīng)功能參數(shù),參數(shù)包括傳輸模式、服務(wù)類型和響應(yīng)模式等。若系統(tǒng)對象有其他的功能需求,可以進(jìn)行擴(kuò)充。
系統(tǒng)中組態(tài)王將采集到的多個(gè)待處理的數(shù)據(jù)通過Modbus總線傳輸給單片機(jī),單片機(jī)通過控制策略計(jì)算后返回相應(yīng)數(shù)據(jù)量的數(shù)據(jù)。當(dāng)組態(tài)王發(fā)送多個(gè)數(shù)據(jù)時(shí),單片機(jī)將一一接收到數(shù)據(jù),把數(shù)據(jù)保存到數(shù)組中后,程序進(jìn)入相應(yīng)寫寄存器功能程序,根據(jù)Modbus格式幀響應(yīng)主站。當(dāng)接收到讀數(shù)據(jù)功能要求時(shí),進(jìn)入功能碼程序Func03(),則將保存到數(shù)組中的值經(jīng)過一系列計(jì)算處理后返回對應(yīng)值。設(shè)計(jì)中定義了03H,06H和10H功能函數(shù),方便功能的選擇。
3.4 RTU接收響應(yīng)幀格式的確定
Modbus協(xié)議規(guī)定RTU幀的起始與結(jié)束標(biāo)志要大于3.5個(gè)字符時(shí)間,并且在一串消息幀里,字符之間的傳輸時(shí)間不能大于1.5個(gè)字符的時(shí)間,若不符合,設(shè)備將刷新不完整的消息并假定下一個(gè)字節(jié)是新消息的地址。系統(tǒng)利用STM32內(nèi)部定時(shí)器TIM2做超時(shí)檢測的方法,來判斷一個(gè)幀結(jié)束與否,控制過程如圖2所示。
圖2 響應(yīng)幀格式判斷流程
a.主站沒有發(fā)送消息時(shí),USART串口處于等待中斷狀態(tài),接收字符數(shù)大小變量ReceiveSize賦值為0。
b.當(dāng)開始接收消息幀時(shí),進(jìn)入串口中斷,每接收到一個(gè)字節(jié)就啟動(dòng)定時(shí)器TIM2。Time從零開始計(jì)時(shí),并在進(jìn)入中斷時(shí)將Time賦值給Time0,在主函數(shù)中不斷檢測Time的值是否大于3.5個(gè)字符時(shí)間,若滿足,則認(rèn)為接收完畢,進(jìn)入相應(yīng)服務(wù)函數(shù)。同時(shí)也檢測Time0的值是否在1.5到3.5個(gè)字符時(shí)間內(nèi),若滿足條件則將ReceiveSize賦值0,即將上幀數(shù)據(jù)丟棄,這幀當(dāng)做新的一幀消息接收。
4.1 單片機(jī)與Modbus調(diào)試軟件通訊調(diào)試
通過Modbus串口調(diào)試軟件實(shí)現(xiàn)單片機(jī)與PC的通信。串口調(diào)試軟件上可以實(shí)現(xiàn)03H,06H,10H等功能,只有嚴(yán)格按照Modbus協(xié)議才能使調(diào)試軟件上的讀寫通訊正常。系統(tǒng)要實(shí)現(xiàn)寫入16個(gè)數(shù)據(jù),返回2個(gè)數(shù)到組態(tài)王,1個(gè)數(shù)到PLC。
4.2 單片機(jī)與中央空調(diào)設(shè)備通訊調(diào)試
中央空調(diào)控制系統(tǒng)將各樓層的調(diào)節(jié)閥開度值和機(jī)組的各個(gè)參數(shù)采集到組態(tài)王后,在組態(tài)界面顯示所采集的值,并將其寫入單片機(jī),單片機(jī)經(jīng)過控制策略運(yùn)算后再返回結(jié)果到組態(tài)王和PLC,如圖3所示。
圖3 數(shù)據(jù)流向
在通訊過程中,組態(tài)王將多個(gè)模擬量值一一對應(yīng)寄存器地址,并在單片機(jī)程序中編寫對應(yīng)的寄存器地址變量,對應(yīng)每個(gè)樓層和機(jī)組的各參數(shù)。當(dāng)組態(tài)王將多個(gè)值寫入時(shí),將會(huì)覆蓋上次寫入的值,同時(shí)將每次寫入的值保存在一數(shù)組中,當(dāng)收到03H讀取功能碼時(shí),則把保存在數(shù)組中的值取出進(jìn)入控制策略運(yùn)算,返回計(jì)算結(jié)果。根據(jù)數(shù)據(jù)起始地址來判斷是組態(tài)王還是PLC發(fā)出的讀取命令,從而返回對應(yīng)的運(yùn)算結(jié)果。
系統(tǒng)選擇了廣泛采用的Modbus作為通信協(xié)議,并以組態(tài)王作為上位機(jī),實(shí)時(shí)監(jiān)控并將數(shù)據(jù)傳輸?shù)礁髟O(shè)備進(jìn)行處理。而單片機(jī)STM32作為Modbus協(xié)議從站,在設(shè)計(jì)過程中實(shí)現(xiàn)了Modbus協(xié)議的正常發(fā)送與響應(yīng),并且針對系統(tǒng)需求實(shí)現(xiàn)了其特定功能。單片機(jī)從站在運(yùn)行過程中通信良好,實(shí)現(xiàn)了控制策略算法和相關(guān)參數(shù)的處理,在系統(tǒng)中起到重要作用。當(dāng)其他設(shè)備需要擴(kuò)充特定功能,但由于自身成本、體積和功耗等限制時(shí),可用單片機(jī)系統(tǒng)來完成,這樣就能充分發(fā)揮單片機(jī)和其他設(shè)備各自的優(yōu)點(diǎn),相互配合,取得較好的控制效果。該通信的實(shí)現(xiàn)表明,STM32單片機(jī)在自動(dòng)化控制系統(tǒng)中有較好的應(yīng)用前景,同時(shí)在其他嵌入式系統(tǒng)的串口通信實(shí)現(xiàn)上也有很好的借鑒意義。
[1] 彭道剛,張 浩,李 輝,等. 基于Modbus協(xié)議的ARM嵌入式監(jiān)測平臺設(shè)計(jì)與實(shí)現(xiàn)[J]. 電力自動(dòng)化設(shè)備,2009,29(1):115-119.
[2] 彭慶海,胡小強(qiáng). Modbus協(xié)議及其在MCU與PLC通信中的應(yīng)用[J]. 機(jī)電工程,2010,27(4):52-55.
[3] 李 娜. 基于Modbus協(xié)議的智能儀表的設(shè)計(jì)[D]. 北京:北京郵電大學(xué),2008.
Method and Realization of Central Air Conditioning Control Strategy CommunicationBased on STM32
YANLiangwen,LAIXuefeng,HANTao,ZHANGZaifang
( School of Mechatronic Engineering and Automation, Shanghai University, Shanghai 200072,China )
采用Modbus通信協(xié)議,以西門子S7-200PLC和上位機(jī)組態(tài)王為主站,設(shè)計(jì)開發(fā)了基于STM32F103C8T6單片機(jī)的從站。介紹了兩者之間的RS485/RS232方式的通信協(xié)議的建立和程序的設(shè)計(jì),詳細(xì)描述了單片機(jī)與PC之間、單片機(jī)與PLC之間的通訊調(diào)試,從而實(shí)現(xiàn)了基于RTU模式Modbus協(xié)議的串行通信。該系統(tǒng)應(yīng)用于中央空調(diào)控制系統(tǒng)中,其控制策略和主要控制算法由STM32從站計(jì)算,能取得較好的控制效果。
STM32F103單片機(jī);通信;Modbus協(xié)議; 中央空調(diào)
With the Siemens S7-200PLC and upper computer KingView being the master, a slave station of STM32F103C8T6 microcontroller is developed based on Modbus protocol. The establishment and program designing of communication protocol using RS485/RS232between master and slave is introduced firstly. Then the process of debugging between the microcontroller and PC, the microcontroller and the PLC is elaborated. Thus serial communication is implemented based on Modbus protocol in RTU mode. The system will be applied in central air-conditioning control system. A good control effect will be obtained as the controlling strategy and main algorithm can be computed in the STM32slave station.
STM32F103microcontroller; communication; Modbus protocol; central air conditioning
2014-04-15
國家自然科學(xué)基金資助項(xiàng)目(51205242);上海市科委科技創(chuàng)新行動(dòng)計(jì)劃資助項(xiàng)目(13111102900)
TP206
A
1001-2257(2014)09-0063-03
嚴(yán)良文(1967-),男,湖北荊州人,副研究員,研究方向?yàn)闄C(jī)電一體化系統(tǒng)和數(shù)字傳熱學(xué)研究;賴雪峰(1989-),男,福建上杭人,碩士研究生,研究方向?yàn)闄C(jī)電一體化。