背景
某项目使用安川(YASKAWA) V1000变频器27台,采样RS485通讯,协议为安川的MEMOBUS。MEMOBUS为标准Modbus的细微变种,变化主要体现在寄存器定义方面,支持有限的功能码。具体信息可参见产品计数手册:(株)安川电机 SICP C710606 17A 安川变频器V1000 技术手册
需要实现的功能
需要实现的功能是分别向变频器的保持寄存器280H写入频率设定值,然后再分别向变频器保持寄存器900H写入0以实现频率的掉电保持功能。
实现方式
MEMOBUS只支持三个Modbus功能码:03H 读取存储寄存器的内容;08H 回路测;10H 向多个存储寄存器的写入。因此,选用10H功能码组织报文,向串口发送。
测试程序如下:
class Program { static void Main(string[] args) { byte[] read=new byte[1024]; byte[] toSend=new byte[]{0x01 ,0x10 ,0x02 ,0x80 ,0x00 ,0x01 ,0x02 ,0x0B ,0x2C ,0x9C ,0xBD}; SerialPort sp = new SerialPort(); sp.PortName = "COM2"; sp.Open(); while (true) { sp.Write(toSend, 0, toSend.Length); Thread.Sleep(75); sp.Read(read,0,1000); } } }
问题
执行完毕后,27台变频器不能全部实现掉电保持,成功与不成功的机器不固定,是随机的。先前的推测是向900H写0失败,后来观察,也可能是向280H写频率这一步就失败了,为什么呢?
探究原因
现场工程人员通过在两条写命令之间添加固定时间的延时,发现可以解决问题,前提是时间大于某个固定值。
翻开技术手册,发现了如下知识点:(图片是针对PLC与变频器的通讯,我们把PLC看成PC)
从上图可见,每一个通讯周期是可以计算的。变频器有个叫H5-06(通信等待时间)的参数,用来设定变频器从接收数据到开始发送为止的时间。出厂设定在5ms,范围在5--65ms。我们使用的变频器是默认的出厂设定没有更改。
经过测试,指令信息发送到相应信息返回,基本在120ms的时间;两条指令信息的发送间隔,在75ms,可以正常执行功能。
那么24位长度是什么意思呢?我正在询问安川的技术支持还没有答复,希望有知道的人留言解答。这个时间是怎么计算出的,受何种因素影响,还要再分析。