随着技术的发展,很多传感器与检测仪表都不在是以前单一的电压或者电流信号了,基本上都带有了Modbus的通讯功能,这样一来可以减少模块的通道数量,也方便接线。但是走还是有一定的限制的,一个Modbus网络里,只有一个主站和最多31个从站,在配置的时候需要注意满足条件。下面给大家介绍一下S7-200CPU走Modbus通讯时的数据地址对应问题。
Modbus地址实际上分为两种情况。下面以S7-200(OYES 214-1AD23)为例来说明:
第一种情况:PLC作Modbus主站,Modbus地址和PLC手册里的地址一致,例如作主站的
S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。要读取从站(另一台S7-200)的I0.0开始的地址区时,它的输入参数Addr(Modbus地址)为10001。S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
第二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。主站的组态软件的编程人员需要编写实现Modbus通信的程序,首先需要确定Modbus RTU的报文结构。他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程人员一起来讨论Modbus的报文结构。最容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。
S7 PLC手册给出的Modbus地址与Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同类元件的首地址为1。而西门子PLC采用的是基于0的地址,即同类元件的首地址为0。Modbus报文中西门子PLC的Modbus地址也采用基于0的地址。PLC系统手册中的Modbus地址的最高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。因为地址区类型的信息已经包含在报文的功能码中了,报文中S7-200的I0.0的Modbus地址不是10001,而是0。报文中其他地址区的Modbus地址也应按相同的原则处理。例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在报文中的Modbus地址为0,而不是40001。
下图为功能码的定义:
想了解更多关于Modbus的通讯资料,请关注微信公众号奥越信科技,里面有MODBUS库文件和通讯示例,让你快速学习。