产品描述
西门子阳江PLC模块总代理
主机和从机之间的连线不一定是非要485来作为载体,也可以是IIC,SPI。因为ModBus是软件层的协议,它既可以规约485硬件接线方式,也可以规约其他硬件接线方式。很多资料会写”基于RS-485的ModBus通讯协议”,意思是底层的0、1数据是通过RS-485方式去传输的,0、1的意义则是通过ModBus去解析的。强调,硬件协议可以确保数据得以传输出去,软件协议**数据的有序传输,数据不会发生冲突。
ModBus规定:
(1) 主从模式
有的协议规定是多主模式,意思是系统中的设备都是主机,它们并没有主从之分,任何时刻,谁想发送数据都可以往总线上发送,例如网络通信、CAN总线通讯,自然它们自有一套防止数据冲突机制,485由于不具备冲突检测的硬件机制,所以它必须遵循主从模式。主从模式的原则是,整个系统只能有一个主机,每一个从机都必须有一个一的地址
(2) 从机的地址是作为每个从机的一标识。地址取值是0-247,0号地址表示广播地址,广播地址由主机保留,当主机向0号地址发数据包的时候,每一个从机设备都会收到数据包。也就是说,当主机发出的寻址帧的是0的时候,所有从机都要执行主机要求的动作。按理说,从机收到主机的寻址帧之后,是要做出应答包的,但是现在是0号地址,也就是要回的话每台从机都要回,那么肯定会造成RS-485通讯线上的数据混乱,因此所有从机在主机发0号地址时候不予返回数据包应答。
从机的地址有两个作用
a. 主机向目标从机发寻址帧时其地址部分为从机地址,这样主机才可以检索到目标从机
b. 对于主机的目标从机,当收到主机发来的非0地址时,要做出数据包应答,设从机要返回数据包给主机,自然是要把数据包放到RS-485总线上,因为每台从机,其物理连线是在一起的,所以这就会造成其他从机认为数据是要发送给它的现象,所以在从机回复主机的数据包中,加上从机自身的地址,那么其他从机读取到这个地址值跟自己的地址不相同,就不会去响应了。
(3) ModBus数据包的格式
主机要寻找某台从机,需要发出相应格式的信息,这就需要谈到ModBus的两种传输方式:
a. RTU传输方式
RTU实际上也成为二进制方式。假设主机要发送0x23,那就是发送0010 0011,按照485通讯协议,先发高位,即1100 0100。前后分别加上起始、停止位: “起始位 1100 0100 停止位”共10位数据
b. ASC传输方式
同样要发送0x23,它是十六进制数,会将其拆成十位的’2’和个位的’3’,将它们的asc码依次发出去,’0’的asc码是0x32,’3’的asc是0x33,转为二进制为0011 0010和0011 0011,同样要加上停止、起始位,共20位数据
很明显,asc传输方式比较低,但是由于它传输的是asc码,所以可以利用一些串口终端将其数值打印出来。
特别提醒,RS-485硬件协议决定,对于每一个字节数据的传输是先发高位,再发地位,所以假设数组u8型数组revArr[2]存放着接收到的数据,那么接收端解析数据应该是u16型data = revArr[0] * 256 + revArr[1]
2通信参数设置,这里主要针对通信参数如传输波特率、数据位校验、站号等,变频器的站号从1开始排列,PLC主站和从站的通信参数设置一致。变频器在参数修改完毕后要断电重新上电启动才能有效,PLC的参数可以通过程序给定,也可以在串行通信的对应的通道进行修改,这里一定要注意使用了哪个通道进行通信的。
3程序的编制,这部分是难点,涉及到通信编程,三菱PLC的MODBUS通信有RS指令(自由无协议通信)和ADPRW(**),RS指令发送命令数据时还需要编写CRC值的计算这里对于新手有难度(FX3U有专门计算CRC的指令),刚开始可以借鉴现成的程序来理解,ADPRW则不需要用起来很是方便。因为是半双工的方式,数据的发送和接受不能同时,所以这块我们采用轮询机制完成命令的发送,什么意思呢,简单的说就是按照顺序进行询问从站1、从站2..,如对变频器1进行频率写入、数据监控完成后再对变频器2进行,依序询问周而复始地执行
产品推荐