C至IEC 61131-3 IL编译器

C至IEC 61131-3 IL编译器,c,compiler-construction,plc,iec61131-3,C,Compiler Construction,Plc,Iec61131 3,我需要将一些现有的C代码移植到兼容的PLC 我可以选择将代码拆分成离散的功能块,并将这些功能块编织成标准解决方案(梯形图、FB、结构化文本等)。但这需要分割C代码来构建每个功能块 在查看IEC规范时,我意识到表单可能是编译器的目标语言。wikepedia文章列出了两种开发工具: 但这些目标似乎是将IEC语言编译成C,而不是C到IEC 另一种可能的解决方案是通过C到Pascal转换器推送C代码,并将其作为解决方案的起点 如果没有这些,我将继续把代码分解成功能块 编辑 根据mlieson的回复,

我需要将一些现有的C代码移植到兼容的PLC

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

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

  • 但这些目标似乎是将IEC语言编译成C,而不是C到IEC

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

    如果没有这些,我将继续把代码分解成功能块

    编辑


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

    我的猜测是,C到Pascal的翻译不会让你离得太近,因此不值得费心。结构化文本看起来很像Pascal,但有一些差异需要在任何地方进行修正

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


    除非您的C源代码有数千行代码,否则请重写它。

    如果要转换的代码量只有几千行,手动重新编码可能是您最好的选择

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


    这不是一项容易的任务。可能需要6-12个人月才能将DMS配置为与您想要的类似的东西。如果这比手工做的要少,那么这是正确的方法

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

    您可以在CoDeSys论坛上找到文档,网址为


    这将使您可以在PLC中使用C代码,只需稍作修改。您只需定义函数或函数块接口。

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

    要理解这个问题,试着回答这个问题,该怎么做 用指针在IL操作中表示?例如,要表示呼叫 由指针执行的函数。中断呢?低级别访问 外围设备

    (真的,还有更多的问题)

    顺便说一句,这里有反射语言,也就是“带进程的C”。Reflection是一个4GL的 具有类似C的语法的控制域。但是,已知的翻译人员产生了
    C代码和Python代码。

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


    还可以看看这个页面:

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

    施耐德还支持C功能块


    Labview也是!!不知道为什么IEC很重要,仅此而已!!编译器(如果存在的话)肯定会产生错误的代码:)

    每次我这样做时,我只是手工解析并将其从C直接转换到ST。我只遇到了一些需要完全重写的函数,尽管很少有处理指针的函数,而指针通常会被ST阻塞,不幸的是。

    我精通PLC和PC编程,所以我知道所有的架构差异和问题。但是C代码是为某种实时系统编写的(还没有看到代码-那是下周)