鄒益民 徐 赤
(蘭州石化職業(yè)技術(shù)學(xué)院電子電氣系1,甘肅 蘭州 730060;杭州自動(dòng)化技術(shù)研究院2,浙江 杭州 310012)
人們?cè)谠O(shè)計(jì)新的控制系統(tǒng)及控制算法的過程中,往往首先借助Matlab的Simulink工具箱完成建模和仿真,直至獲得滿意的仿真結(jié)果[1]。由于在此過程中,我們常常會(huì)忽略實(shí)際對(duì)象系統(tǒng)可能存在的部分?jǐn)_動(dòng)和噪聲,并對(duì)其數(shù)學(xué)模型作出某種假設(shè)和近似,因而造成仿真與實(shí)際應(yīng)用相脫節(jié),導(dǎo)致設(shè)計(jì)好的控制器與實(shí)際被控對(duì)象相聯(lián)時(shí),控制效果與仿真結(jié)果有較大出入。
Simulink提供實(shí)時(shí)仿真環(huán)境(real-time workshop,RTW)解決上述問題[2-4]。RTW 支持快速原型化及嵌入式目標(biāo)設(shè)計(jì)兩種類型的實(shí)時(shí)系統(tǒng)構(gòu)建,但這兩類方法或需要專用的板卡,或需要專門設(shè)計(jì)的嵌入式工控機(jī)系統(tǒng),應(yīng)用受到很大限制。本文探討了使用Simulink串行通信模塊以及高性價(jià)比的ADAM-4000模塊構(gòu)建簡易半實(shí)物實(shí)時(shí)仿真系統(tǒng)的實(shí)施方案。
Simulink是MathWorks公司于1990年推出的產(chǎn)品,可用于動(dòng)態(tài)系統(tǒng)建模、仿真和分析。從Matlab6.0版本開始,MathWorks公司在軟件中增加了設(shè)備控制工具箱,提供了Simulink軟件環(huán)境與外界進(jìn)行串口通信的專用模塊庫[5]。該庫包括以下兩組串口通信模塊:To Instrument和Query Instrument模塊組以及 Serial Configuration、Serial Send和Serial Receive模塊組。前一組模塊除支持串口接口外,還支持GPIB、TCP/IP及USB等多種外部接口;后一組模塊專用于串口通信。
本方案使用后一組模塊實(shí)現(xiàn)串口通信,該組模塊的功能說明如下。
①Serial Configuration模塊用于配置串行口參數(shù)??芍付ù谔?hào)、數(shù)據(jù)傳輸?shù)牟ㄌ芈?、?shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗(yàn)?zāi)J降取?/p>
②Serial Send模塊用于向串口發(fā)送二進(jìn)制數(shù)據(jù)??芍付òl(fā)送數(shù)據(jù)的類型、數(shù)據(jù)發(fā)送的前導(dǎo)及結(jié)束字符等。
③Serial Receive模塊用于通過串口獲取遠(yuǎn)程數(shù)據(jù)。配置功能與Serial Send模塊相似。
研華ADAM-4000是一種應(yīng)用廣泛、性價(jià)比高的智能接口模塊。該系列模塊均支持RS-485串行異步半雙工通信,通信協(xié)議除支持Advantech ASCII協(xié)議外,個(gè)別模塊還支持Modbus/遠(yuǎn)程終端單元協(xié)議(remote terminal unit,RTU),從而確保其與任何計(jì)算機(jī)及工業(yè)控制系統(tǒng)均具有良好的兼容性[6]。
ADAM模塊種類繁多,功能齊全,其中,ADAM-4018+和ADAM-4024兩模塊可方便地與常見的傳感器、變送器、執(zhí)行器等配合,為計(jì)算機(jī)控制提供現(xiàn)場接口。兩模塊功能簡述如下。
①ADAM-4018+模擬量輸入模塊:8路16位分辨率模擬量差分輸入模塊,支持各型熱電偶及±20 mA、4~20 mA電流輸入。
②ADAM-4024模擬量輸出模塊:4路12位分辨率模擬量輸出模塊,支持0~20 mA、4~20 mA、±10 V輸出。
上述兩模塊均支持Advantech ASCII和Modbus/RTU通信協(xié)議。
由于Modbus協(xié)議具有更高的傳輸速率、可靠性和通用性,故本方案選用其作為Simulink與ADAM模塊間的通信協(xié)議。
使用Modbus協(xié)議通信時(shí),通過讀寫指定的寄存器即可獲得模塊的輸入輸出信號(hào)值。依據(jù)模塊的采樣分辨率和信號(hào)范圍,其對(duì)應(yīng)關(guān)系如下所述。
①ADAM-4018+模擬量輸入模塊
該模塊分辨率為16位,其輸入測量值大小可由式(1)計(jì)算:
式中:areg為Modbus模入寄存器的讀出值;L1、L0分別為被測信號(hào)的上、下限;d為計(jì)算所得的信號(hào)測量值。
如被測信號(hào)為4~20 mA電流,寄存器讀出值為29FDH,則對(duì)應(yīng)的電流測量值為:
②ADAM-4024模擬量輸出模塊
該模塊分辨率為12位,其輸出信號(hào)值大小可由式(2)計(jì)算:
式中:areg為Modbus模出寄存器的讀出值;L1、L0分別為輸出信號(hào)的上、下限;d為計(jì)算所得信號(hào)輸出值。
如輸出為0~20 mA電流,則6EFH對(duì)應(yīng)的電流輸出值為:
d=6EFH ×20/4 095=1 775×20/4 095=8.67 mA
將ADAM-4000模塊狀態(tài)撥至INIT狀態(tài),并通過ADAM-4000-5000 Utility軟件,即可將通信協(xié)議設(shè)置為Advantech ASCII或 Modbus。
Modbus協(xié)議采用RS-485或RS-232作為其物理層,數(shù)據(jù)通信基于主-從技術(shù),僅主設(shè)備能初始化傳輸,而從設(shè)備則只能對(duì)主設(shè)備查詢請(qǐng)求作出響應(yīng)[7-8]。Modbus協(xié)議的傳輸模式又可細(xì)分為ASCII和遠(yuǎn)程終端單元(RTU)兩種模式。
①ASCII模式:消息中的每個(gè)字節(jié)(8 bit)都作為兩個(gè)ASCII字符發(fā)送。這種方式的主要優(yōu)點(diǎn)是字符發(fā)送的時(shí)間間隔可達(dá)到1 s而不產(chǎn)生錯(cuò)誤,適用于慢速網(wǎng)絡(luò)。
②RTU模式:消息中的每個(gè)字節(jié)(8 bit)包含兩個(gè)4 bit的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是傳輸速率較高。本方案即采用這種傳輸模式。
為保證數(shù)據(jù)傳輸?shù)母呖煽啃裕琈odbus提供了多種錯(cuò)誤校驗(yàn)方法。奇偶校驗(yàn)可作用于每個(gè)字符;幀校驗(yàn)縱向冗余碼(longitudinal redundancy check,LRC)和循環(huán)冗余碼(cyclic redundancy check,CRC)則作用于整個(gè)消息幀,分別適用于ASCII和RTU傳輸模式。
3.2.1 讀取模入狀態(tài)(功能碼04)
本功能可使主站獲得從站的模擬量輸入值。主站命令幀中可指定從哪一個(gè)模擬量開始,連續(xù)讀取多少模擬量(每路模擬量包含2個(gè)字節(jié),高位在前、低位在后)。從站應(yīng)答幀中的數(shù)據(jù)是按上述要求讀取的模擬量數(shù)據(jù)。
以下為讀取17號(hào)節(jié)點(diǎn)模入點(diǎn)0108~0110的數(shù)值示例,各模入點(diǎn)讀出值分別為555(022BH)、0及100(0064H)。
①查詢RTU幀
讀取模入狀態(tài)的查詢RTU幀格式如圖1所示。
圖1 讀模入狀態(tài)的查詢RTU幀F(xiàn)ig.1 RTU query frame of reading analog inputs
②應(yīng)答RTU幀
讀取模入狀態(tài)的應(yīng)答RTU幀格式如圖2所示。
圖2 讀模入狀態(tài)的應(yīng)答RTU幀F(xiàn)ig.2 RTU response frame of reading analog inputs
3.2.2 強(qiáng)制單路模出(功能碼06)
本功能可使主站設(shè)定從站某路模擬量輸出的值。主站命令幀中可指定將哪一路模擬量輸出值修改為預(yù)定值。從站正常應(yīng)答是將報(bào)文原文發(fā)回。以下為強(qiáng)制17號(hào)從站模出點(diǎn)136為039EH的示例,給出了強(qiáng)制模出狀態(tài)的查詢、應(yīng)答RTU幀格式。
①查詢RTU幀
強(qiáng)制模出狀態(tài)的查詢RTU幀格式如圖3所示。
圖3 強(qiáng)制模出狀態(tài)的查詢RTU幀F(xiàn)ig.3 RTU query frame of enforcing analog output
②應(yīng)答RTU幀
強(qiáng)制模出狀態(tài)的應(yīng)答RTU幀格式如圖4所示。
圖4 強(qiáng)制模出狀態(tài)的應(yīng)答RTU幀F(xiàn)ig.4 RTU response frame of enforcing analog output
系統(tǒng)框圖如圖5所示。其中,虛線框中部分由Simulink軟件實(shí)現(xiàn)所需的控制算法及與ADAM模塊的RS-485通信功能;ADAM-4018+用于獲取測量變送器給出的4~20 mA電流信號(hào),并通過RS-485接口發(fā)送至Simulink軟件(Modbus總線地址為2,讀模入功能碼為04);Simulink軟件通過RS-485接口給出控制輸出信號(hào)(Modbus總線地址為3,強(qiáng)制單路輸出功能碼為06),再經(jīng)ADAM-4024轉(zhuǎn)換為0~20 mA輸出電流,驅(qū)動(dòng)執(zhí)行機(jī)構(gòu),最終達(dá)到對(duì)被控對(duì)象的控制目標(biāo)。
圖5 仿真系統(tǒng)組成框圖Fig.5 Composition of the simulation system
Simulink功能模塊連接圖如圖6所示。
圖6 Simulink功能模塊連接圖Fig.6 Connections of Simulink functional modules
由ADAM-4018+給出的測量信號(hào),經(jīng)Simulink中的串口接收模塊接收后,通過自定義的“接收響應(yīng)串分析處理函數(shù)”,獲得被控參數(shù)的測量值。該測量值經(jīng)PID模塊實(shí)現(xiàn)運(yùn)算處理后,轉(zhuǎn)換為4~20 mA輸出值。該輸出值再經(jīng)自定義的“發(fā)送命令串生成函數(shù)”,由Simulink中的串口發(fā)送模塊發(fā)送至ADAM-4024模塊,用于驅(qū)動(dòng)執(zhí)行機(jī)構(gòu)。圖6中的串口組態(tài)模塊用于完成串行口配置。在此,串行口為COM1,波特率為9 600 bit/s,8個(gè)數(shù)據(jù)位,1個(gè)停止位,無奇偶校驗(yàn)。
Simulink可使用內(nèi)置于Matlab/Simulink中的豐富的各類功能模塊,也允許用戶使用嵌入式函數(shù)或是S函數(shù)創(chuàng)建用戶自定義模塊[9]。其中,嵌入式函數(shù)與Matlab的M-函數(shù)語法結(jié)構(gòu)非常相似,方便熟悉Matlab的使用者掌握與應(yīng)用。而S函數(shù)則是一種具有特殊調(diào)用格式的 Matlab函數(shù),可通過 Matlab、C、C++、Fortran等語言編寫,功能強(qiáng)大,但使用也更加復(fù)雜。本方案借助嵌入式函數(shù),實(shí)現(xiàn)如圖6所示的“發(fā)送命令串生成函數(shù)”和“接收響應(yīng)串分析處理函數(shù)”功能模塊。
4.2.1 CRC-16 循環(huán)冗余碼計(jì)算
計(jì)算CRC-16碼的功能可由查表法快速完成[10],因篇幅所限,此處略去。
4.2.2 發(fā)送命令串產(chǎn)生
以下程序用于產(chǎn)生發(fā)送命令串,實(shí)現(xiàn)ADAM-4024模出值修改和ADAM-4018+模入值讀取功能。
4.2.3 響應(yīng)串接收
由于ADAM-4018+與ADAM-2024響應(yīng)串的長度不同,分別為7 B與8 B,故程序中使用內(nèi)部緩沖區(qū)組合響應(yīng)串并進(jìn)行甄別及判讀。本部分程序框圖如圖7所示。
圖7 響應(yīng)串處理程序框圖Fig.7 Processing program of the response string
讀ADAM-4024通道0模出值的程序如下。
由于Simulink的純數(shù)字仿真往往難以精確模擬真實(shí)的控制對(duì)象,本文給出了一種使用ADAM-4000模塊構(gòu)成現(xiàn)場接口的簡易半實(shí)物仿真控制系統(tǒng)及其詳細(xì)硬軟件實(shí)現(xiàn)方案。通過簡單的PID仿真實(shí)例表明,本文所述方法將控制算法應(yīng)用于實(shí)際的被控對(duì)象,可獲得更真實(shí)的控制效果。
借助本文提出的方法可有效縮短控制系統(tǒng)及算法設(shè)計(jì)的研發(fā)周期,滿足控制器設(shè)計(jì)靈活性和快速性的需要,為高級(jí)控制算法的研究和驗(yàn)證提供了一個(gè)良好的實(shí)驗(yàn)平臺(tái)。
[1]魏克新,工石亮,陳志敏,等.MATLAB語言與自動(dòng)控制系統(tǒng)設(shè)計(jì)[M].2版.北京:機(jī)械工業(yè)出版社,2004.
[2]徐國政,陳勇.基于Matlab/xPC Target的數(shù)據(jù)采集系統(tǒng)[J].微計(jì)算機(jī)信息,2005(1):63 -64.
[3]李根,唐臻宇,耿海翔,等.基于Matlab/RTW的控制系統(tǒng)一體化新型設(shè)計(jì)方法[J].中國測試,2010,36(1):75 -77.
[4]齊振恒,孫中杰,李濤.RTW嵌入式代碼自動(dòng)生成機(jī)制與代碼結(jié)構(gòu)分析[J].計(jì)算機(jī)測量與控制,2010,18(3):639 -642.
[5]趙云鵬.MATLAB串口通信在數(shù)據(jù)采集中的應(yīng)用[J].微計(jì)算機(jī)信息,2006,22(1):111 -112.
[6]李梅,段晨東,韓旻,等.基于ADAM模塊的恒溫恒濕空調(diào)監(jiān)控系統(tǒng)[J].儀表技術(shù)與傳感器,2008(2):74-75.
[7]封亞斌.采用串口通信技術(shù)實(shí)現(xiàn)Modbus數(shù)據(jù)通信[J].自動(dòng)化儀表,2004,25(10):56 -58.
[8]汪義旺,崔鳴,祁春清.RS-485/Modbus在FFU控制系統(tǒng)中的應(yīng)用[J].自動(dòng)化儀表,2010,31(6):39 -41,44.
[9]陳永春.從Matlab/Simulink模型到代碼實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2002.
[10]孟開元.Modbus通信協(xié)議中CRC校驗(yàn)的快速C語言算法[J].福建電腦,2004(11):63 -64.