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