西門子小型系列S7-200MODBUS RTU通訊篇
MODBUS通訊
基于RS485通訊的基礎(chǔ),簡(jiǎn)化版
1. 單主站的主從通訊
2. 從站地址0-247
3. MODBUS本身帶有指定的通訊地址
00001至0xxxx-開(kāi)關(guān)量輸出 10001至1xxxx-開(kāi)關(guān)量輸入 30001至3xxxx-模擬量輸入 40001至4xxxx-保持寄存器
Xxxx:用戶定義
MODBUS支持PLC于PLC 還有PLC與變頻器 PLC與伺服通訊等
使用S7-200編寫
打開(kāi)S7-200庫(kù)
MODBUS MASTER PORT 0 主站通訊庫(kù)端口0
將上面的庫(kù)展開(kāi)
MBUS_CTRL初始化MODBUS主站通訊
MBUS_MSG設(shè)置MODBUS控制請(qǐng)求(設(shè)置發(fā)送和接受)
MODBUS SLAVE PORT 0從站通訊庫(kù) (在于PLC與PLC之間才會(huì)用從站通訊庫(kù),從站通訊庫(kù)寫在從站當(dāng)中。)
MODBUS_INIT 從站通訊地址設(shè)置
MODBUS_slave 從站接受請(qǐng)求
主站初始化MODBUS通訊指令
EN EN使能:必須保證每一掃描周期都被使能(使用SM0.0)
Mode 模式:常為1,使能 Modbus 協(xié)議功能;為0 時(shí)恢復(fù)為系統(tǒng) PPI 協(xié)議
Baud 波特率:設(shè)為9600,要與從站波特率對(duì)應(yīng)
Parity 校驗(yàn):0:無(wú) 1:奇 2:偶 是一種校驗(yàn)代碼傳輸正確性的方法,根據(jù)被傳輸?shù)囊唤M二進(jìn)制數(shù)據(jù)中的1的個(gè)數(shù)為奇數(shù)還是偶數(shù)。
Timeout 超時(shí):主站等待從站響應(yīng)的時(shí)間,以毫秒為單位,典型的設(shè)置值為1000毫秒(1秒),
允許設(shè)置的范圍為1-32767。
注意:這個(gè)值必須設(shè)置足夠大以保證從站有時(shí)間響應(yīng)。
Done 完成位:初始化完成,此位會(huì)自動(dòng)置1。可以用該位啟動(dòng) MBUS_MSG 讀寫操作
Error 初始化錯(cuò)誤代碼(只有在 Done 位為1時(shí)有效):0= 無(wú)錯(cuò)誤 1= 校驗(yàn)選擇非法 2= 波特率選擇非法 3= 模式選擇非法
2設(shè)置通訊的讀寫
EN使能:同一時(shí)刻只能有一個(gè)讀寫功能(即 MBUS_MSG)使能
注意:建議每一個(gè)讀寫功能(即MBUS_MSG)都用上一個(gè) MBUS_MSG 指令的 Done 完成位來(lái)激活,以保證所有讀寫指令循環(huán)進(jìn)行(見(jiàn)程序)。
First讀寫請(qǐng)求位:每一個(gè)新的讀寫請(qǐng)求必須使用脈沖觸發(fā)
Slave從站地址:可選擇的范圍 1-247
RW讀寫操作:0=讀, 1=寫
注意:1. 開(kāi)關(guān)量輸出和保持寄存器支持讀和寫功能
2. 開(kāi)關(guān)量輸入和模擬量輸入只支持讀功能
Addr讀寫從站的數(shù)據(jù)地址:選擇讀寫的數(shù)據(jù)類型
00001至0xxxx-開(kāi)關(guān)量輸出 10001至1xxxx-開(kāi)關(guān)量輸入 30001至3xxxx-模擬量輸入 40001至4xxxx-保持寄存器
Count 通訊的數(shù)據(jù)個(gè)數(shù)(位或字的個(gè)數(shù))
注意:Modbus主站可讀/寫的最大數(shù)據(jù)量為120個(gè)字(是指每一個(gè) MBUS_MSG 指令)
DataPtr數(shù)據(jù)指針:1. 如果是讀指令,讀回的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中
2. 如果是寫指令,要寫出的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中
格式為(&vb0指針格式)
Done讀寫功能完成位
Error錯(cuò)誤代碼 只有在 Done 位為1時(shí),錯(cuò)誤代碼才有效
錯(cuò)誤代碼:0=無(wú)錯(cuò)誤
1=響應(yīng)校驗(yàn)錯(cuò)誤
2=未用
3=接收超時(shí)(從站無(wú)響應(yīng))
4=請(qǐng)求參數(shù)錯(cuò)誤
5=Modbus/自由口未使能
6=Modbus正在忙于其它請(qǐng)求
7=響應(yīng)錯(cuò)誤(響應(yīng)不是請(qǐng)求的操作)
8=響應(yīng)CRC校驗(yàn)和錯(cuò)誤
101= 從站不支持請(qǐng)求的功能
102= 從站不支持?jǐn)?shù)據(jù)地址
103= 從站不支持此種數(shù)據(jù)類型
104= 從站設(shè)備故障
105= 從站接受了信息,但是響應(yīng)被延遲
106= 從站忙,拒絕了該信息
107= 從站拒絕了信息
108= 從站存儲(chǔ)器奇偶錯(cuò)誤
常見(jiàn)的錯(cuò)誤及其錯(cuò)誤代碼:
1. 如果多個(gè) MBUS_MSG 指令同時(shí)使能會(huì)造成6號(hào)錯(cuò)誤
2. 從站 delay 參數(shù)設(shè)的時(shí)間過(guò)長(zhǎng)會(huì)造成3號(hào)錯(cuò)誤
3. 從站掉電或不運(yùn)行,網(wǎng)絡(luò)故障都會(huì)造成3號(hào)錯(cuò)誤
在從站S7-200PLC中編寫
從站初始化請(qǐng)求
初始化Modbus從站協(xié)議
Mode: 模式選擇,啟動(dòng)/停止MODBUS,1=啟動(dòng);0=停止
Address: 從站地址,MODBUS從站地址,取值1~247
Baud: 波特率,可選1200,2400,4800,9600,19200,38400,57600,115200
Parity: 奇偶校驗(yàn),0=無(wú)校驗(yàn);1=奇校驗(yàn);2=偶校驗(yàn)
Delay: 延時(shí),附加字符間延時(shí),缺省值為0
MaxIQ: 最大I/Q位,參與通信的最大I/O點(diǎn)數(shù),S7-200的I/O映像區(qū)為128/128,缺省值為128
MaxAI: 最大AI字?jǐn)?shù),參與通信的最大AI通道數(shù),可為16或32
MaxHold: 最大保持寄存器區(qū),參與通信的V存儲(chǔ)區(qū)字(VW)
HoldStart: 保持寄存器區(qū)起始地址,以&VBx指定(間接尋址方式)
Done: 初始化完成標(biāo)志,成功初始化后置1
Error: 初始化錯(cuò)誤代碼
在本例子中,設(shè)置從站地址為12
Port0 通訊波特率為9600
無(wú)校驗(yàn)
可以使用的S7-200最大數(shù)字量輸入輸出點(diǎn)數(shù)為128
可以使用的S7-200最大模擬量輸入寄存器字?jǐn)?shù)為32
可以使用的V區(qū)寄存器地址字?jǐn)?shù)為100, 起始地址為VB1000
智通教育是東莞市專業(yè)的PLC編程培訓(xùn)機(jī)構(gòu),平時(shí)會(huì)不定期的在網(wǎng)站發(fā)布一些PLC電氣自動(dòng)化課程相關(guān)的知識(shí)點(diǎn),有興趣的同學(xué)歡迎大家關(guān)注本網(wǎng)站!