Codesys + BeagleBone PLC控制达到小儿科水平

Codesys + BeagleBone PLC控制达到小儿科水平

1,项目目标

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

2,项目环境

因为Beaglebone 使用的也是AM335x处理器,所以准备先在Beaglebone 平台上练练手。

硬件:

           Beaglebone black C版本

软件:

            Beaglebone Debian操作系统。

           CODESYS 64 3.5.18

本文地址:

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

3,准备Beaglebone系统

3.1 安装Debian系统

下载最新的Debian系统镜像:

BeagleBoard.org - latest-images

本人在下载的时候最新版本是bone-debian-10.3-iot-armhf-2020-04-06-4gb.img.xz

然后按照网站上的手册步骤制作系统到SD上。

BeagleBoard.org - getting-started

3.2 测试Debian系统

连接板子的USB口到PC机,

查看PC机中设备管理器中检查到的新串口号。

如图,我的机子上显示的是COM4.

图1, 板子的端口号

使用串口工具如putty,设定波特率115200,打开端口: 

 图2 串口的连接

这版本的Debian系统有两个用户可以使用

第一个用户名是root,密码也是root

第二个用户名是debian,密码是temppwd, 如上图的倒数第二行所示。

登录后查看网口信息:

 图3,板子的网口信息

可以看到,USB0的网口地址是192.168.7.2.

所以也可以通过SSH连接到设备。

4,下载和安装Codesys

从官网下载

CODESYS Development System V3 | CODESYS Store International

32位和64位两个版本,如果是直接安装在PC机上,应该都是下载64位版本,除非PC机比较古老。


图4,Codesys下载地址

下载后采用默认配置,直接安装即可。

5,下载和安装CODESYS Control for BeagleBone SL

下载地址

https://store.codesys.com/de/codesys-control-for-beaglebone-sl.html

BeagleBone SL是运行在beaglebone硬件板上的一个应用程序。它也叫beaglebone的Runtime System。它的作用是将PLC程序转为Debian系统能够理解的操作。

可以从Codesys的菜单栏Tools->CODESYS Installer..来安装这个SL。 

 图5,启动安装器

 图6,Codesys的安装器

弹出图六的安装器后, 可以选择从文件中安装。


图七, 选择安装包

选择刚下载的 CODESYS Control for BeagleBone SL package

后续按照提示安装即可。

需要注意的是在安装的过程中需要关闭CODESYS软件。

安装完成后,可以在installed中找到对应的package

图8,完成安装包

安装完成后,重启CODESYS软件,可以看到在Tools菜单下已经添加有了“Update Beaglebone Black”按钮。

图9,新增的菜单。

6Update BeagleBone Black

点击图9的按钮

 图10,安装runtime

1,分别输入用户名debian,密码temppwd. 或者rootroot

2,输入IP地址192.168.7.2,或者点击scan

3,选中package,点击install

上述步骤实际上是是将codesyscontrol_beagleboneblack_4.4.0.0_armhf.deb

这个包下载到硬件板上并安装到Debian文件系统里面。

安装的过程会提示是否在硬件板子上安装gateway,同意就是。

出于好奇,可以看看都安装了什么。用zip工具打开deb包看看里面都有什么:

 图11, deb包内容

看着是不是很熟悉?它其实就是将一些文件拷贝到Linux中去。换个角度可能就更清楚了。使用命令 dpkg -L 可以查看codesys安装的两个包codesyscontrolcodesysedge的具体内容:

 

 图12, deb包安装路径和内容。

需要注意的是,第一次安装runtimeBeaglebone上的时候,可能会报错。这是SSH的权限引起的问题。具体出错信息如下:


图13 SSH权限出错

解决办法是通过串口登录到板子上,修改 PermitRootLogin的权限:

#PermitRootLogin prohibit-password

修改为PermitRootLogin yes

注意去掉#号。 

  图14,修改SSH权限

修改完权限后,就能正常安装beagleboneruntime系统了。

7,新建工程,测试一个简单的PLC程序

 新建一个标准工程,如下图。新建的工程使用梯形逻辑框图来设计程序。

图15,新建工程

创建工程后,系统会自动生成如下系统文件,如下图

图16,创建的工程

我们不忙于开始写代码,我们先看看codesys能否连接上beaglebone硬件板。我们在第六步在安装runtime package的时候其实已经证实,codesys能够和硬件板正常通信连接。最开始的时候,觉得需要再次要求连接时,输入用户名和密码是多此一举。但是仔细想想,就知道安装runtime package和下载PLC往往是分开的,所以还是需要再次登录控制。

点击Device->Communication Setting->Scan Network

图17,扫描设备。

弹出选择设备对话框,正常情况下,很快就能找到Beaglebone设备,如下图:

图18,扫描到设备。

再次回到 Communication Setting选项,可以看到在设备的下拉框中已经有了Beaglebone的设备了。 

图19,连接设备

需要注意的是,这里连接设备的时候,如果是第一次连接设备,runtime会要求设定用户名和密码,一定要记住这个用户名和密码。如果用户名和密码不对,会报错“invalid user authentication on the target”。如下图。这是因为这里的用户权限设定和管理是在runtime package中,它和SSH的用户名和密码是不一样的。所以如果使用root和debian登录,就会发生下图的报错。

 

图20,用户权限报错

如果忘记密码或者系统是其他人设定的密码,可以通过下面的方式重新设定密码。

使用root登录到系统,删除/var/opt/codesys中的以下文件。

.GroupDatabase.csv*

.UserDatabase.csv*

以及.UserMgmtRightsDB.csv

图21,重新设定密码需要删除的文件

删除上述文件后,再次连接时会要求重新设定密码。

按照新用户和密码登录,成功后如下图所示:

  图22,成功连接runtime

系统成功连接后,就可以开始干点什么了。上面新建的工程其实是一个空工程,虽然可以编译,下载,但是看不到效果。所以需要点个灯,看看PLC代码是否正常工作。这相当于软件编程中的hello world工程。

打开Beaglebone的原理图,查看它的P9连接器的信号定义如下,

图23, P9的定义

可以发现Pin1215是通用GPIO,可以用来点灯程序。这里一个GPIO可以外接按钮,一个GPIO外接LED灯。当外接按钮被按下时,灯亮,当按钮释放后,等灭。下面说明如何实现这个简单的程序。

1,在工程中,双击PLC_PRG文件;

2,在右下角点击ToolBox,来选择合适的元件

3,选择contact,并拖曳到图中4的位置;

4,修改contact的名字为button

5,选择Coil元件并拖曳到图中6的位置

6,修改Coil的名字为LED

这么操作之后,程序会自动在上部生产代码:

PROGRAM PLC_PRG
VAR
	Button: BOOL := FALSE;
	LED: BOOL := FALSE;
END_VAR

完成后,可以试着编译一下 Build->Generate Code,看看有没有编译错误。

 图24,简单的LED控制编程

关于Ladder的语法和原理可以参看

PLC Ladder Logic Programming Tutorial (Basics) | PLC Academy

Ladder Logic Tutorial - Part 2: Building Logic | PLC Academy

PLC梯形图编程入门_新缸中之脑的博客-CSDN博客_plc编程入门梯形图

为了观察代码运行的结果,可以添加可视化模块:

图25,添加可视化模块

然后点击Visualization,从右侧的Lamp/Switcher选择一个DipSwitch和Lamp并添加到Visualization文件中,如下图所示。

 图26,添加DipSwitch和Lamp

当然还需要将LampDipSwitch和代码中的变量联系上:

DipSwitch对应着PLC_PRG.Button

Lamp对应着PLC_PRG.LED


图27,关联变量

 这个时候编译并下载代码到BeagleBone后,运行,可以看到效果:

图28,鼠标点击DipSwitch,其位置在下,LED灯灭

图29,鼠标点击DipSwitch,其位置在上,LED灯亮。

到目前为止, PLC代码还只是在内存中自娱自乐。它还没有和外设勾搭上。为了实现上文提出的要求,使用GPIO读取按钮信息,从而控制LED,还需要添加GPIO模块。

图30,添加GPIO模块

添加模块之后,还需要添加GPIO管脚,如下图。

在这里我添加了两个1bit的管脚。当然可以添加4bit或者16bit的,然后只使用其中的两根应该也是可以的。

图31,添加GPIO管脚

 添加管脚之后,需要配置和关联上beaglebone上的物理管脚。

beaglebone连接器P9上的Pin1215是通用GPIO1_16GPIO1_28. 它们对应的GPIO pin number分别是48 60. 具体的计算方法是

1 x 32 + 16= 48

1 x 32 + 28 =60

这里1x32是对应着GPIO1端口,如果是GPIO2端口的管脚,就需要2 x 32GPIO3端口的管脚是3 x 32,依次类推。

图32,配置和关联GPIO Button管脚

我们使用GPIO1_16作为输入,以获得按钮的状态。所示如上图所示,它的directionInput.它映射的变量名是PLC_PRG.Button

同理GPIO1_28 作为输出,控制LED灯的亮灭。它的directionOutput.它映射的变量名是PLC_PRG.LED

图33,配置和关联GPIO LED管脚

至此,一个简单的PLC程序就算完成了。但是这里因为Beaglebone本身有一个bug,那就是它的Sysfs系统中GPIO不能两次export。如下图,如果GPIO48已经存在了,再次运行命令

echo 48  > export

GPIO48会消失(相当于unexport的效果)。

所以为了测试PLC程序,还需要有一个多余的步骤,那就是使用SSH登录Beaglebone板子,

确保GPIO48GPIO60不存在。如果存在的话,需要运行

echo 48  > export

echo 60  > export

将它们unexport掉,这样当PLC代码运行的时候,才能够初始化成功这两个GPIO,并实现GPIO的控制。 

图34,unexport GPIO4860

编译PLC后下载运行, 代码能够正常运行,如下图:

图35, PLC正常运行。

本文地址: Codesys + BeagleBone PLC控制达到小儿科水平_dylanZheng的博客-CSDN博客

外接按钮和LED测试:

…......................................................................................................

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值