首先解析什么是PLC主机与RS-485总线驱动器之间的通信协议?
通信是基于常用的ASCII字符集传输使用,通过RS-485或RS-422硬件接口的标准UARTs。
我们使用以下设置来操作uart: 1个起始位、8个数据位、0 (no)奇偶校验位和1个停止位。从主机到驱动器的命令包的基本结构总是一个文本字符串,后面跟着一个回车。文本字符串总是由命令本身组成,后面跟着命令使用的任何参数。回车表示传输到驱动器的结束。 下面是基本语法。
YXXAB < \ r >
在上面的语法中,“Y”表示驱动器的RS-485地址,这是RS-485网络所需要的。“XX”表示命令本身,它总是由两个大写字母组成。“A”表示两个可能参数中的第一个,“B”表示第二个。
参数1和2的长度不同,可以是字母或数字,而且通常是可选的。“<\r>”表示终止命令字符串的回车。如何在应用程序中生成回车将取决于您的主机软件。如果驱动器在一个命令结束时没有收到回车,它将响应' ?1 '显示接收命令超时错误。
一旦驱动器接收到<\r>,它将决定是否理解
将前面的字符作为有效命令。如果它确实理解该命令,驱动器将执行或缓冲该命令。如果打开Ack/Nack(设置了PR bit2),驱动器还将向主机发送一个确认字符(Ack)。执行的命令的Ack是%(百分号),缓冲的命令的Ack是*(星号)。
通常建议用户程序在发送后续命令之前等待ACK/NACK字符。例如,主机发送“1CC1”,驱动器(节点地址为“1”)接收到有效的并返回一个确认字符(Ack)“%”给主机。主机需要先确认确认字符“%”,然后才能发出下一个命令。如果主机没有收到任何响应,或接收到未确认的字符(Nack) ' ?n ' response (n=1…14),表示发生了错误。主机需要处理异常情况,检查报警代码,状态代码并修复错误。如果误差是固定的,清除后,可以再次传输前面的命令,直到主机从驱动器获得正确的响应。然后主机可以发送下一个命令。
以下是推荐的主机与RS-485总线驱动器之间的通信机制例程:
Step1:主机发出指令驱动RS-485地址;
Step2:在RS-485网络中驱动专用RS-485地址接收命令,响应Ack/Nack到主机。然后立即执行或缓冲命令;
Step3:主机等待来自专用RS-485地址的驱动器响应;如果主机在用户程序定义的超时期间没有接收到任何响应,则可以再次传输前面的命令,直到主机收到响应为止。
Step4:主机接收到响应后,用RS-485地址和Ack /纳反应;如果地址不正确,忽略响应并等待下一个响应。
Step5:如果RS-485地址正确,收到Ack,经过一段适当的延时时间后,主机可以发出下一条命令;
Step6:如果RS-485地址正确,但接收到Nack,主机需要处理异常情况,检查报警码、状态码并修复错误。如果错误已修复并清除,则可以再次传输前面的命令,直到主机从驱动器获得正确的响应。然后主机可以发出下一个命令;
如果驱动器不理解命令,它将什么也不做。如果Ack/Nack打开,将发送一个Nack,它的意思是a ?(问号)。Nack通常是与表示特定错误的数字代码一起。
驱动器的响应将以类似的语法发送到关联的SCL命令。
YXX = < \ r >
在上面的语法中,“Y”表示驱动器的RS-485地址,这是RS-485网络所需要的。“XX”表示命令本身,它总是由两个大写字母组成。“A”表示所请求的数据,可用十进制(IFD)或
十六进制格式(IFH)。“<\r>”表示终止响应字符串的回车。