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