【问题标题】:PLC: Convert structured text (ST) to function block diagram (FBD)PLC:将结构化文本 (ST) 转换为功能块图 (FBD)
【发布时间】:2019-01-21 07:54:36
【问题描述】:

是否有将现有结构化文本PLC代码转换为功能块图的已知方法? (甚至是 Beckhoff 的 CFC)
我知道这很困难,因为这些语言所基于的流程不同。
也许只是部分或至少一些结构与正确的变量连接到功能块?
我必须根据 FBD 的外观在 Visio 中创建一个逻辑代码概述,并且至少有一些结构来作为我的绘图的基础,而不必从基础上绘制所有内容,这将是一个很大的帮助ST码。

一个小的示例代码将是这个在 ST 中完成的“BrakeControl”FB,但我需要映射更大的 FB:

IF stSettings.bExists THEN
      IF stSettings.eMode = E_OPMode.eOPModeOpen OR stSettings.eMode = E_OPMode.eOPModeClose THEN
        // close brake manual - only possible if below max braking rpm and hydraulic closed
        bCloseBrake := stSettings.eMode = E_OPMode.eOPModeClose AND stIO.stGenerator.IstGen_Speed.fPercent < stSettings.fStartRev AND itfHydCtrl.IsClosed;
    ELSE
        IF stIOs.IbBrake_Auto AND stIOs.IbBrake_Worn AND  
           (itfTurbCtrl.State = E_TurbState.eTurbStateFault OR 
            itfTurbCtrl.State = E_TurbState.eTurbStateStop OR
            itfTurbCtrl.State = E_TurbState.eTurbStateReady )           
        THEN
            IF stIO.stGenerator.IstGen_Speed.fPercent < stSettings.fStartRev AND itfHydCtrl.IsClosed THEN
                bCloseBrake := TRUE;
            END_IF  
        END_IF

        IF stIOs.IbBrake_Auto AND NOT stIOs.IbBrake_Worn AND itfTurbCtrl.ManualMode THEN    
            IF stIO.stGenerator.IstGen_Speed.fPercent < stSettings.fStartRev AND  stIO.stPenstock.IbBypass_Closed 
                AND stIO.stPenstock.IbMIV_Closed AND itfHydCtrl.IsClosed THEN
                bCloseBrake := TRUE;
            END_IF  
        END_IF

    END_IF

    IF bBrakeRelease THEN
        bCloseBrake := FALSE;
    END_IF  
    stIOs.QbBrake_On := bCloseBrake;

【问题讨论】:

  • 为什么?因为你更了解 CFC?这部分漂亮且非常清晰的代码在 CFC 中会显得非常难看,
  • 不幸的是,我们的一位客户需要它......如果我找不到任何软件来至少部分转换代码,我必须直接从 ST 代码中手动绘制它,就像在这个示例:i.stack.imgur.com/MHUee.png 目前我正在尝试使用 Visio 并从 Excel 工作表中绑定数据,至少能够更好地管理 IO 和变量名称
  • 基本上这个问题与 “软件推荐” 上的另一个问题非常相关:link
  • 我同意 Mark Lazz,你不需要绘制每个块逻辑。只需在图表上添加此块,而不是块如何工作的图表。

标签: plc structured-text


【解决方案1】:

不,这不可能直接实现。 Ladder 和 FBD 之间存在转换,如果您将代码移植到 Codesys,您可以将 IL 添加到该列表中。不幸的是,ST 不能以任何方式自动移植。

在我之前有客户需求的地方,我已将代码放入单独的库中,然后将 FB 用作 FBD / CFC 中的块。这可能看起来有点“不公平”,但编写良好的软件的重点是在越来越高的层次上创建抽象。您可能会争辩说,这个低级制动控制块处于适当的抽象级别,不需要更多细节 - 您不会为您的客户拆开“TON”块。我意识到这可能不适用于您的一些较大的 FB,但也许您可以将它们重构为较小的 FB,然后使用上述方法?

如果被推送 - 我移植了代码并在新语言上重新运行了我的测试。我不确定我是否愿意做一个“文书工作端口”并保证对于不平凡的事情具有相同的功能。 CFC 块有一个指定的调用顺序,如果你不小心,可能会导致竞争条件,并且 FBD 是向后接近的(或者,这就是我的想法,无论如何!)。

祝你好运。

【讨论】:

  • 我在查看 PLC 标签时偶然发现了您的答案。你说“重新运行我对新语言的测试”。你能详细说明一下(尤其是测试)吗?我一直在寻找如何将通用软件原理应用于 PLC 代码,而测试框架是非常缺失的东西。
  • 嗨,彼得。我有自己的库,其中包含一个测试基类,它公开了秒表、计时器、一些启动/停止标志、msg 日志记录(到 Windows 系统日志)和断言。我尝试使用接口编写我的大部分代码以使模拟更容易,因此,通过上述方式,我可以拥有测试项目,通过它们的步伐运行所有对象。其中很多将被归类为“集成测试”,因为它们通常是异步的(多扫描)。我有一些(其他人的)不错的博客可以指点你,如果你有兴趣,我的库可以在 Bitbucket 上免费使用。
  • 感谢马克的报价。我主要在 GE 上的 Ladder 工作,所以我怀疑你的库是否会因为好奇而对其他人有用,但是我有兴趣查看存在哪些相关博客。我今天偶然发现了Stefan Henneken,这让我大开眼界。所以我很想看到更多!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2014-10-30
  • 2014-03-29
  • 2016-10-09
  • 1970-01-01
相关资源
最近更新 更多