最近一个项目中,是1500PLC串口RS485模块从站,实现与上位机modbus主站通讯,由于在公司时采用的串口调试助手模拟主站读写,一切正常。但到现场与实际的主站通讯时,怎么也通讯不上,而且在PLC的接收从站背景数据块缓冲区数组中也没有收到主站发送的请求数据,实际上主站一直在发请求帧。从站PLC还报16#81E2错误,次错误通讯波特率、奇偶校验错误,但实际上主从双方多次检查并未错误。
最终,多次尝试后,看到《1200_PLC_EASY_PLUS_》中有这样一句话,使用 Data_Area_Array 修改保持寄存器区域,不建议修改 HR_Start_Offset。而当时由于从站的保持寄存器地址时从@8000H开始的,所以我将HR_Start_Offset设为16#8000,这也是为了减少PLc中存储器数据数组的大小和存储器消耗考虑的,原因就在此。最后改成在modbus从站背景数据块Data_Area_Array数组中重新设置了地址空间,通讯正常了。
鉴于此:我感觉西门子的这个HR_Start_Offset要慎用,至于什么原因造成的,只有西门子的设计者才清楚了,所有在设计PLC modbus从站时要注意地址偏移的使用方法了。