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

Communicate with CoDeSys program on a Linux-based WAGO PFC200 PLC

我目前正在熟悉 PLC,尤其是 WAGO 750-8206 PLC。它提供了 linux OS 并且可以 运行 CoDeSys 程序。有一些 I/O 模块连接到控制器:750-530、750-430 和 750-600。我想知道的是:

是否可以编写 C++ linux 应用程序 运行 在 PLC 上 gets/sets 数字输入和输出?

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

此外,我需要能够从 linux 应用程序向 CoDeSys 程序发送命令,以便在 linux应用程序收到触发命令的消息。

非常感谢您对此主题的任何想法和评论,因为我对这个主题完全陌生。提前致谢!

过时的答案

此答案非常针对 2014 年和 2015 年的情况。截至 2016 年,它包含不正确的信息。现在仍然要离开 as-is 以提供背景。


你可能不想要的快速回答

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


现在是长答案

首先是一些背景

由于您似乎对 Wago 和 Codesys 的 philosphy 不熟悉...所以历史很短。

Codesys 用于构建和部署 Hard Realtime 执行环境,重要的是要了解在不完全了解后果的情况下使用库可能会破坏整个系统的性能(带来Codesys 屈服并在程序中抛出看门狗错误)。请记住,许多 PLC 所控制的设备如果发生故障可能会导致人员死亡。

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

新的 PFC200 比最近的型号有更多的 RAM 和可用内存,允许更多的标准 linux userland stack(ssh,ftp , http, ...) 在不影响 Codesys 运行时的情况下被包含在内,他们对此进行了宣传。 但是... 他们仍然对编译工具和编译所需的 header 文件以及 link 到 Codesys 库或访问专用硬件(Wago KBUS,它连接你的 I/O 模块)。


概要

  • 你能破解 PFC200 并执行自定义二进制文件吗?大概是。
  • 容易还是快?号
  • 以后这种情况会改变吗?或许。请记住,PFC200 在北美是相当新的。

你可能不知道的事情

Codesys 不一定了解或关心 Wago。您可以获得针对 Intel 处理器 运行 a linux os 的 Codesys 目标平台。 Codesys 确实支持 访问外部库(反向通信很危险),但他们通常需要 C 风格的接口,并且您只能通过定义来访问 those 库C-headers Codesys 将进行分析,因此您可能需要施展魔法才能使 C++ 无缝运行。您可以做的是创建一段 C++ 和 Codesys 都可以访问的共享内存,这就是它们传递信息的方式(同步是另一个问题)。

您可以获得 Open Wago PLC,运行 Linux 上的 Codesys。 Wago的工控机就是专门为这个目的而制作的ose。总的来说,它们具有更强的能量、记忆力和通信能力;但它们的性能 os 是典型 Wago PLC 的两倍多。

如果您想玩弄一下破解 Wago 的想法,您将需要撕开 Codesys(它有自己的)的手册、Wago IPC 的手册,并且已经熟悉 linux 样式 inter-process-communication and/or 动态库.

此外,还有一个较旧的 Wago PLC,上面有裸露的 Linux 750-8??。它还有一本非常好的手册,介绍如何使用提供的 headers.

访问 Wago 硬件

您必须首先了解 Codesys 期望如何与其目标操作系统对话。然后你逆向工作,让它与运行在该操作系统上的 Wago 特定库对话。您必须小心不要劫持 Codesys。

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

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

您可能想要的答案

实际情况已改变为上一个答案的相反

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)。

我引用之前的答案并标记更改,我的添加在粗体

Synopsis

  • Could you hack a PFC200 and get custom binaries executed? Probably Absolutely yes. As long as the program is content to run on the Linux-3.6.11 kernel and glibc-2.16 and is compiled for the "armhf" API, any existing ARM application, provided you also copy the libraries it uses as well, will just run without even compiling it specifically for the PFC200.
  • Would it be easy or quick? No. Yes, if you have no fear of the Linux Command line. It is as easy as using the Cross Compiler provided by the Board Support Package (BSP) with the provided C-libraries and then run this to transfer your program to the PFC's flash and run it:
    scp your-program root@PFC200:/usr/bin
    ssh root@FC200 /usr/bin/your-program
    Of course, you can use Eclipse CDT with the Cross Toolchain for the PFC200 and configure Eclipse to do do remote run and debug.
  • Will this change in the future? Maybe. Remember that PFC200 is fairly new in North America.It has, PFC200 has appeared in September 2014

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

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

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

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

但是,WAGO 从头开始​​开发的库和工具的源代码不基于 GPL/Open 未提供源代码:这些包括应用设备接口 (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 提供一个库。