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,新增的菜单。
6,Update BeagleBone Black
点击图9的按钮
图10,安装runtime
1,分别输入用户名debian,密码temppwd. 或者root和root
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安装的两个包codesyscontrol和codesysedge的具体内容:
图12, deb包安装路径和内容。
需要注意的是,第一次安装runtime到Beaglebone上的时候,可能会报错。这是SSH的权限引起的问题。具体出错信息如下:
图13 ,SSH权限出错
解决办法是通过串口登录到板子上,修改 PermitRootLogin的权限:
将#PermitRootLogin prohibit-password
修改为PermitRootLogin yes
注意去掉#号。
图14,修改SSH权限
修改完权限后,就能正常安装beaglebone的runtime系统了。
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的定义
可以发现Pin12和15是通用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
当然还需要将Lamp和DipSwitch和代码中的变量联系上:
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上的Pin12和15是通用GPIO1_16和GPIO1_28. 它们对应的GPIO pin number分别是48 和60. 具体的计算方法是
1 x 32 + 16= 48
1 x 32 + 28 =60
这里1x32是对应着GPIO1端口,如果是GPIO2端口的管脚,就需要2 x 32。GPIO3端口的管脚是3 x 32,依次类推。
图32,配置和关联GPIO Button管脚
我们使用GPIO1_16作为输入,以获得按钮的状态。所示如上图所示,它的direction是Input.它映射的变量名是PLC_PRG.Button。
同理GPIO1_28 作为输出,控制LED灯的亮灭。它的direction是Output.它映射的变量名是PLC_PRG.LED。
图33,配置和关联GPIO LED管脚
至此,一个简单的PLC程序就算完成了。但是这里因为Beaglebone本身有一个bug,那就是它的Sysfs系统中GPIO不能两次export。如下图,如果GPIO48已经存在了,再次运行命令
echo 48 > export
GPIO48会消失(相当于unexport的效果)。
所以为了测试PLC程序,还需要有一个多余的步骤,那就是使用SSH登录Beaglebone板子,
确保GPIO48和GPIO60不存在。如果存在的话,需要运行
echo 48 > export
echo 60 > export
将它们unexport掉,这样当PLC代码运行的时候,才能够初始化成功这两个GPIO,并实现GPIO的控制。
图34,unexport GPIO48和60
编译PLC后下载运行, 代码能够正常运行,如下图:
图35, PLC正常运行。
本文地址: Codesys + BeagleBone PLC控制达到小儿科水平_dylanZheng的博客-CSDN博客
外接按钮和LED测试:
….............................................完.........................................................