发布于 2013-04-27 13:00:52
17楼
当年我也遇到过这样的问题,上位机是用VC作的专用组态软件。
上位机作主站,西门子PLC作从站时,主站使用的Modbus地址和S7-200手册上的地址完全不是一回事。
S7-200系统手册中给出的Modbus地址是基于1的地址(美国人的习惯),即同类元件的首地址为1。而S7-200采用基于0的地址,即同类元件的首地址为0。所以主站使用的Modbus地址也应采用基于0的地址。
S7-200系统手册中的Modbus地址的最高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。因为地址区类型的信息已经包含在通信帧的功能码中了,消息中S7-200的I0.0的Modbus地址不是10001,而是0。消息中其他地址区的Modbus地址也应按相同的原则处理。例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在消息中的Modbus地址为0,而不是40001。
可以用实验验证上述结论是否正确。我有一个串口通信调试软件,可以生成CRC。用它生成Modbus的请求消息,能接收到从站返回的消息。
PLC作Modbus主站时,使用标准的Modbus地址来读写从站是没有问题的。
追求完美