分享

第四集:三菱FX3U与FX5U之间的MODBUS通讯

 吴敬锐 2022-09-30 发布于广东

本期带来的是FX3U和FX5U之间的通讯,由FX3U做主站通过485BD板,用RS2指令来跟FX5U进行MODBUS RTU通讯。

这里我们需要用到轮询,不管如何,485通讯必须用轮询来交互数据。因为它是半双工通信,不能同时收发数据,同一时间内要么发,要么收。否则通信就会报错。另外,通信需要时间,因为主站发过去报文后,需要等待一定时间接收来自从站的数据,然后主站才能发送下一条报文。这也为轮询创造了转移条件。

好了,接下来我们讲解下如何做:

首先第一步就是各自设置好通讯参数:

先设置FX5U,因为它做从站,好设置,因此就先设置它:

文章图片1
文章图片2

然后设置FX3U的。由于我们使用的是RS2指令,且是485BD板,因此我们需要通过通道1的D8400来设置通讯格式,如下所示:特别提醒:通讯格式的设定一定要参照“用户手册通讯篇”来,因为RS和MODBUS通信,这两者的通信格式虽有大同,但也有小异。它们三者不大相同,这个要注意,否则是无法通信的。

文章图片3
文章图片4

RS2指令必须是16位模式,因此M8161必须保持OFF状态

然后就是写程序了,我这里的程序交互流程是这样的:FX3U去控制FX5U中M0的状态,然后使FX5U中的D0进行累加。同时,FX3U来实时获取FX5U中的D0的值,并且实时写入到FX5U的D100中。程序如下:

文章图片5

FX5U中的程序

文章图片6
文章图片7
文章图片8
文章图片9
文章图片10
文章图片11
文章图片12
文章图片13
文章图片14
文章图片15
文章图片16
文章图片17

这是大概的框架,具体写法需要根据实际情况和设备来写。

程序要点:

  1. 首先要准备数据,也就是需要将功能码写入到D寄存器中。
  2. 进行CRC校验。
  3. 准备好RS2指令,这里可以一直让它导通,或者也可以单独导通。
  4. 接着就是进行发送请求(如本例中通道1的M8402)
  5. 最后,FX3U接收完数据后,数据接收完成标志位M8403(通道1)会置ON。然后接着它置ON,就需要及时将读回来的数据进行转存。同时,将M8403复位,准备下一次的接收。
  6. 另外,在本例中,我特意将FX5U的D0值设置成了浮点数。因此FX3U读回来后,需要将数据进行拆分。我这里用组合位元件的方法,将高低字节拆分再合并成新的数据。而浮点数是4个字节存放的,因此需要2个D寄存器来接收它们。
  7. 特别一点:读写的时候,需要先复位一下M8403,否则当从站还在返回时,又按下按钮进行发送,这样会导致通讯出错。因为485通讯是半双工通讯,同一时间内,要么发,要么收,不能同时发和收。
  8. 本例中,我做了个心跳包,一旦断线或者出错,通讯就中端了,那么功能码或者站号就不会变化了,一旦不变化,那么就相当于心跳停止了,那么时间一到就做出报警指示。

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多