Codesys + BeagleBone PLC控制达到小儿科水平之Modbus RTU通讯

  • Post author:
  • Post category:其他



Codesys + BeagleBone PLC控制达到小儿科水平之Modbus RTU通讯

1,项目目标

准备将自己设计的AM335x平台变成一个PLC平台,所以需要尝试一些有关PLC控制和开发的技术。

2,项目环境

本来准备先在Beaglebone 平台上练练手,但是Beaglebone的板子没有RS232/RS485的接口,所以直接就在自己的板子上测试。

硬件:

个人基于Beaglebone设计的板子

软件:

Debian操作系统。

CODESYS 64 3.5.18

本文地址:


https://blog.csdn.net/dylanZheng/article/details/125732090

3,Modbus的基础知识

如果对Modbus协议本身内容不是很熟悉,也不影响阅读本文。只需要知道它是一套基于主从设备的通讯协议即可。

如果想了解多一些,可以参考以下本人觉得很不错的文档:

https://ipc2u.com/articles/knowledge-base/detailed-description-of-the-modbus-tcp-protocol-with-command-examples/#progr

4,实验的设定

因为Modbus是一个通讯协议,所以至少需要2个设备。一个是主设备,一个是从设备,当然可以有多个从设备。这里我们设定自己的板子为主设备,PC机为从设备。板子发起通信,向从设备(PC机)写数据或者是读数据。

5,设定个人板子为Master

将个人板子通过网口连接到交换机,从而通过网络联通PC机。

个人板子IP: 192.168.1.100

PC机IP: 192.168.1.101

打开或者新建一个基于Beaglebone Balck SL的Codesys工程,先添加Modbus_COM设备,然后再添加Modbus_Master_COM和Modbus_Slave_COM:

图1,添加Modbus COM口

然后开始配置各个设备。首先需要设定COM port号。

点击Modbus_COM ->General

图2,设定COM Port口

这是设定的COM port是6,波特率9600, 8bit数据,1个停止位,不用校验。

对于具体的COM port是和具体的硬件相关的。在我个人的板子上连接的是ttyO5端口。这里有一个深坑,就是Codesys计算端口是从1开始的,所以ttyO5 对应的不是COM5,而是COM6。

其他串口具体的对应是

ttyO0 –> COM1

ttyO1 –> COM2

ttyO2 –> COM3

ttyO3 –> COM4

ttyO4 –> COM5

所以这里,需要查看原理图,将COM口设定正确。

在配置Codesys之前,其实保险起见,还是需要测试一下串口是否工作。这里通过SSH登录到板子里,通过stty –F /dev/ttyO5 9600设定端口波特率,然后就可以通过echo命令发送数据,通过cat命令接收数据。

下图中的COM5是USB-RS232连接到PC机的端口,可以看到串口是能够正常收发数据的。

图3,串口的测试

在测试后,需要修改文件 /etc/CODESYSControl.cfg

将以下两行添加到文件中

[SysCom]

Linux.Devicefile=/dev/ttyO

这里添加的是串口的前缀。当在Codesys中配置COM port为6时,runtime系统会认识设备为

/dev/ttyO5

继续回到Codesys,对Master进行端口的配置

图4,对Master口的设置

这里我们设定传输模式是RTU,Bus cycle task 是mainTask。

然后对Slave的参数进行配置。注意这里添加的Modbus_slave_COM_Port设备,并不是说板上有一个slave的物理设备(真正的Slave设备是PC机),这里它只是提供一个接口,让主设备能够预先知道从设备支持的一些配置信息,如支持的从设备的地址号等。真实目的是告诉主设备,系统存在有一个从设备,等着你去连接呢。

首先我们配置从设备地址号为2。默认是1,这里为了练手,将它改为了2,如下图

图5,Slave的设备地址号

接着需要设定从设备支持的命令。关于Modbus的命令格式,可以参看第三节中提供的链接。这里本人设定了一个读命令和一个写命令,如下图


图6,Slave支持的命令(Channel)

最后设定从设备中的数据能够自动更新

图7,Slave设备数据自动更新使能

6, 设定PC机为Modbus的从设备

在设定PC机为从设备之前,需要确保有安装CODESYS Control Win SL。

如果还没有安装,可以从网站上下载它:


CODESYS Control Win SL | CODESYS Store International

需要注意的是下载的包里面包括2个文件,如下图

图8,CODESYS Control Win SL安装包内容

其中exe文件其实在安装Codesys开发环境的时候已经安装过了,这里不需要再安装,只要安装其中后缀名为package的文件就好。安装的步骤可以参看下面的文章中关于安装CODESYS Control for BeagleBone SL 的步骤


Codesys + BeagleBone PLC控制达到小儿科水平_dylanZheng的博客-CSDN博客

安装后,还需要使能CODESYS Control Win,如下图,点击PC机右下角,可以看到有一个灰色的立方体。点击,选择“start PLC”


图9,使能 CODESYS Control Win SL

安装完CODESYS Control Win SL后,新建一个工程。这个工程的目的是将PC机配置为一台PLC,所以它选择的PLC设备不是beaglebone设备,而是Win V3 x64这个基于Windows的虚拟PLC。

图10,新建基于Win V3的工程

同样分别添加Modbus_COM和Modbus_serial_Device设备:

图11,添加Modbus_COM和Modbus_serial_Device设备。

同样需要设定设备的COM port,以及波特率等信息,如上图

点击Modbus_COM ->General

这里的COM port设定为5,这是通过查看PC机的设备管理器得到的。波特率以及其他设置和图2的一致。

继续点击Modbus_Serial_Device ->General 来设置从设备的信息,如下图

图12,设置Modbus_serial_Device设备

这里的Unit ID就是从设备网络地址号,需要和第5步骤中图5的设定一样,这里是2. Holding register 和Input registers的字节长度和图6的一致,这里设置都是2.

图13,Slave设备bus cycle和更新使能

继续点击Modbus_Serial_Device ->Modbus Serial Device I/O mapping,

选择Bus cycle为MainTask,并且使能Always update Variables

7, Modbus的测试

分别将步骤5和6的工程编译,下载,运行后,查看Modbus是否运行正确。

更改从设备的输入寄存器的数字,可以看到主设备的对应寄存器数值会更新。

更改主设备的写寄存器的数字,从设备中对应的数值也会更新。



版权声明:本文为dylanZheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。