發布日期:2022-04-26 點擊率:29 品牌:西門子_Siemens
一、 背景
2002年開始開發焦爐四大機車自動化系統的時候,遇到了無線通信的難題,眾所周知目前的電臺不能直接支持PPI協議,別的無線通信的方案要么成本過高,要么性能不穩定,不可靠。
所以早期的時候,都是用自由口,自己編寫基于主、從通信協議的通信程序,不過很不靈活,協議一旦確定就很難更改,如果有升級和變動,都需要大量的修改代碼,維護極不方便。
后來西門子推出了Micro Win32引入了庫的概念,可以直接提供Moubus Rtu Slave庫供開發人員使用,但是只提供Moubus Slave,沒有提供Moubus Client,所以PLC直接通過Moubus協議訪問還是有問題。
二、 實施方案
Modbus是一個公開協議,包括ASCII、RTU和TCP幾種,很顯然我選擇了Rtu,因為西門子提供的Slave就是基于Rtu協議的。
返回命令幀:
命令有誤:
1) 沒有任何返回
2) 返回異議幀
2、 設置保持寄存器(多個,以字為最小單位)
說明:
數據字節數:bytN= DataNum×2
命令正確:
1) 設備地址相同Addr0=Addr1
2) 功能碼相同
3) 地址相同
4) 數據量相同
命令有誤:
1) 沒有任何返回
2) 返回異議幀
有了協議,有知道了西門子庫的開發方法,剩下的事,就是開工,下面詳細介紹最終的完成成果:
Modbus RTU客戶程序由于建立在PLC中,所以它的讀寫函數的處理方法和一般上位機的讀寫程序不一樣,PLC內部的程序執行是掃描式的,而讀寫數據時的通信卻是過程的需要一定時間來等待的,所以讀寫的函數不是獨立的,它需要一個專門的服務程序來反饋執行的結果。同時需要注意的是,讀寫操作在某一時刻只允許一個執行(最好讀寫操作之間留一定時間間隔)。
此外,西門子提供的Modbus RTU Slave程序不支持廣播命令。
I、地址定義
1、 V變量區的占用
一共需要V變量區786個字節。在程序設計時,用戶程序不要占用該內存區。
特別注意:V變量區的占用地址是相對的,通過修改庫內存地址,可以改變使用V變量區的范圍。
2、 定時器的占用
占用了定時器T100,用戶程序不要再使用T100了。
變量名 說明 備注
T100 10ms定時器
II、接口函數說明
1、YFMBUS_INIT
a. 名稱:YFMBUS_INIT
b. 類型:
c. 功能:Modbus RTU Client初始化
d. 參數:
2、YFMBUS_ Server
a. 名稱:YFMBUS_Server
b. 類型:
c. 功能:Modbus RTU Client服務程序,負責通信后臺的處理
名 稱 類 型 說 明 備 注
Done BOOL 0 - 服務空閑 1 - 正在服務 輸出
3、YFMBUS_ReadVW
a. 名稱:YFMBUS_ ReadVW
b. 類型:
c. 功能:讀取指定VW變量區的數據
4、YFMBUS_WriteVW
a. 名稱:YFMBUS_ WriteVW
b. 類型:
c. 功能:寫指定VW變量區的數據
III、樣例程序
網格 1
// 網絡注解
LD SM0.1 //PLC初次掃描
//--------------------------------
//PLC的端口號:0/1|波特率0-4800 1-9600 2-19200|校驗:0-無 1-奇校驗 2-偶校驗
CALL YFMBUS_INIT, 0, 1, 2
//--------------------------------
MOVB 0, VB0
網格 2
LD SM0.0
//端口0 JRModbus客戶端程序
CALL YFMBUS_Server, M0.1
網格 3
LD SM0.0
TON T32, +200
網格 4
LD T32
R T32, 1
AB<> 16#CC, VB0 //操作完畢
INCB VB10
LPS
AB> VB10, 1
MOVB 0, VB10
LRD
AB= VB10, 0 //讀數據
//從站號|從站存放地址(VW100)|數據量|主PLC存放數據地址|反饋信息
CALL YFMBUS_ReadVW, 1, 50, 10, &VB50, &VB0
LPP
AB= VB10, 1 //寫數據
//從站號|從站存放地址(VW200)|數據量|主PLC存放數據地址|反饋信息
CALL YFMBUS_WriteVW, 1, 100, 10, &VB100, &VB0
//----
INCW VW100 //測試數據 自加1
三、 結語
從實施以來,無線通信的數據包結構變化很大,但這個通信架構卻沒有再改變過,近兩年的多時間在多個現場,它都運行的很穩定,完全實現了無線通信基于PLC的應用.
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV