【问题标题】:C to IEC 61131-3 IL compilerC 到 IEC 61131-3 IL 编译器
【发布时间】:2010-10-19 22:37:57
【问题描述】:

我需要将一些现有的 C 代码移植到符合 IEC 61131-3 的 PLC。

我有一些选项可以将代码拆分为离散的功能块,并将这些块编入标准解决方案(梯形图、FB、结构化文本等)。但这需要分割 C 代码以构建每个功能块。

查看 IEC 规范时,我意识到 IEC Instruction List 表单可能是编译器的目标语言。维基百科文章列出了两种开发工具:

  1. CoDeSys
  2. Beremiz

但这些似乎是针对将 IEC 语言编译为 C,而不是 C 编译为 IEC。

另一种可能的解决方案是通过 C 到 Pascal 转换器推送 C 代码,并将其用作Structured Text 解决方案的起点。

如果不是这些,我将沿着将代码拆分为功能块的路线。

编辑

根据 mlieson 的回复提示,我应该提到 C 代码是一个现有的实时控制系统。所以程序算法应该已经适合 PLC 环境。

【问题讨论】:

    标签: c compiler-construction plc iec61131-3


    【解决方案1】:

    也许这个答案来得太晚了,但由于有一个外部库,可以从 CoDeSys 调用 C 代码。

    您可以在 CoDeSys 论坛上找到文档:http://forum-en.3s-software.com/viewtopic.php?t=620

    这将使您只需稍作修改即可将您的 C 代码用于 PLC。您只需定义函数或功能块接口。

    【讨论】:

      【解决方案2】:

      我的猜测是,C 到 Pascal 的翻译器不会让你离得足够近,不值得麻烦。结构化文本看起来很像 Pascal,但您需要在各处修正差异。

      不是错误问题,但不要忘记 PLC 的运行时环境有点不同。 C 应用程序从 main() 开始,并在 main() 返回时结束。 PLC 一遍又一遍地调用它 main(),每秒 100:s 次,它永远不会结束。 通常冗长的计算和 I/O 需要以与 C 应用程序不同的方式进行编码。

      除非你的 C 源代码是成千上万行代码 - 重写它。

      【讨论】:

      • 我精通 PLC 和 PC 编程,因此我了解所有架构差异和问题。但是 C 代码是用于某种实时系统的(还没有看到代码 - 那是下周)
      【解决方案3】:

      这是不可能的。简而言之:IL 语言是 4GL(即仅限于 域,以及其他 IEC 61131-3 语言——ST、FBD、LD、SFC)。 C 语言是 3GL。

      要了解问题,请尝试回答问题,以哪种方式 用指针在 IL 操作中表达?例如,表达呼叫 a 通过指针函数。中断怎么办?低级访问 外围设备?

      (真的,还有更多问题)

      顺便说一句,有 Reflex 语言,又名“带有进程的 C”。 Reflex 是 4GL 的 具有类 C 语法的控制域。但是已知的译者产生 C 代码和 Python 代码。

      【讨论】:

        【解决方案4】:

        如果要转换的代码量是几千行,那么手工重新编码可能是最好的选择。

        如果您有很多代码要转换,那么自动化工具可能会非常有效。 使用DMS Software Reengineering Toolkit,我们构建了将机械运动图映射到 RLL (PLC) 代码的转换器。 DMS 还具有完整的 C 解析器/分析器/前端。这些部件用于构建 C 到 RLL 代码。

        这不是一件容易的事。将 DMS 配置为类似于您想要的东西可能需要 6-12 个人工月。如果这比手工完成的要少,那么它就是正确的方法。

        【讨论】:

          【解决方案5】:

          有一些 IEC 开发环境和目标硬件可以使用 C 块...我还要看看它必须成为 IEC-61131 投诉目标的原因。我已经写了大量关于合规性以及为什么它不意味着蹲下的文章。 SOFTplc corp 可以帮助我确定用户定义的可加载模块......而且它们可以在 C..

          施耐德也支持C功能块...

          Labview 也是!!不知道为什么 IEC 很重要!如果存在编译器肯定会创建错误的代码:)

          【讨论】:

            【解决方案6】:

            您最好的办法是将您的 C 代码拆分为更小的部分,这些部分可以重新编码为 PLC 功能块,并为您将在结构化文本中重写的每个块使用 C 到 PASCAL 转换器。准备做大量的手动工作,因为自动转换可能会让您失望。

            也看看这个页面:http://www.control.com/thread/1026228786

            【讨论】:

              【解决方案7】:

              每次我这样做时,我只是手动将其从 C 直接解析并转换为 ST。我只遇到了几个需要完全重写的函数,虽然很少有处理指针的东西,不幸的是,ST 通常会扼杀这一点。

              【讨论】:

                猜你喜欢
                • 2020-04-30
                • 2017-12-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-11-05
                • 1970-01-01
                • 1970-01-01
                • 2015-09-03
                相关资源
                最近更新 更多