PLC:将结构化文本(ST)转换为功能框图(FBD)

时间:2019-01-21 07:54:36

标签: plc structured-text

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

1 个答案:

答案 0 :(得分:0)

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

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

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

祝你好运。