鄒益民 徐 赤
(蘭州石化職業技術學院電子電氣系1,甘肅 蘭州 730060;杭州自動化技術研究院2,浙江 杭州 310012)
人們在設計新的控制系統及控制算法的過程中,往往首先借助Matlab的Simulink工具箱完成建模和仿真,直至獲得滿意的仿真結果[1]。由于在此過程中,我們常常會忽略實際對象系統可能存在的部分擾動和噪聲,并對其數學模型作出某種假設和近似,因而造成仿真與實際應用相脫節,導致設計好的控制器與實際被控對象相聯時,控制效果與仿真結果有較大出入。
Simulink提供實時仿真環境(real-time workshop,RTW)解決上述問題[2-4]。RTW 支持快速原型化及嵌入式目標設計兩種類型的實時系統構建,但這兩類方法或需要專用的板卡,或需要專門設計的嵌入式工控機系統,應用受到很大限制。本文探討了使用Simulink串行通信模塊以及高性價比的ADAM-4000模塊構建簡易半實物實時仿真系統的實施方案。
Simulink是MathWorks公司于1990年推出的產品,可用于動態系統建模、仿真和分析。從Matlab6.0版本開始,MathWorks公司在軟件中增加了設備控制工具箱,提供了Simulink軟件環境與外界進行串口通信的專用模塊庫[5]。該庫包括以下兩組串口通信模塊:To Instrument和Query Instrument模塊組以及 Serial Configuration、Serial Send和Serial Receive模塊組。前一組模塊除支持串口接口外,還支持GPIB、TCP/IP及USB等多種外部接口;后一組模塊專用于串口通信。
本方案使用后一組模塊實現串口通信,該組模塊的功能說明如下。
①Serial Configuration模塊用于配置串行口參數。可指定串口號、數據傳輸的波特率、數據位數、停止位數、奇偶校驗模式等。
②Serial Send模塊用于向串口發送二進制數據。可指定發送數據的類型、數據發送的前導及結束字符等。
③Serial Receive模塊用于通過串口獲取遠程數據。配置功能與Serial Send模塊相似。
研華ADAM-4000是一種應用廣泛、性價比高的智能接口模塊。該系列模塊均支持RS-485串行異步半雙工通信,通信協議除支持Advantech ASCII協議外,個別模塊還支持Modbus/遠程終端單元協議(remote terminal unit,RTU),從而確保其與任何計算機及工業控制系統均具有良好的兼容性[6]。
ADAM模塊種類繁多,功能齊全,其中,ADAM-4018+和ADAM-4024兩模塊可方便地與常見的傳感器、變送器、執行器等配合,為計算機控制提供現場接口。兩模塊功能簡述如下。
①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通信協議。
由于Modbus協議具有更高的傳輸速率、可靠性和通用性,故本方案選用其作為Simulink與ADAM模塊間的通信協議。
使用Modbus協議通信時,通過讀寫指定的寄存器即可獲得模塊的輸入輸出信號值。依據模塊的采樣分辨率和信號范圍,其對應關系如下所述。
①ADAM-4018+模擬量輸入模塊
該模塊分辨率為16位,其輸入測量值大小可由式(1)計算:

式中:areg為Modbus模入寄存器的讀出值;L1、L0分別為被測信號的上、下限;d為計算所得的信號測量值。
如被測信號為4~20 mA電流,寄存器讀出值為29FDH,則對應的電流測量值為:

②ADAM-4024模擬量輸出模塊
該模塊分辨率為12位,其輸出信號值大小可由式(2)計算:

式中:areg為Modbus模出寄存器的讀出值;L1、L0分別為輸出信號的上、下限;d為計算所得信號輸出值。
如輸出為0~20 mA電流,則6EFH對應的電流輸出值為:
d=6EFH ×20/4 095=1 775×20/4 095=8.67 mA
將ADAM-4000模塊狀態撥至INIT狀態,并通過ADAM-4000-5000 Utility軟件,即可將通信協議設置為Advantech ASCII或 Modbus。
Modbus協議采用RS-485或RS-232作為其物理層,數據通信基于主-從技術,僅主設備能初始化傳輸,而從設備則只能對主設備查詢請求作出響應[7-8]。Modbus協議的傳輸模式又可細分為ASCII和遠程終端單元(RTU)兩種模式。
①ASCII模式:消息中的每個字節(8 bit)都作為兩個ASCII字符發送。這種方式的主要優點是字符發送的時間間隔可達到1 s而不產生錯誤,適用于慢速網絡。
②RTU模式:消息中的每個字節(8 bit)包含兩個4 bit的十六進制字符。這種方式的主要優點是傳輸速率較高。本方案即采用這種傳輸模式。
為保證數據傳輸的高可靠性,Modbus提供了多種錯誤校驗方法。奇偶校驗可作用于每個字符;幀校驗縱向冗余碼(longitudinal redundancy check,LRC)和循環冗余碼(cyclic redundancy check,CRC)則作用于整個消息幀,分別適用于ASCII和RTU傳輸模式。
3.2.1 讀取模入狀態(功能碼04)
本功能可使主站獲得從站的模擬量輸入值。主站命令幀中可指定從哪一個模擬量開始,連續讀取多少模擬量(每路模擬量包含2個字節,高位在前、低位在后)。從站應答幀中的數據是按上述要求讀取的模擬量數據。
以下為讀取17號節點模入點0108~0110的數值示例,各模入點讀出值分別為555(022BH)、0及100(0064H)。
①查詢RTU幀
讀取模入狀態的查詢RTU幀格式如圖1所示。

圖1 讀模入狀態的查詢RTU幀Fig.1 RTU query frame of reading analog inputs
②應答RTU幀
讀取模入狀態的應答RTU幀格式如圖2所示。

圖2 讀模入狀態的應答RTU幀Fig.2 RTU response frame of reading analog inputs
3.2.2 強制單路模出(功能碼06)
本功能可使主站設定從站某路模擬量輸出的值。主站命令幀中可指定將哪一路模擬量輸出值修改為預定值。從站正常應答是將報文原文發回。以下為強制17號從站模出點136為039EH的示例,給出了強制模出狀態的查詢、應答RTU幀格式。
①查詢RTU幀
強制模出狀態的查詢RTU幀格式如圖3所示。

圖3 強制模出狀態的查詢RTU幀Fig.3 RTU query frame of enforcing analog output
②應答RTU幀
強制模出狀態的應答RTU幀格式如圖4所示。

圖4 強制模出狀態的應答RTU幀Fig.4 RTU response frame of enforcing analog output
系統框圖如圖5所示。其中,虛線框中部分由Simulink軟件實現所需的控制算法及與ADAM模塊的RS-485通信功能;ADAM-4018+用于獲取測量變送器給出的4~20 mA電流信號,并通過RS-485接口發送至Simulink軟件(Modbus總線地址為2,讀模入功能碼為04);Simulink軟件通過RS-485接口給出控制輸出信號(Modbus總線地址為3,強制單路輸出功能碼為06),再經ADAM-4024轉換為0~20 mA輸出電流,驅動執行機構,最終達到對被控對象的控制目標。

圖5 仿真系統組成框圖Fig.5 Composition of the simulation system
Simulink功能模塊連接圖如圖6所示。

圖6 Simulink功能模塊連接圖Fig.6 Connections of Simulink functional modules
由ADAM-4018+給出的測量信號,經Simulink中的串口接收模塊接收后,通過自定義的“接收響應串分析處理函數”,獲得被控參數的測量值。該測量值經PID模塊實現運算處理后,轉換為4~20 mA輸出值。該輸出值再經自定義的“發送命令串生成函數”,由Simulink中的串口發送模塊發送至ADAM-4024模塊,用于驅動執行機構。圖6中的串口組態模塊用于完成串行口配置。在此,串行口為COM1,波特率為9 600 bit/s,8個數據位,1個停止位,無奇偶校驗。
Simulink可使用內置于Matlab/Simulink中的豐富的各類功能模塊,也允許用戶使用嵌入式函數或是S函數創建用戶自定義模塊[9]。其中,嵌入式函數與Matlab的M-函數語法結構非常相似,方便熟悉Matlab的使用者掌握與應用。而S函數則是一種具有特殊調用格式的 Matlab函數,可通過 Matlab、C、C++、Fortran等語言編寫,功能強大,但使用也更加復雜。本方案借助嵌入式函數,實現如圖6所示的“發送命令串生成函數”和“接收響應串分析處理函數”功能模塊。
4.2.1 CRC-16 循環冗余碼計算
計算CRC-16碼的功能可由查表法快速完成[10],因篇幅所限,此處略去。
4.2.2 發送命令串產生
以下程序用于產生發送命令串,實現ADAM-4024模出值修改和ADAM-4018+模入值讀取功能。

4.2.3 響應串接收
由于ADAM-4018+與ADAM-2024響應串的長度不同,分別為7 B與8 B,故程序中使用內部緩沖區組合響應串并進行甄別及判讀。本部分程序框圖如圖7所示。

圖7 響應串處理程序框圖Fig.7 Processing program of the response string
讀ADAM-4024通道0模出值的程序如下。

由于Simulink的純數字仿真往往難以精確模擬真實的控制對象,本文給出了一種使用ADAM-4000模塊構成現場接口的簡易半實物仿真控制系統及其詳細硬軟件實現方案。通過簡單的PID仿真實例表明,本文所述方法將控制算法應用于實際的被控對象,可獲得更真實的控制效果。
借助本文提出的方法可有效縮短控制系統及算法設計的研發周期,滿足控制器設計靈活性和快速性的需要,為高級控制算法的研究和驗證提供了一個良好的實驗平臺。
[1]魏克新,工石亮,陳志敏,等.MATLAB語言與自動控制系統設計[M].2版.北京:機械工業出版社,2004.
[2]徐國政,陳勇.基于Matlab/xPC Target的數據采集系統[J].微計算機信息,2005(1):63 -64.
[3]李根,唐臻宇,耿海翔,等.基于Matlab/RTW的控制系統一體化新型設計方法[J].中國測試,2010,36(1):75 -77.
[4]齊振恒,孫中杰,李濤.RTW嵌入式代碼自動生成機制與代碼結構分析[J].計算機測量與控制,2010,18(3):639 -642.
[5]趙云鵬.MATLAB串口通信在數據采集中的應用[J].微計算機信息,2006,22(1):111 -112.
[6]李梅,段晨東,韓旻,等.基于ADAM模塊的恒溫恒濕空調監控系統[J].儀表技術與傳感器,2008(2):74-75.
[7]封亞斌.采用串口通信技術實現Modbus數據通信[J].自動化儀表,2004,25(10):56 -58.
[8]汪義旺,崔鳴,祁春清.RS-485/Modbus在FFU控制系統中的應用[J].自動化儀表,2010,31(6):39 -41,44.
[9]陳永春.從Matlab/Simulink模型到代碼實現[M].北京:清華大學出版社,2002.
[10]孟開元.Modbus通信協議中CRC校驗的快速C語言算法[J].福建電腦,2004(11):63 -64.