使用CODESYS对Raspberry Pi进行编程
你好,从本质上讲,这堂课是一个教程,可帮助您使用CODESYS环境对Raspberry Pi进行编程。这个指导性内容并不是针对业余爱好者,而是针对崭露头角的控制/自动化工程师。尽管CODESYS还是使用python控制GPIO,I2C和Pi的摄像头的不错选择。对于那些不知道的人,CODESYS是PLC编程环境,许多工业自动化公司都在使用CODESYS,例如Bosch,Beckhoff,Festo,Eaton,Wago等。您可以使用传统的梯形图逻辑对更现代的结构化文本和连续流程图(IEC 61131-3标准)进行编程。尽管通常非常昂贵并且针对工业环境,CODESYS还是发布了一个目标,该目标实际上将RPi变成了售价25英镑的PLC。在此指导中,我将向您展示如何控制Pi的GPIO。我还将介绍如何通过EtherCat通信协议控制相对便宜的Beckhoff I / O和小型Technosoft伺服电机,以及如何创建网络可视化以通过智能手机控制IO。它涵盖了相当多的内容,但是我已经将其结构化,因此希望您可以选择要选择的内容。这本指南将不会深入介绍如何使用IEC标准语言进行实际编程,除了使它移动起来的一些基本要点外,它还将重点放在硬件设置上。如果您想了解更多有关此的内容,建议您访问YouTube,在那里找到一些不错的视频。如果您对我上传的示例程序有任何疑问,请在评论中大声疾呼,我可能会为您提供帮助。我要感谢Kurt Braun,但是我观看的录像带给了我亲自尝试的灵感。
第1步:您需要做的事情:
-Raspberry Pi(B,B +,2或3)-具有最新Raspbian Jessie的SD卡-CODESYS已安装在笔记本电脑/ PC上(仅Windows)-CODESYS Raspberry Pi目标- 以太网电缆通过以上操作,您可以试用系统并控制GPIO。但是,如果您希望使用EtherCat在工业方面做任何事情,则需要满足上述条件:-以太网到USB适配器-另一根以太网电缆-24V DC电源(最小2A)-工业EtherCat IO(带有EtherCat XML文件)我使用Beckhoff IO是因为我很熟悉,但是只要兼容,它就可以与其他人一起使用。您可以在ebay上找到一些便宜的Beckhoff装备。您将需要一个总线耦合器EK1100,然后是任意数量的IO(数字,模拟,编码器卡,步进电机驱动器等)。我有1x 8数字输入(EL1008)和1x 8数字输出(EL2008)。有关信息,请参见http://www.beckhoff.co.uk/。如果要控制工业伺服电动机,则需要工业伺服电动机和EtherCat伺服电动机驱动器,这些驱动器可能很昂贵,但可以在ebay上找到它们。我设法从工作中借了一个,这很幸运,否则我将没有机会学习使用Pi进行控制。
步骤2:安装CODESYS
3S Smart Systems并没有像下载您希望的那样简单地下载Raspberry Pi的CODESYS并启动和运行它。但是,如果坚持使用它,您将获得一个易于使用的编程环境。要下载CoDeSys(COntroller开发系统),请转到以下链接:https://www.codesys.com/download向下滚动并单击“以Codesys用户身份下载中心”。在实际下载程序之前,您必须首先获得一些登录凭据。单击“注册”链接(红色),然后您必须选择一个国家并填写表格。然后,您将收到一封包含一些登录凭据的电子邮件。如果您返回下载中心(单击红色的注册链接),现在可以在输入用户名和密码后下载最新CODESYS V3的exe文件。下载文件后,打开exe文件,如果Windows试图阻止该文件,则选择“仍然运行”。按照安装向导进行操作。我偶尔注意到下载此文件时会出现错误,并且无法启动安装向导,如果发生这种情况,请尝试重新下载exe文件。如果您在为空间而苦苦挣扎,则只需安装以下功能:-CODESYS V3-CODESYS网关-CODESYS OPC服务器安装CODESYS后,现在需要向其中添加Raspberry Pi软件包。为此,您首先必须访问CODESYS商店并下载软件包。商店的价格为35欧元,但这仅在您希望在Pi上运行程序2个小时以上的情况下才适用。否则,它是完全免费的,并且在所有CODESYS都针对行业之后,您只需每2小时将程序重新下载到Pi上即可。http://store.codesys.com/codesys-control-for-raspb ...不幸的是,要下载此文件,您将需要另一个用户名和密码,因此您必须注册CODESYS Store。如果单击下载按钮,它将提示您登录。如果您单击此链接,则可以注册商店。注册后返回下载页面,然后单击下载。将此内容下载到令人难忘的地方,下一步将需要它。下载软件包后,您将需要打开CODESYS并安装它。我将在下一步中说明如何执行此操作。
步骤3:连接到Pi
现在,我们已经下载了所有需要的内容。现在该开放探索CODESYS并将其连接到Pi了。从开始菜单或桌面快捷方式中打开CODESYS,您将要打开一个显示“ CODESYS V3.5 SP8 Patch 2”的代码(开始编写此Instructable时为SP8 Patch 2)。应该为您提供类似于图片的内容,以及显示最新CODESYS新闻的起始页等。安装我们在步骤2中下载的Raspberry Pi软件包。-在工具栏上,选择工具>程序包管理器...-单击新窗口右上方的“安装..”。-查找并选择您先前下载的软件包。-按照安装向导进行操作,选择完整安装。现在我们终于可以开始一个项目了。-从工具栏中,选择文件>新建项目...-选择“标准项目”,为其命名,选择一个保存位置,然后单击“确定”。-在新窗口的设备下,选择“ Rasperrby Pi的CODESYS控件”,在PLC_PRG下,选择“结构化文本(ST)”。您会注意到在屏幕左侧,出现了一个设备树(参见图片)。CODESYS已自动为您创建了一个主程序(PLC_PRG)和一个从中调用PLC_PRG的任务(MainTask)。PLC是实时设备,它们以不同的周期时间运行任务。任务管理可能很复杂,因此我现在不再赘述,但是在CODESYS上的Youtube教程中已经介绍了它。您需要知道的是,每次任务运行时PLC_PRG都会循环运行(默认为每20ms),读取输入并设置新的输出,实质上是一个巨大的连续循环。下一步,我们将编写第一个程序来控制Pi的GPIO。但首先如何连接到Pi。-启动Pi并使用以太网线将其插入路由器(或PC的以太网端口,重要的是Pi与PC在同一网络上)。您必须为Pi使用以太网电缆,它不能通过Wifi上网(或者至少不能与我一起使用)。-使用监视器或使用高级IP扫描仪之类的工具,请注意为Pi提供的IP地址。-在CODESYS>工具下的工具栏下,单击“更新RaspberryPI”-如果没有出现,则必须单击“自定义”,展开工具,然后单击“添加命令...”,找到Raspberry Pi,然后将“ Update RaspberryPI”添加到工具栏菜单。-输入您的登录信息和Pi的IP地址。-更新Pi后(在CODESYS屏幕左下角闪烁的橙色消息选项卡会通知您,消息为“ Update Completed”)。-双击设备树中的设备。-在弹出的新页面上,您应该在文本输入字段中看到设备名称(参见图片)-在此处输入Pi的IP地址,然后按Enter。-现在,您应该已连接到Pi。注意:每次创建新项目时,都必须执行此操作,然后才能运行该程序。
步骤4:GPIO控制
现在开始我们的第一个程序的时间,由于我编写此Instructable的方式,我不得不在这里提前道歉,但是其中一些信息可能会在下一步中重复,但这仍然很重要。我们将创建一个简单的闪烁例程,以使连接到PI GPIO的LED闪烁。我将由您自己来连接LED,可以找到许多其他Instructable来为您提供建议。另外,您不必担心硬件元素,只需在屏幕上查看结果即可(或在引脚上使用万用表)。-在CODESYS中启动一个新项目,并按照步骤3所示的方式连接到Pi。-在设备树中双击“ PLC_PRG(PRG)”。-现在将屏幕快照中的文本(为了方便起见,已附加了.txt文档)复制到正确的窗口中,注意顶部窗口是声明变量,底部窗口是代码。本质上,这是一个基于两个计时器的闪烁例程,以使GPIO上的引脚4闪烁。现在,我们需要将变量“ Output1”链接到我们的GPIO,以执行以下操作:-双击设备树上的“ GPIOs_A_B(GPIOs A / B)”。-转到“ GPIOs参数”标签。-在GPIO4行上,通过双击该值框并选择“ Output”(输出)来将GPIO定义为输出,以将其定义为输出(参见图片)。-现在选择选项卡“ GPIOs I / O映射”,扩展输出选择并双击“ Bit4”的变量框(对于GPIO上的Pin4)。(参见图片)-单击“ ...”,它现在出现在框中。(见图)-现在我们需要选择变量Output1,在Application> PLC_PRG中找到它,然后双击“ Output1”。现在,该输出已映射到该变量。-要运行程序:-按下键盘上的“ F11”,即可构建/编译代码。也可以在工具栏上的“构建”下找到。-编译代码后,按键盘上的“ Alt + F8”以登录到Pi(或PLC现在为其输入正确的名称)。也可以在工具栏上的“在线”下找到。-在弹出窗口中单击“是”以下载程序。-下载程序后,按“ F5”运行程序。也可以在工具栏上的“调试”下找到。-现在,您应该在屏幕上看到正在播放的实时流,根据程序的指示,代码上的变量应从True闪烁为False。如果选择连接,您还应该看到LED闪烁。-要停止代码,请按键盘上的“ Shift + F8”。也可以在工具栏上的“调试”下找到。此时,如果您没有任何“工业” IO或电机,请随时查看“可视化”步骤,但请尝试将其应用于该项目,而不是工业IO。
步骤5:工业IO控制
现在,对于此步骤,我们将需要步骤1中详细介绍的其他部件。接线系统:-将工业IO模块滑到一起。(见图)-将工业IO模块连接到24V电源。(参见图片)(我伸出的所有电线都只是将数字输出循环到数字输入以进行测试)-打开IO电源。我们还需要将Pi连接起来略有不同。您将需要通过USB转以太网适配器将Pi连接到网络连接。切记,这可能会为我们提供与先前不同的IP地址,并且在使用命令“ ifconfig”时将在Pi上的设备“ eth1”旁边显示。-使用一根以太网电缆通过适配器将Pi连接到网络。-使用另一根以太网电缆将IO(使用顶部端口)连接到Pi的以太网端口。-打开Pi。在连接IO之前,我们现在需要确保您具有来自工业IO制造商的设备描述XML文件,并将它们添加到CODESYS中。-如果您使用Beckhoff,则可以在以下位置找到XML文件:http://www.beckhoff.co.uk/english.asp?download / elc ...-在安全的地方下载并解压缩zip文件。-打开CODESYS,从工具栏中选择工具>设备存储库...-点击“安装...”-导航至刚刚解压缩的文件夹,然后选择XML文件“ EKxxxx”,然后单击“打开”,CODESYS将自动安装设备。-对您带来的所有其他设备重复上述2个步骤,对于EL1008和EL2008,我安装了“ EL1xxx”和“ EL2xxx”。现在使用CODESYS连接到工业IO:-在CODESYS中启动一个新项目,并按照步骤3所示的方式连接到Pi。-右键单击设备树上的“设备”,然后选择“添加设备...”。-从新窗口(见图)中选择“ EtherCAT Master”,然后单击“添加设备”。-关闭窗口。-右键单击设备树上的“ EtherCat_Master”,然后选择“添加设备...”。-从EtherCat>从站> Beckhoff自动化系统耦合器中选择“ EK1100”,然后单击“添加设备...”。-关闭窗口。-右键单击设备树上的“ EK1100”,然后选择“添加设备...”。-从EtherCat>从站> Beckhoff自动化数字输入端子中选择第一个IO模块,在本例中为“ EL1008”,然后单击“添加设备...”。-对所有其他IO重复上述步骤,以它们如何连接至系统耦合器的顺序。您可以使用一种扫描功能来自动添加所有IO,但是在本指南中不会介绍该功能,因为这有助于理解CODESYS如何构建IO。现在,我们需要找出Pi的以太网端口的硬件(MAC)地址,以告诉CODESYS在哪里寻找IO,为此,可以将pi插入监视器或SSH,并在终端中使用命令“ ifconfig” 。您正在从端口eth0寻找HWaddr旁边的代码(参见图片)。获得地址后,我们需要将其添加到CODESYS:-从设备树中,双击“ EtherCAT_Master”。-在前面的文本输入字段“源地址(MAC)”中输入硬件地址。现在,所有硬件都已设置好,我们现在可以创建第一个程序来控制工业IO。-在设备树中双击“ PLC_PRG(PRG)”。-现在将屏幕快照中的文本(为了方便起见,已附加了.txt文档)复制到正确的窗口中,注意顶部窗口是声明变量,底部窗口是代码。本质上,这是一个闪烁例程,该例程基于两个计时器来使Beckhoff IO的输出1 LED闪烁。现在,我们需要将变量“ Output1”链接到我们的Beckhoff IO,以执行以下操作:-双击设备树上的“ EL2008”。-转到“ EtherCAT I / O映射”选项卡。-双击第一个变量框。(见图)-单击框中显示的“ ...”。(见图)-现在我们需要选择变量Output1,在Application> PLC_PRG中找到它,然后双击“ Output1”。现在,该输出已映射到该变量。要运行程序:-按下键盘上的“ F11”,即可构建/编译代码。也可以在工具栏上的“构建”下找到。-编译代码后,按键盘上的“ Alt + F8”以登录到Pi(或PLC现在为其输入正确的名称)。也可以在工具栏上的“在线”下找到。-在弹出窗口中单击“是”以下载程序。-下载程序后,按“ F5”运行程序。也可以在工具栏上的“调试”下找到。现在,您应该看到Beckhoff端子上的输出1 LED闪烁1秒。要查看代码是否正常运行,请从设备树中双击“ PLC_PRG”,然后您应该可以实时看到变量状态。要停止代码,请按键盘上的“ Shift + F8”。也可以在工具栏上的“调试”下找到。从EL1008链接输入的工作方式相同。尝试将输出1连接到输入1并添加一个变量,以查看该变量还在false和true之间切换。现在,您可以使用树莓派控制工业级IO,并考虑各种可能性。一些示例可能包括使用模拟输入来监视不同的传感器,使用PWM输出来控制电动机等。如果遇到任何问题,我已将我的Codesys程序文件添加到Instructable中进行比较。
步骤6:创建Web可视化
在本章中,我们将添加网络可视化,使您可以从远程浏览器(在本例中为Android手机上的Google Chrome)控制PLC和与其连接的任何IO。-在上一步的现有项目中,在“ PLC_PRG”中创建另外两个BOOL变量,分别称为“ OutputVIS”和“ Output2”。并将以下代码行添加到程序底部:Output2:= OutputVIS;-如上一步中所述,将“ Output2”分配给Beckhoff IO单元或Raspberry Pi GPIO上的第二个输出。-现在,在设备树(左侧)中,右键单击“应用程序”,转到“添加对象...”-“可视化”。-选中“活动”框,然后在弹出窗口中单击“添加”(参见图片)。-将会出现一个新屏幕(见图)。这是我们在页面上使用右侧工具设计可视化效果的页面。-从工具箱中,通过将图像拖放到工作区中,添加一个“ Rocker Switch”。翘板开关可在工具箱的“指示灯/开关/位图”选项卡下找到。-重新调整开关大小,使其稍大一些。-现在,单击翘板开关,工具箱屏幕应该已更改为属性屏幕,在该屏幕上,双击“变量”旁边的框(参见图片)。然后单击出现的“ ...”。-分配变量“ OutputVis”的方式与将变量分配给IO设备的方式相同。-这是最基本的可视化完成,如果您愿意,可以添加更多的开关,按钮,指示灯等以及漂亮的背景,但是为了向您展示功能,我们将其保留在那里。-现在,当您登录并以上一步中显示的相同方式运行程序时。您的可视化效果也应加载。当您切换翘板开关时,您会注意到IO上的输出打开和关闭。-现在,让我们通过手机执行此操作。-确保您的手机与Raspberry Pi在同一网络上。-转到浏览器,然后在地址栏中输入以下内容:“您的IP”:8080 / webvisu.htm用Raspberry Pi的IP替换“您的IP”。-您现在应该可以看到我们创建的视频,并且能够切换按钮以及手机的输出-太酷了!如果遇到任何问题,请参阅附件中的Codesys项目文件以进行比较。尝试制作自己的Vis来控制步骤4中创建的项目中的GPIO。
步骤7:伺服马达控制
如果您很幸运能够使用工业级伺服器(或步进器)和驱动器,那么此步骤将向您展示如何使用Raspberry Pi PLC进行控制。我设法从工作中获得了Technosoft EtherCat入门套件,该套件包含一台电动机和一个驱动器(见图)。可以在这里找到详细信息:http://www.technosoftmotion.com/en/starter-kits-an ...在本教程中,只要您拥有制造商的设备描述文件(XML)即可导入Codesys,则可以使用任何EtherCat驱动器和电机组合。(您也可以将树莓派与其他通信协议一起使用,以控制不同的电机和IO,但是配置和步骤与我在此说明中所描述的所有内容都略有不同)。您可能需要使用某些专有软件来设置驱动器。安全注意事项:**使用电机时请小心,因为运动部件可能会造成危险。还请注意遵循电机制造商的说明,并检查所有接线是否正确,尤其是在高压驱动器上。**-第一步是按照制造商的说明连接电动机和驱动器,在我看来,这很简单,我要做的就是向端口的逻辑和电源中添加24V的电压(请参见图中红色和蓝色粗线) ,其余的全部连接起来。接下来,您必须在电动机驱动器的EtherCat In端口和Raspberry Pi的以太网端口之间链接以太网电缆。此过程与步骤5中将Pi链接到工业IO的过程相同。如果要同时使用IO和电动机,请保持IO不变,然后将以太网电缆从电动机驱动器的EtherCat输入端口连接到工业IO的EtherCat输出端口。但是,如果这样做,则必须确保将两个设备都添加到Codesys中的设备树中。EtherCat是一种出色的现场总线通信协议,允许您仅使用简单的以太网电缆就可以跨设备负载“菊花链式”通信。但是对于这个Instructable,我们将仅使用电动机。-接线完成后,我们可以进行编程。-按照与步骤5相同的过程,在Codesys中打开一个新项目,并添加一个EtherCat Master和设备,但是这次选择与该设备的电动机驱动器相对应的XML文件(添加后请参阅我的设备树的图片)这个)-现在我们需要向该设备添加一个轴。这实质上意味着我们要告诉Codesys该EtherCat设备正在控制电动机。在此范围内,电动机的参数是什么。-右键单击刚添加的设备,然后单击“添加SoftMotionLight CiA402轴”。这就是Raspberry Pi PLC的想法最小,最小的地方。由于Pi没有实时内核,因此没有实时功能(尽管您敢于使用Pi的内核可以添加这些功能),它无法处理与驱动器通信的全部功能,因此我们必须使用'Light的版本。实际上,这意味着电机与您的程序的同步性将不如它是正确的> 500英镑的设备那样好。但是,当其他功能如此出色时,谁会在乎呢!-现在,右键单击设备树的新项目,转到“重构”,然后“重命名”。重命名轴“ Axis1”。然后,Codesys将弹出一个新屏幕,要求您检查其是否找到正确的文件夹,然后单击“确定”。-双击设备树中的“ Axis1”,这将在主窗口中打开一个新选项卡。在这里,您需要通过选择多少转表示什么来校准系统中的轴,例如,我的电动机具有一个编码器,该编码器每转一圈电动机具有2000增量。我没有变速箱,我想轮流工作,而不是毫米(如果电动机上有线性轴)。所以我的屏幕看起来像所附图片。-Codesys使用EtherCat可以为您处理大多数事情,因此现在要使电动机运动,我们要做的就是编写程序并利用一些内置的Codesys功能。-为简便起见,我已将示例程序上载到以CFC(Codesys语言)编写的可指导版本,您可以轻松地将POU(在设备树的“应用程序”下找到)复制并粘贴到您的程序中。已经使用了一些简单的内置函数,这些函数是“ MC_Open” Codesys库的一部分,负责移动电机,我只需要告诉他们这些函数我想移动什么电机,要移动多远和多快。-下载程序并按照步骤5所述进入运行模式。要移动电动机,需要打开“ Motor_Control” POU,现在需要单击变量“ Distance”,“ Velocity”和“ Accel” ”(参见图片),然后输入数字,例如60、60、100。以100revs / s / s的加速度进行60转和60revs / min。现在,单击变量“ Power_Enable”,直到变量“ True”以蓝色显示,现在您需要通过单击“ Ctrl + F7”将此值写入PLC。这还将把值写入我们已更改的其他变量。-现在应启用电动机,这意味着它已通电并处于保持位置。-要使用“ MC_MoveRelative_SML”(电动机位置相对于绝对位置的相对移动)来移动电动机,需要将变量“ Move_Motor_Pos”设置为“ True”(与上述相同)。您可能必须执行两次此步骤才能看到电动机运动,这是我不太了解的错误。电机应该旋转,是的!现在您可以控制电动机了,尝试编写一个程序来回旋转电动机。您也可以使用ST语言使用MC_Open函数。
步骤8:发挥想象力
如果您设法在所有文本中都做到了这一点而又没有入睡,那么我为您鼓掌。但是,您现在应该已经获得使用CODESYS的知识,或者至少应该足够熟悉并且被这种想法所吸引,可以自己使用它。如果您喜欢这种环境,我建议您在业余爱好元素和工业元素中检查您还能使用什么。如果需要其他帮助,请参见下面的一些良好链接:根据这门指导的成功,我将致力于进一步发展,也许专注于其他一些RPi外设,以及更多的工业应用程序,以及编程方面的知识。制作愉快!
很好入门教程,顶一下 学习学习学习
webvisu.htm打不开 楼主知道乍回事吗? 写的很好入门了吧! 学习一下 写的很好,学习学习 谢谢分享,值得学习。
只是硬件是树莓派吗? 学习一下 谢谢分享
页:
[1]
2