作者:马乐
1.主站发送报文结构
大家可以看到我之前写的文章中的程序都是没有什么具体功能的,都是两个站点之间互相传递数据,这些数据我们只是看看是否可以正常接收发送,数据本身是没有任何含义的。很明显在实际使用过程中我们是不会这样去用的,对于通讯来说主站发送的数据通常只有两个功能,一是读取从站寄存器中地址的状态也就是从从站读取数据,二是向从站写入数据。那么主站要怎么发送数据从站才能知道,主站是要读数据还是写数据呢?这个就要靠功能码来区分了,
图 1-1所示就是我自己定义的主站向从站发送读取从站数据请求的报文结构,说白了就是我自己定义的一个协议,大家可以叫它马乐协议(^_^)。下面我们一起来看看此报文中四段内容的具体含义。
地址:指的是要读取哪个从站的数据。
功能码:指的是主站要对从站做什么操作,我们这条报文格式是我自定义的读取从站数据的报文(向从站写入数据报文格式后续文章讨论)此处我把读取从站V区数据的功能码自定义为02,那么从站只要接收到报文的第二个字符是02从站就知道主站要读取自己的V区,其他区域大家可以自己定义。
起始地址:读取数据区域的起始地址。
读取数量:读取多少数据。
2.从站返回报文结
既然是主站向从站读取数据,那么从站接收到指令后肯定要把主站所需要的信息返回给主站,因此从站向主站返回数据也必然有一个报文格式,下面我们一起来看看,我自定义的马乐协议的从站返回给主站数据的报文结构。
地址:返回数据的从站的地址,让主站知道这是哪个从站返回来的数据。
功能码:就是主站发送给从站的那个功能码,从站再返回给主站。
返回字节数量:一共给主站返回多少个字节的数据,如果此处为6那么此字节后面是6个字节的数据。
返回数据1~n:从站返回给主站的数据,返回数据数量n是由主站读取数量所决定的。
以上我通过一个我自己定义的协议,向大家介绍了RS485通讯中主站是如何读取从站数据的过程,当然大家如果有兴趣自己也可以定义个张三协议、李四协议自己玩玩,下篇文章我就教大家如何将我上面的自定义协议,变成PLC的程序。
往期优秀文章回顾:
当电工许多年,你知道为啥标准信号就是4-20mA?