分享

三菱485

 昵称67414479 2021-11-17

        上一篇文章讲了三菱PLC的编程口的通讯协议。通过编程口协议,无需购置额外的通讯板,计算机即可读写PLC的软元件,那还要485-BD通讯板干啥呢?首先,使用该通讯板允许PLC主动向计算机发送数据,这是编程口通讯协议无法实现的;另外,如果要求通讯距离远,或通讯速率高,或一台计算机同时与多台PLC通讯,那就得考虑使用这种通讯方式了。
        使用该通讯方式PLC端要安装485-BD通讯板,计算机端要安装USB转485或RS232转 RS485转换器。本来RS485标准支持全双工通讯,即计算机和PLC每一方都可以同时发送和接受信息,485-BD通讯板也相应地有4个通信端口,分别为SDA/SDB、RDA/RDB,分别为一对发送线,一对接收线,即所谓'四线制',但市面上大多数RS485转换器(或其它RS485设备)多是只有两个接线端口,分别为Data+和Data-,即所谓“两线制”,这样就只能半双工通信。具体接线方式为SDA和RDA短接接Data+,SDB和RDB短接接Data-,实例如下:


        接好了线,就可以开始测试通讯了。刚开始的时候,在GX works2进行“通信测试”无论如何都无法通信,如下:


        后来我才明白,这个“通信测试”是测试是否能够编程下载通讯,而485通讯板并不支持编程下载,自然无法通讯。正确的方式是用串口调试助手。
        测试之前,要先在PLC的D8120中写入通信数据格式。其参数设置如下:

注意:如图中下方文字注明的,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秒之间用于分隔两个工作,以免相互影响。测试代码如下:

  1. MOV(M8002 , HC86 ,D8120); (*设置通信格式为0000 1100 1000 0110,即:7位数据位,偶检验,1个停止位,9600波特率,无起始符,无结束符*)
  2. OUT_T(NOT TS0, TC0, K25); (*设置定时器,定时2.5秒*)
  3. M0 := (TN0 <K10); (*定时器的值小于1秒时,发送状态标志位M0为1*)
  4. M1 := (TN0 >K15); (*定时器的值大于1.5秒时,接收状态标志位M1为1*)
  5. RS(M0,D0 , K1 , K0, D10); (*发送的RS指令,用M0使能。注意这里用于接收的寄存器个数设为0,即不接收数据*)
  6. MOV(M0, K3, D0);(*将要发送的数据3存入到发送寄存器D0中*)
  7. SET(M0, M8122); (*置位发送标志位,PLC即开始向计算机发送数据*)
  8. RS(M1,D0 , K0 , K1, D10); (*接收的RS指令,用M1使能。注意这里用于发送的寄存器个数设为0,即不发送数据*)
  9. MOV(M1 AND M8123, D10 , D20);(*在M1使能并且数据接收完成后,将接收寄存器区D10的数据转移到D20中*)
  10. RST(M1 AND M8123,M8123);(*复位接收完成状态标志位,用于下一次数据接收*)

串口调试助手实测结果如下:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多