MODBUS通信中,主站發起通信請求,從站被動響應;從站不會主動發起通信請求。從你的例子中看出,你把PLC作為主站,PC機作為從站。
1、PLC使用RS指令的目的是,指定數據發送區和接收區。
2、PLC用邊沿觸發指令使M8122置1,M8122置1后PLC會自動把數據發送區的數據(通信報文)通過串口順序發送出去,用于發起對指定從站的通信請求。數據發送完畢后,M8122自動復位。因此通常用上升沿指令接[SET M8122],一般不用M8122作其它事情。另外,發送的通信報文,要包含CRC校驗碼,需要使用CRC校驗碼指令,并同時使M8161置1。
3、從站收到主站的通信請求,檢查通信報文是否符合MODBUS協議,如果不符合協議要求,會向主站發送錯誤代碼,但有些錯誤不會回復任何數據,例如CRC校驗碼錯誤。如果通信報文符合MODBUS協議,從站響應主站請求,執行主站的請求,并發送應答的通信報文。這個應答的通信報文會存儲在RS指令指定的數據接收區中。
4、PLC作為主站接收完從站回復的數據后,M8123置1,M8123需要手動復位,為下一次接收數據做準備。PLC的M8123置1表示是主站接收完從站的回復數據,根據MODBUS通信協議,主站不會發送數據告訴從站,收到了回復數據。主站發送數據給從站,是向從站發起通信請求。
5、如果是PC機作為主站,PLC作為從站。則PLC既不需要使用RS指令,也不需要使用M8122和M8123,而是要設置一些參數,指定站號、通信速率、通信接口、MODBUS存儲器(線圈、輸入位元件、輸入寄存器、保持寄存器)尋址等。
6、FX3U配備FX3U-385ADP-MB適配器作為主站,不使用RS指令、CRC校驗碼指令和M8122、M8123,而是使用ADPRW指令。7、FX3U的通信參數設置不使用D8120,如果用FX3U-485-BD,則是使用D8400、D8401、D8409-D8416。FX3G沒使用過,不清楚是用D8400、還是D8120。
[ 此帖被zhangqi_1234在2021-12-04 00:17重新編輯 ]