最容易出問題的就是報文里Modbus地址與PLC存儲區(qū)地址的對應(yīng)關(guān)系。曾經(jīng)有工作人員做過的一個系統(tǒng)的上位機(jī)是專用的組態(tài)軟件,通過分析GEPLC手冊給出的CRC的循環(huán)異或計算實(shí)例每一步的中間數(shù)據(jù),編寫出了CRC計算的C語言程序。通過實(shí)驗驗證了Modbus報文結(jié)構(gòu)和CRC的計算的可行性。
DSQC661 3HAC026253-001給出的Modbus地址與Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同類元件的首地址為1。而西門子PLC采用的是基于0的地址,即同類元件的首地址為0。Modbus報文中西門子PLC的Modbus地址也采用基于0的地址。
DSQC661 3HAC026253-001的Modbus地址的最高位用來表示地址區(qū)的類型,例如I0.0的Modbus地址為10001。因為地址區(qū)類型的信息已經(jīng)包含在報文的功能碼中了,報文中S7-200的I0.0的Modbus地址不是10001,而是0。報文中其他地址區(qū)的Modbus地址也應(yīng)按相同的原則處理。例如當(dāng)S7-200從站保持寄存器的V區(qū)起始地址為VB200時,VW200對應(yīng)的保持寄存器在報文中的Modbus地址為0,而不是40001。