上一篇文章讲了三菱PLC的编程口的通讯协议。通过编程口协议,无需购置额外的通讯板,计算机即可读写PLC的软元件,那还要485-BD通讯板干啥呢?首先,使用该通讯板允许PLC主动向计算机发送数据,这是编程口通讯协议无法实现的;另外,如果要求通讯距离远,或通讯速率高,或一台计算机同时与多台PLC通讯,那就得考虑使用这种通讯方式了。
注意:如图中下方文字注明的,b12-b10应指定为011,b15-b13应为000。我测试使用的格式是:0000 1100 1000 0110=HC86,即:7位数据位,偶检验,1个停止位,9600波特率,无起始符,无结束符。 设置好通信格式后,在PLC程序中通过MOV指令将十六进制的设置值移动到D8120中。 写入之后,执行RS指令和发送、接收数据的过程。基本格式如下: RS指令中D200为发送寄存器的首地址,要发送数据要存放在这里;D0表示连续存放发送数据的寄存器的个数,如D0=k3,即要将D200、D201、D202三个寄存器中数据发送出去;D500表示接受寄存器的首地址,PLC接收到的数据将存放在这里;D1表示连续存放数据的寄存器的个数。当不需要发送数据时,可以将D0设为0;当不需要接收数据时,可以将D1设为0。 执行完RS指令后,即可发送或接收数据了。要发送数据,需先将数据写入到发送寄存器中,然后将发送标志位M8122置为1。M8122可以认为是发送的使能位,只要程序发现其为1,则进行数据的发送。发送完毕之后,M8122自动复位为0,无需人工复位,准备下一次的数据发送。 同样,执行RS指令后,程序就等待着接收数据了。当接收完计算机发来的数据之后(如何判断接收完毕?可能是根据接收区数据填满或M8129超时判定,未确认),自动将接收完成状态标志位M8123置1,告知程序数据已接收完成,程序可以把接收到的数据转出到其它位置,然后复位M8123,以准备下一次的数据接收。 注意:以上基本格式是针对485全双工通信而言的,即发送数据的同时也可以接收数据。但由于我们实际采用的是半双工通信,如果按此格式进行,会发现发出的数据总会自动存放在接收寄存器中。这是因为前面我们把485-BD通讯板的发送端口和接收端口短接了,自然发出的数据也会传到接收区中。为了避免这种数据的混乱,我们可以将数据的发送和接收分开,周期性地轮流执行,同时设置发送和接收标志位,标示当前是数据发送状态还是接收状态,以方便计算机向PLC发送数据。 具体方式为:设置一个定时器,定时2.5秒。在0-1秒之间,进行数据的发送工作,同时发送数据标志位M0置为1;在1.5-2.5秒之间,进行数据的接收工作,同时接收标志位M1置为1。1-1.5秒之间用于分隔两个工作,以免相互影响。测试代码如下:
串口调试助手实测结果如下: |
|
来自: 昵称67414479 > 《三菱PLC通讯》