在了解了Modbus通信的基本格式后,本期將通過仿真的方式實現(xiàn)Modbus RTU通信協(xié)議在三菱FX3U PLC上的應(yīng)用。
指令介紹
一、軟件準備
- 虛擬串口工具
- Modbus Slave
- 凌一PLC仿真器
- GX works2編程軟件
二、RS指令
RS指令是在執(zhí)行串口通信時用來接收和發(fā)送數(shù)據(jù)的指令,使用該指令時需要在PLC上插入FX3U-485-BD通信模塊。
1)基本格式
其中m(發(fā)生數(shù)據(jù)的個數(shù))和n(接收數(shù)據(jù)的個數(shù))需要根據(jù)外部設(shè)備的報文格式指令,不能隨便設(shè)置。
2)示例
X0: RS指令觸發(fā)條件,當X0位ON時RS指令進入發(fā)送或接收數(shù)據(jù)的等待狀態(tài)。
D10: 發(fā)送數(shù)據(jù)的起始寄存器。
K8: 發(fā)送數(shù)據(jù)的個數(shù),表示每次發(fā)送D10~D17范圍內(nèi)八個寄存器的數(shù)據(jù)。
D20: 接收數(shù)據(jù)的起始寄存器。
K7: 接收數(shù)據(jù)的個數(shù),表示將外部設(shè)備返回的數(shù)據(jù)存入D20~D26范圍內(nèi)的七個寄存器里。
三、特殊輔助繼電器
1)M8161 數(shù)據(jù)處理位數(shù)標志繼電器
當M8161=OFF時處理16位數(shù)據(jù)。
當M8161=ON時處理低8位數(shù)據(jù)。
2)M8122 數(shù)據(jù)發(fā)送標志繼電器
當RS指令處于發(fā)送或接收數(shù)據(jù)的等待狀態(tài)時置位M8122,此時RS指令中發(fā)送數(shù)據(jù)寄存器里的數(shù)據(jù)將會被發(fā)送給外部設(shè)備。數(shù)據(jù)發(fā)送完成后系統(tǒng)會自動復(fù)位M8122,不能使用程序?qū)ζ溥M行復(fù)位操作。
3)M8123 數(shù)據(jù)接收標志繼電器
RS指令將數(shù)據(jù)發(fā)送完成后,進入接收數(shù)據(jù)狀態(tài)。此時M8123被置位為ON,并對接收到的數(shù)據(jù)進行處理,數(shù)據(jù)處理完成后需要將M8123復(fù)位為OFF,否則無法接收下一輪的數(shù)據(jù)。
四、通信參數(shù)設(shè)置
通信參數(shù)既可以在PLC系統(tǒng)設(shè)置中直接設(shè)置,也可以通過改變D8120的值進行設(shè)置,兩種設(shè)置方式任選一種即可(本文主要介紹通過D8120進行設(shè)置)。
1)直接設(shè)置
依次單擊參數(shù)列表中的“PLC參數(shù)”→“PLC系統(tǒng)設(shè)置2” →勾選“進行通信設(shè)置”,然后根據(jù)實際需求設(shè)置通信參數(shù),設(shè)置完成并檢查無誤后單擊“設(shè)置結(jié)束”按鈕保存設(shè)置。
2)通過D8120設(shè)置
根據(jù)下表給定的參數(shù)并結(jié)合實際需求設(shè)置b0~b15的值,并轉(zhuǎn)換成十六進制數(shù)傳送給D8120,實現(xiàn)通信參數(shù)設(shè)置。
3)示例
將通信參數(shù)設(shè)置按如下要求進行設(shè)置:數(shù)據(jù)長度為8位、偶校驗、停止位為1位、波特率為9600、無報頭報尾,控制線為無協(xié)議的RS-485接口。
編輯程序?qū)?shù)傳入D8120。
五、CRC指令
CRC指令的作用是計算Modbus RTU通信報文的校驗碼。
在低8位模式下(M8161=ON),當X0為ON時CRC指令計算出D10~D15六個寄存器產(chǎn)生的效驗碼,并將計算結(jié)果的高八位存入D16,低八位存入D17。
指令運用
一、項目要求
按下X0按鈕讀取1號從站保持寄存器40000的值,按下X1將100寫入1號從站保持寄存器40002中,通信參數(shù)與上文示例中保持一致。
二、編輯程序
1)初始化
在初始化程序中需要將M8161設(shè)置為處理低8位數(shù)據(jù)模式(M8161=ON),將通信參數(shù)傳入特殊寄存器D8120以及復(fù)位程序中用到的寄存器。
2)添加RS指令
如果每次處理的數(shù)據(jù)長度一致,那么只需添加一次RS指,并且讓RS指令一直處于等待發(fā)送或接收數(shù)據(jù)狀。
發(fā)送或接收的數(shù)據(jù)長度需要根據(jù)外部設(shè)備的要求進行設(shè)置,此處外部設(shè)備為Modbus Slave,其報文格式與標準報文格式一致,所以此處發(fā)送和接收的數(shù)據(jù)長度分別為K8和K7。
3)編輯讀取程序
a)計算讀取程序報文
可以借助串口調(diào)試助手自動生成報文,其中84 0A為CRC校驗碼。
b)編輯報文傳送程序
當檢測到X0的上升沿時將生成的報文傳入用來發(fā)送數(shù)據(jù)的寄存器D10~D15中。
報文需要用十六進制表示。
c)添加CRC指令
CRC指令將根據(jù)前六個報文計算出校驗碼,并將結(jié)果的高八位存入D16,低八位存入D17。
由于仿真中CRC指令時好時壞,所以本項目不使用CRC指令,而是將校驗碼直接傳入D16和D17。
d)發(fā)送數(shù)據(jù)
當檢測到X0的下降沿時置位M8122完成數(shù)據(jù)的發(fā)送。
e)接收并處理讀取回來的數(shù)據(jù)
從站返回的數(shù)據(jù)如同所示,通過分析報文可得從站返回的數(shù)據(jù)高八位和低八位分別儲存在D23和D24中。
通過計算把D23和D24的數(shù)據(jù)合并,然后存放到D31中。
4)編輯寫入程序
a)編輯報文傳送程序
參照讀取程序的編輯方式。
b)發(fā)送數(shù)據(jù)
c)接收數(shù)據(jù)
由于不需要接收從站返回的數(shù)據(jù)所以直接復(fù)位M8123。
仿真環(huán)境配置
一、添加虛擬串口
需要添加兩對虛擬串口,一對用來實現(xiàn)GX works2和凌一PLC仿真器的連接,另一對用實現(xiàn)凌一PLC仿真器和Modbus Slave的連接
二、配置凌一仿真器
配置完成后需要打開下載口和開啟擴展通信,并讓PLC處于運行狀態(tài)。
三、配置GX works2
其配置方式與連接實體PLC時的方式一致,主要選擇端口號。設(shè)置完成后單擊“通信測試”,測試成功后單擊“確定”保存設(shè)置,并將程序下載到仿真器中。
四、配置Modbus Slave
1) 配置Modbus Slave連接
連接參數(shù)需要與D8120中的通信參數(shù)保持一致。
2)配置Modbus Slave從站功能
如圖所示設(shè)置從站功能,并修改寄存器40000的值。
五、仿真演示
配置好仿真環(huán)境后,將程序下載到仿真器中,并進入監(jiān)視狀態(tài)。
1)讀取演示
單擊仿真器中的X0按鈕,觀察D31的值是否與Modbus Slave中保持寄存器40000設(shè)置的值一致。
2)寫入演示
單擊仿真器中的X1按鈕,觀察100是否被寫入到從站的保持寄存器40002中。
六、程序整體瀏覽