3

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

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

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

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

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

4

2 回答 2

8

你可能想要的答案

实际情况已经变成了上一个答案的反面

WAGO 最新的板级支持包和文档积极支持您对 PLC200 产品线进行更​​改和扩展。特别是 WAGO 750-8206 和 17(截至 2016 年 3 月)其他 PLC:

wago.us -> 产品 -> 自动化组件 -> 模块化 WAGO-I/O-SYSTEM,IP 20(750/753 系列)

您所要做的就是与他们取得联系并索取他们最新的 PLC200 系列板支持包 (BSP)。

我引用上一个答案并标记更改,我的添加以粗体显示

概要

  • 你能破解 PFC200 并执行自定义二进制文件吗?可能 绝对是的。只要程序满足在 Linux-3.6.11 内核和 glibc-2.16 上运行并针对“armhf”API 进行编译,任何现有的 ARM 应用程序,只要您也复制它使用的库,就可以运行甚至没有专门为 PFC200 编译它。
  • 它会容易还是快速?没有是的,如果您不惧怕 Linux 命令行。就像使用板级支持包 (BSP) 提供的交叉编译器和提供的 C 库一样简单,然后运行它以将您的程序传输到 PFC 的闪存并运行它:
    scp 你的程序 root@PFC200:/usr/bin
    ssh root@FC200 /usr/bin/your-program
    当然,您可以将 Eclipse CDT 与 PFC200 的 Cross Toolchain 一起使用,并配置 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)。内核以及所有内核驱动程序和其他开源组件的源代码在板级支持包 (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 使用。

于 2016-03-10T13:44:51.993 回答
3

过时的答案

这个答案非常针对 2014 年和 2015 年的情况。截至 2016 年,它包含不正确的信息。现在仍将保持原样以提供背景信息。


您可能不想要的快速答案

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


现在长答案

首先一些背景

因为您似乎对 Wago 和 Codesys 的一般哲学不熟悉......历史很短。

Codesys 用于构建和部署硬实时执行环境,重要的是要了解在不完全了解后果的情况下使用库可能会破坏整个系统的性能(使 Codesys 陷入困境并在程序中引发看门狗错误)。请记住,许多 PLC 所控制的设备一旦发生故障就可能会导致人员死亡。

Wago 喜欢使用 Linux 为低级任务调度提供抢占式 RT 内核,然后配置 Codesys 以利用 linux 经常附带的许多标准 C 库。Wago 已经这样做了很长一段时间,但他们绝不允许您在不通过 Codesys的情况下揭开封面(这意味着使用 IEC 61131 语言,其中不包括 C++),这是为了您自己的安全(和他们的产品图片)。如果你想在 Wago 上使用 linux 的强大功能,你必须得到一个具有完全裸操作系统的特殊 PLC,几乎没有手册或支持,并放弃整个 Codesys 运行时。

与最近的型号相比,新的 PFC200 具有更多的 RAM 和内存,允许在不影响 Codesys 运行时的情况下包含更多的标准 linux用户空间堆栈(ssh、ftp、http……),并且他们宣传了这一点。但是......他们仍然对编译工具和编译和链接到 Codesys 库或访问专用硬件(连接 I/O 模块的 Wago KBUS)所需的头文件有所限制。


突触

  • 你能破解 PFC200 并执行自定义二进制文件吗?大概是。
  • 它会容易还是快速?不。
  • 这在未来会改变吗?也许。请记住,PFC200 在北美是相当新的。

你可能不知道的事

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

您可以获得在 Linux 上运行 Codesys 的Open Wago PLC。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 不需要知道为什么或如何发生这种情况)。

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

于 2015-05-22T08:17:55.540 回答