1

是否有将现有结构化文本 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;
4

1 回答 1

0

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

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

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

祝你好运。

于 2019-01-23T12:07:45.390 回答