在基于Linux的WAGO PFC200 PLC上与CoDeSys程序通信

时间:2015-05-04 12:49:20

标签: c++ linux plc codesys

我现在熟悉PLC,特别是WAGO 750-8206 PLC。它提供了一个Linux操作系统,可以运行CoDeSys程序。控制器上连接了一些I / O模块:750-530,750-430和750-600。我想知道的是:

是否可以编写在PLC上运行的C ++ Linux应用程序并获取/设置数字输入和输出?

更好:我可以编写一个“与I / O对话”的CoDeSys程序并处理所有逻辑,同时可以通过C ++ linux程序访问吗?这个想法是这样的:我希望CoDeSys程序能够检查两个数字输入。如果两者都很高,则应将变量设置为定义的值。 linux应用程序应该能够读取该变量并进行进一步处理(例如将JSon数据发送到服务器或类似)。

此外,当linux应用程序收到触发命令的消息时,我需要能够将命令从linux应用程序发送到CoDeSys程序,以便切换数字输出(或在模拟输出上设置值等)。 / p>

对此主题的任何想法和评论都非常感谢,因为我对这个主题完全不熟悉。提前谢谢!

2 个答案:

答案 0 :(得分:7)

你可能想要的答案

实际情况已更改进入上一个答案的相反

WAGO最近的电路板支持包和文档积极支持您对PLC200系列进行更改和扩展。特别是WAGO 750-8206和17(截至2016年3月)其他PLC:

wago.us -> Products -> Components for Automation -> Modular WAGO-I/O-SYSTEM, IP 20 (750/753 Series)

您需要做的是与他们取得联系并索取最新的PLC200生产线支持包(BSP)。

我引用上一个答案并标记更改,我的添加内容为粗体

  

概要

     
      
  • 你能破解PFC200并获得自定义二进制文件吗? 可能 绝对是的。 只要该程序满足于在Linux-3.6.11内核和glibc-2.16上运行并且为" armhf"而编译。 API,任何现有的ARM应用程序,如果你也复制它使用的库,它们只运行而不用专门为PFC200编译它。
  •   
  • 是简单还是快速? 是的,如果你不担心Linux命令行。它就像使用Board Support Package(BSP)提供的交叉编译器和提供的C库一样简单,然后运行它以将程序传输到PFC的闪存并运行它:
    scp your-program root@PFC200:/usr/bin
    ssh root@FC200 /usr/bin/your-program
    当然,您可以将Eclipse CDT与PFC200的交叉工具链一起使用,并将Eclipse配置为进行远程运行和调试。
  •   
  • 将来会改变吗? 也许。请记住,PFC200在北美是相当新的。 它有,PFC200已于2014年9月出现
  •   

公众HOWTO Building FORTE for Wago描述了如何使用初始BSP运行FORTE,这是 4DIAC 的IEC 61499运行时环境(链接:sf.net/projects/fordiac ),一个开源PLC环境,允许以供应商中立的方式实施工业控制解决方案。 4DIAC实现了IEC 61499扩展IEC 61131-3,更好地支持控制器到控制器通信和动态重配置。

如果您想直接访问KBUS(与I / O通信),您必须知道当前只有一个应用程序可以负责KBUS。

因此,CODESYS或FORTE或您自己的KBUS应用程序可以负责KBUS。

2015年的BSP有很多示例和演示如何使用PLC200的所有I / O(KBUS,CAN,MODBUS,PROFIBUS以及PFC200上的开关和LED)。内核以及所有内核驱动程序和其他开源组件的源代码在Board支持包(BSP)中提供和编译。

但是,未提供WAGO从头开发并且不基于GPL /开源代码的库和工具的来源:这些包括应用程序设备接口(ADI)/设备抽象层(DAL)库CANopen,PROFIBUS-Slave和KBus(用于连接到主PLC单元的所有PLC I / O模块)

虽然CANopen使用标准Linux Socketcan API与内核通信,你可以使用提供的libsocketcan编写一个普通的socketcan程序,但KBus API是一个特定于WAGO的发明,你必须在那里如果您不想使用WAGO的DAL访问PLC的所有电气I / O,请进行一些逆向工程,但是DAL已记录在案,并且BSP中提供了如何使用它的示例。

如果你使用CODESYS,那么有一个" codesys_lib_demo-0.1"示例库,显示如何为CODESYS提供库以供使用。

答案 1 :(得分:3)

过时的答案

这个答案非常具体针对2014年和2015年的情况。截至2016年,它包含不正确的信息。现在仍然要离开,提供背景资料。

您可能不想要的快速答案

您可以非常合理地使用Codesys编写代码,该代码将JSON数据包放在一起并将其发送到其他地方的服务器。 JSON只是文本,而且Codesys可以以与C非常类似的方式处理文本。在Codesys中有很多以太网协议可以使用Wago提供的插件库。

现在是长答案

首先是一些背景

因为你似乎是Wago的新手和一般的Codesys哲学......历史很短。

Codesys用于构建和部署 Hard Realtime 执行环境,重要的是要了解利用库而不完全了解后果可能会破坏整个系统的性能(使Codesys陷入困境)在程序中抛出看门狗错误)。请记住,许多PLC都在控制设备,如果它崩溃了就可以杀死它。

Wago喜欢使用Linux为低级别任务调度提供抢占式RT内核,然后配置Codesys以利用通常伴随Linux的大部分标准C库。 Wago已经做了很长一段时间了,但他们永远不会允许你剥离封面而不经过Codesys(这意味着使用IEC 61131语言,其中不包括C ++),以及是为了您自己的安全(以及他们的产品形象)。如果你想在Wago上使用linux的强大功能,你必须得到一个带有完全裸机的特殊PLC,几乎没有手动或支持,并且放弃整个Codesys运行时。

新的PFC200拥有比最新型号更多的RAM和内存,允许包含更多标准linux 用户空间堆栈(ssh,ftp,http,...),而不会影响Codesys运行时,他们宣传这个。 但是...... 他们仍然关注编译工具和编译和链接到Codesys库或访问专用硬件所需的头文件(Wago KBUS,它与I / O模块接口)。

Synapsis

  • 你能破解PFC200并获得自定义二进制文件吗?可能是。
  • 是简单还是快速?否。
  • 将来会改变吗?也许。请记住,PFC200在北美是相当新的。

你可能不知道的事情

Codesys不一定了解或关心Wago。您可以获得针对运行Linux操作系统的英特尔处理器的Codesys的目标平台。 Codesys DOES SUPPORT 访问外部库(反向通信很危险),但他们通常期望C风格的界面,你只能通过定义Codesys将分析的C-header来访问这些库,所以你可能需要做一些魔术才能让C ++无缝地工作。你可以做的是创建一个C ++和Codesys访问的共享内存段,这就是它们传递信息的方式(同步是另一个问题)。

您可以在Linux上运行 Open Wago PLC,运行Codesys。 Wago的IPC专门为此目的而制作。它们通常具有更多的功率,内存和通信能力;但它们的成本比典型的Wago PLC高出一倍。

如果你想要攻击Wago的想法,你需要撕开Codesys的手册(它有自己的手册),Wago IPC的手册,并且已经熟悉linux风格的进程间 - 通信和/或动态库。

此外,还有一个较老的Wago PLC,它上面有裸机Linux 750-8 ??。它还有一本关于如何使用提供的标题访问Wago硬件的非常好的手册。

您必须首先了解Codesys希望如何与其目标操作系统进行通信。然后你向后工作,让它与生活在该操作系统上的Wago特定图书馆交谈。你必须小心不要劫持Codesys。

你额外的C ++库应该有助于Codesys,而不是接管它。例如,在同一设备上托管sqlite数据库,并使用C ++管理数据库,并提供Codesys可以使用的非常简单的接口。所有Codesys都会调用一个函数并传递一些值,但是你的C ++实际上会构建一个SQL查询并将其发送到数据库(Codesys不需要知道为什么或如何发生这种情况)。

我希望至少有一段在某种程度上有所帮助。