[CodeSys] 简单免费的Modbus协议在CODESYS平台PLC的实例代码分享

[复制链接]
查看95477 | 回复0 | 2024-7-31 15:34:23 | 显示全部楼层 |阅读模式


我们已经完整的介绍Modbus协议,详情可以回顾:

Modbus协议全解析(完结篇)

所谓实践出真知!这次也许就是机缘巧合,正在介绍Modbus协议的同时,有朋友给了一次项目合作机会,刚好就是串口相关的通讯,用的恰巧就是Modbus协议。

所以,这次和大家分享在CODESYS平台,如何免费的使用Modbus协议和温控仪表、液压阀及其他设备通讯?





项目概况

项目主体架构:

Codesys平台控制器(X86架构)+  EtherCAT IO模块 + 控制器本身的两个COM串口(RS232、RS485可切换)





产品方案由我们公司提供,这次合作的是硬件和软件整套服务。具体的设备由于其为研发性质的项目,这里不做展开。

如果您刚好需要CODESYS平台控制器、EtherCAT总线IO及伺服等选型,以及项目的整体解决方案,可以直接微信给我们(微信:mengman45),期待与您的合作。

如果我们有好的性价比和优质服务,为什么不考虑一下呢?





Modbus应用

此次项目中,关于Modbus和串口的应用主要三方面:



1、Modbus TCP

上位机用的LabView,和我们控制器采用Modbus TCP协议,控制器这端做服务器。

2、Modbus RTU

主要是对温控器进行通信,控制器这端做Master主站。使用的是控制器的COM1口,采用RS485的接线标准。

3、自由串口

还有液压阀采用自由口COM2,RS485标准。

当然,本次项目的控制器还实现了与以太网接口的相机(视觉系统)进行TCP/IP自定义协议通信。同时还预留OPCUA协议与其他设备进行数据交互。



示例代码

1、Modbus TCP服务器示例代码:



上方加延时的主要目的是设备上电后,首先会去控制器内部读取掉电保持的数据,等待数据读取完毕后,再开启Modbus TCP服务器进行通信。

可能各家对地址的分配方式不尽相同,需要根据具体的说明进行合理的配置。

2、Modbus RTU Master主站的示例代码

1)建立连接



2)读取保持寄存器



3)写单个寄存器



需要特别注意:


    硬件接线需要根据手册获取详细的引脚定义,不要接错。

    连接时,需要主从站两端的串口号、波特率、奇偶校验位、停止位及数据位等参数保证一致。

    读取和写入需要明确对应的功能码,找到功能码对应的函数,这里我们搞错了几次导致老是通信不上。

    另外,数据的Unit ID要对应上,起始地址和数据的数量及长度也要严格一致,否则会导致函数读取或者写入失败。



3、自由串口通信示例代码



注意:主从站两端的串口号、波特率、奇偶校验位、停止位及数据位等参数保证一致。基本注意这条就没啥问题。



发送的字符串和接收的字符串需要双方协商定义好,这里需要注意的是要加超时的处理机制,防止程序无法跳转卡住。
当然,具体的协议不尽相同,需要根据实际的项目需求而定。如果您也有类似的项目方案需求,可以联系我们。(微信:mengman45)



    【视频课程】Codesys V3.5系列入门课程(125人已学习)【视频课程】Codesys SoftMotion软运动控制基础课程(38人已学习)【视频课程】Codesys SoftMotion电子齿轮课程(12人已学习)【视频课程】Codesys SoftMotion电子凸轮CAM课程(9人已学习)【视频课程】Codesys Library自定义库的制作(22人已学习)
    Codesys V3.5系列最全免费公开资料汇总

    十大常用滤波算法(ST语言)

    集成Chat GPT的PLC长啥样?

    2023年度TOP 10的PLC编程书籍分享

    定制专属您的CODESYS运动控制器

    MC_Power.status = FALSE,轴也可以运动?

    ST语言学习资料汇总




--------END--------



喜欢本文请在下方分享及“点赞”和“在看”

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则