zoukankan      html  css  js  c++  java
  • PLC项目代码说明

    PLC项目代码说明

    程序主流程分为6个部分,1.通讯部分;2.故障判断部分;3.故障类型判断部分;4.状态判断部分;5.故障处理部分;6.操作部分。

    1.通讯部分

    PLC作为主站,变频器作为1#付站,采RS485的MODBUS通讯协议。以下是通讯程序代码

    (*datamod*)
    "EventPV1 ", 01, $01, "LocalPV1 ", 0000, 0005
    "EventPV2 ", 02, $01, "LocalPV2 ", 0000, 0003
    "EventPV3 ", 03, $01, "LocalPV3 ", 0000, 0005
    "EventPV4 ", 04, $01, "LocalPV4 ", 0000, 0005
    
    初始化部分
    PROGRAM _INIT
    (* Insert code here *)
    S1:=0;
    S2:=1;
    EventPV1:=1;
    EventPV2:=1;
    EventPV3 := 1;
    EventPV4 := 1;
    LocalPV1[0] := 0;
    LocalPV1[1]:=0;
    LocalPV1[2] := 0;
    LocalPV1[3] := 0;
    LocalPV1[4] := 0;
    LocalPV1[5] := 0;
    
    LocalPV2[0] := 0;
    LocalPV2[1] := 0;
    LocalPV2[2] := 0;
    LocalPV2[3] := 0;
    LocalPV2[4] := 0;
    
    LocalPV3[0] := 0;
    LocalPV3[1] := 0;
    LocalPV3[2] := 0;
    LocalPV3[3] := 0;
    LocalPV3[4] := 0;
    LocalPV3[5] := 0;
    
    LocalPV4[0] := 0;
    LocalPV4[1] := 0;
    LocalPV4[2] := 0;
    LocalPV4[3] := 0;
    LocalPV4[4] := 0;
    
    
    MBMOpen_xx.enable:=1;
    MBMOpen_xx.pDevice:=ADR('IF6.ST4.IF1');
    MBMOpen_xx.pMode:=ADR('/PHY=RS485 /PA=E /DB=8 /SB=1 /BD=19200');
    MBMOpen_xx.pConfig:=ADR('datamod');
    MBMOpen_xx.timeout:=2000;
    MBMOpen_xx.ascii:=0;
    MBMOpen_xx();    
    
    END_PROGRAM
    
    循环部分
    PROGRAM _CYCLIC
    (* Insert code here *)
    (*EventPV1:=1;
    EventPV2:=1;*)
    EventPV1 := 1;
    EventPV3 := 1;
    
    IF(S1=0)THEN
        MBMaster_xx.enable:=1;
        MBMaster_xx.ident:=MBMOpen_xx.ident;
        MBMaster_xx();
    ELSE
        MBMCmd_xx.enable:=1;
        MBMCmd_xx.ident:=MBMOpen_xx.ident;
        MBMCmd_xx.mfc:=1;
        MBMCmd_xx.node:=1;
        MBMCmd_xx.data:=ADR(LocalPV1);
        (*name*)
        MBMCmd_xx.offset:=0;
        MBMCmd_xx.len:=4;
        MBMCmd_xx();
    END_IF
    IF(S2=0)THEN
        MBMClose_xx.enable:=1;
        MBMClose_xx.ident:=MBMOpen_xx.ident;
        MBMClose_xx();
    END_IF
    END_PROGRAM
    

    2.故障判断部分

    故障判断部分分为四个部分,分别为转速判断,温度判断,压力判断和风机故障判断。写成一个Action,在主程序中调用。

    ACTION ErrorConfirm:
        (***************转速判断*************)
        IF iSpeedActual < iMinPowerSpeed THEN
            nPowerUnitWarnWord1.10 := TRUE;
        ELSE
            nPowerUnitWarnWord1.10 := FALSE;
        END_IF
        IF iSpeedActual > iMaxPowerSpeed THEN
            nPowerUnitWarnWord1.11 := TRUE;
        ELSE
            nPowerUnitWarnWord1.11 := FALSE;
        END_IF
        IF iSpeedActual < iMinStartBackupGenSpeed THEN
            (*低于轴发启动速度报警,待补充*)
        ELSE
        END_IF
        IF iSpeedActual > iMaxStartBackupGenSpeed THEN
            (*高于启动轴发转速报警,待补充*)
        ELSE
        END_IF
        (**************IGBT冷却水系统越限报警**********)
        IF iCoolingWaterInTemp > iCoolingWaterInHighTemp THEN
            nSystemWarnWord3.15 := 1;
        ELSE
            nSystemWarnWord3.15 := 0;
        END_IF
        IF iCoolingWaterOutTemp >iCoolingWaterOutHighTemp THEN
            nSystemWarnWord4.0 := TRUE;
        ELSE
            nSystemWarnWord4.0 := FALSE;
        END_IF
        IF iCoolingWaterOutTemp > iCoolingWaterOutHHighTemp THEN
            nSystemWarnWord4.1 := TRUE;
        ELSE
            nSystemWarnWord4.1 := FALSE;
        END_IF
        IF iCoolingWaterInPressureActual < iCoolingWaterInLowPressure THEN
            nSystemWarnWord4.2 := TRUE;
        ELSE
            nSystemWarnWord4.2 := FALSE;
        END_IF
        IF iCoolingWaterInPressureActual < iCoolingWaterInLLowPressure THEN
            nSystemWarnWord4.3 := TRUE;
        ELSE
            nSystemWarnWord4.3 := FALSE;
        END_IF
        IF iCoolingWaterInPressureActual > iCoolingWaterInHignPressure THEN
            nSystemWarnWord4.4 := TRUE;
        ELSE
            nSystemWarnWord4.4 := FALSE;
        END_IF 
    
        IF 
            (iCoolingWaterInPressureActual - iCoolingWaterOutPressureActual)<iCoolingWaterLowPressureDiff THEN
            nSystemWarnWord4.5 := TRUE;
        ELSE
            nSystemWarnWord4.5 := TRUE;
        END_IF
    
        IF 
            (iCoolingWaterInPressureActual - iCoolingWaterOutPressureActual)<iCoolingWaterLLowPressureDiff THEN
    
            nSystemWarnWord4.6 := TRUE;
        ELSE
            nSystemWarnWord4.6 := TRUE;
        END_IF
    
        IF 
            (iCoolingWaterInPressureActual - iCoolingWaterOutPressureActual)>iCoolingWaterHighPressureDiff THEN
    
            nSystemWarnWord4.7 := TRUE;
        ELSE
            nSystemWarnWord4.7 := TRUE;
        END_IF
        (******************发电电流能力计算,待补充*****************)
    
        (******************控制柜风机故障**************************)
        IF bControlCabinetFanRun = FALSE AND bStatusRun = TRUE THEN
            timer7.IN := 1;
            timer7.PT := T#3s;
            timer7();
            IF timer7.Q THEN 
                nSystemWarnWord3.13 := TRUE;
            END_IF
        END_IF
        (*****************1#轴发风机故障**************************)
        IF bGeneratorFan1Run = FALSE AND bStatusRun = TRUE THEN
            timer8.IN := TRUE;
            timer8.PT := T#2s;
            timer8();
            IF timer8.Q = 1 THEN
                (*xa241F := true;*)(*缺,待补充*)
            ELSE
            END_IF
        END_IF
    
         (*****************2#轴发风机故障**************************)
        IF bGeneratorFan2Run = FALSE AND bStatusRun = TRUE THEN
                timer8.IN := TRUE;
                timer8.PT := T#2s;
                timer8();
            IF timer8.Q = 1 THEN
                    (*xa242F := true;*)(*缺, 待补充*)
            ELSE
                END_IF
            END_IF
    END_ACTION
    

    3.故障类型判断

    整个系统共计63个报警点,分为A,B,C,D,E五类。其中A类25个,B类5个,C类3个,D类1个,E类29个。
    63个报警点归为7个word变量,分别为nPowerUnitWarnWord1,nPowerUnitWarnWord2,nPowerUnitWarnWord3,nSystemWarnWord1,nSystemWarnWord2,nSystemWarnWord3,nSystemWarnWord4.定义参见文档。5类报警写成5个函数和1个功能块如下,功能块内调用函数,在主函数中调用该功能块即可。

    3.1.A类故障确认F_AtypeErrorConfirm

    FUNCTION F_AtypeErrorConfirm
        (*IN1的输入为nPowerUnitWarnWord1*)
        IN1_bit7  := F_GetBitX(IN1,7);
        IN1_bit10 := F_GetBitX(IN1,7);
        IN1_bit11 := F_GetBitX(IN1,7);
        IN1_bit13 := F_GetBitX(IN1,7);
    
        (*IN2的输入为nPowerUnitWarnWord2*)  
        IN2_bit1  := F_GetBitX(IN2,1);
        IN2_bit3  := F_GetBitX(IN2,3);
        IN2_bit5  := F_GetBitX(IN2,5);
        IN2_bit6  := F_GetBitX(IN2,6);
        IN2_bit7  := F_GetBitX(IN2,7);
        IN2_bit8  := F_GetBitX(IN2,8);
        IN2_bit9  := F_GetBitX(IN2,9);
        IN2_bit10 := F_GetBitX(IN2,10);
        IN2_bit11 := F_GetBitX(IN2,11);
    
        (*IN3的输入为nPowerUnitWarnWord3*)
        IN3_bit1  := F_GetBitX(IN3,1);
        IN3_bit3  := F_GetBitX(IN3,1);
        IN3_bit5  := F_GetBitX(IN3,1);
        IN3_bit6  := F_GetBitX(IN3,1);
        IN3_bit7  := F_GetBitX(IN3,1);
        IN3_bit8  := F_GetBitX(IN3,1);
        IN3_bit9  := F_GetBitX(IN3,1);
    
        (*IN4的输入为nSystemWarnWord1*)
        IN4_bit1  := F_GetBitX(IN4,1);
        IN4_bit3  := F_GetBitX(IN4,3);
        IN4_bit5  := F_GetBitX(IN4,5);
        IN4_bit7  := F_GetBitX(IN4,7);
    
        (*IN5的输入为nSystemWarnWord2*)
        IN5_bit4  := F_GetBitX(IN5,4);
        IN5_bit6  := F_GetBitX(IN5,6);
        IN5_bit8  := F_GetBitX(IN5,8);
    
    
        IF  IN1_bit7 OR IN1_bit10 OR    IN1_bit11 OR IN1_bit13
    
            OR IN2_bit1  OR IN2_bit3  OR IN2_bit5  
            OR IN2_bit6  OR IN2_bit7  OR IN2_bit8 
            OR IN2_bit9  OR IN2_bit10 OR IN2_bit11
    
            OR IN3_bit1 OR IN3_bit3 OR IN3_bit5
            OR IN3_bit6 OR IN3_bit7 OR IN3_bit8 
            OR IN3_bit9 
    
            OR IN4_bit1 OR IN4_bit3 OR IN4_bit5 
            OR IN4_bit7 
    
            OR IN5_bit4 OR IN5_bit6 OR IN5_bit8 
            THEN
            F_AtypeErrorConfirm := 1;
        ELSE
            F_AtypeErrorConfirm := 0;
        END_IF
    END_FUNCTION
    

    3.2.B类故障确认F_BtypeErrorConfirm

    FUNCTION F_BtypeErrorConfirm
        IN1_bit13 := F_GetBitX(IN1,13);
        IN2_bit1  := F_GetBitX(IN2,1);
        IN2_bit6  := F_GetBitX(IN2,6);
    
        IF IN1_bit13 OR IN2_bit1 OR IN2_bit6     (*缺xA241F,xA242F*)
            THEN
            F_BtypeErrorConfirm := 1;
        ELSE
            F_BtypeErrorConfirm := 0;
        END_IF
    END_FUNCTION
    

    3.3.C类故障确认F_CtypeErrorConfirm

    FUNCTION F_CtypeErrorConfirm
    
            IN1_bit1 := F_GetBitX(IN1,1);
            IN1_bit2 := F_GetBitX(IN1,2);
            IN2_bit3 := F_GetBitX(IN2,3);
    
            IF IN1_bit1 OR IN1_bit2 OR IN2_bit3 
                THEN
                F_CtypeErrorConfirm := 1;
            ELSE
                F_CtypeErrorConfirm := 0;
            END_IF  
    END_FUNCTION
    

    3.4.D类故障确认F_DtypeErrorConfirm

    FUNCTION F_DtypeErrorConfirm
        IN1_bit0 := F_GetBitX(IN1,0);    (*D类报警仅有一个xC201B,未定义,待定*)
    
        IF IN1_bit0
            THEN
            F_DtypeErrorConfirm := 1;
        ELSE
            F_DtypeErrorConfirm := 0;
        END_IF
    
    END_FUNCTION
    

    3.5.E类故障确认F_EtypeErrorConfirm

    FUNCTION F_EtypeErrorConfirm
        (*IN1的输入为nSystemWarnWord1*)
        IN1_bit0  := F_GetBitX(IN1,0);    
        IN1_bit2  := F_GetBitX(IN1,2);    
        IN1_bit4  := F_GetBitX(IN1,4);   
        IN1_bit6  := F_GetBitX(IN1,6);
        IN1_bit8  := F_GetBitX(IN1,8);
        IN1_bit9  := F_GetBitX(IN1,9);
        IN1_bit10 := F_GetBitX(IN1,10);
        IN1_bit12 := F_GetBitX(IN1,12);
        IN1_bit13 := F_GetBitX(IN1,13);
    
        (*IN2的输入为nSystemWarnWord2*)
        IN2_bit0  := F_GetBitX(IN2,0);
        IN2_bit3  := F_GetBitX(IN2,3);
        IN2_bit5  := F_GetBitX(IN2,5);
        IN2_bit7  := F_GetBitX(IN2,7);
    
        (*IN3的输入为nSystemWarnWord3*)
        IN3_bit3   := F_GetBitX(IN3,3);
        IN3_bit5   := F_GetBitX(IN3,5);
        IN3_bit7   := F_GetBitX(IN3,7);
        IN3_bit14  := F_GetBitX(IN3,14);
        IN3_bit15  := F_GetBitX(IN3,15);
    
        (*IN4的输入为nSystemWarnWord4*)
        IN4_bit0   := F_GetBitX(IN4,0);
        IN4_bit2   := F_GetBitX(IN4,2);
        IN4_bit4   := F_GetBitX(IN4,4);
        IN4_bit5   := F_GetBitX(IN4,5);
        IN4_bit7   := F_GetBitX(IN4,7);
        IN4_bit8   := F_GetBitX(IN4,8);
    
        (*IN5的输入为nPowerUintWarnWord1*)
        IN5_bit12  := F_GetBitX(IN5,12);
        IN5_bit14  := F_GetBitX(IN5,14);
    
        IF  IN1_bit0  OR IN1_bit2  OR IN1_bit4  OR
            IN1_bit6  OR IN1_bit8  OR IN1_bit9  OR
            IN1_bit10 OR IN1_bit12 OR IN1_bit13 OR
    
            IN2_bit0  OR IN2_bit3  OR IN2_bit5  OR
            IN2_bit7  OR 
    
            IN3_bit3  OR IN3_bit5  OR IN3_bit7  OR
            IN3_bit14 OR IN3_bit15 OR
    
            IN4_bit0  OR IN4_bit2 OR IN4_bit4 OR
            IN4_bit5  OR IN4_bit7 OR IN4_bit8 OR
    
            IN5_bit12 OR IN5_bit14 
            THEN
            F_EtypeErrorConfirm := 1;
        ELSE
            F_EtypeErrorConfirm := 0;
        END_IF
    END_FUNCTION
    

    3.6.故障类型判断FB_Error

    FUNCTION_BLOCK FB_Error
        IF
            F_AtypeErrorConfirm(IN1,IN2,IN3,IN4,IN5) = 1                        (*A类故障判断*)
            THEN
            OUT1 := A;
            OUT2 := TRUE;
        ELSIF
            F_BtypeErrorConfirm(IN6,IN7) = 1                        (*B类故障判断*)
            THEN
            OUT1 := B;
            OUT2 := TRUE;
        ELSIF
            F_CtypeErrorConfirm(IN4,IN5) = 1                    (*C类故障判断*)
            THEN
            OUT1 := C;
        ELSIF
            F_DtypeErrorConfirm(IN5) = 1                        (*D类故障判断*)
            THEN
            OUT1 := D;
        ELSIF
            F_EtypeErrorConfirm(IN5,IN5,IN6,IN7,IN1) = 1        (*E类故障判断*)
            THEN
            OUT1 := E;
        END_IF  
    END_FUNCTION_BLOCK
    

    4.状态判断

    状态判断部分写成一个功能块如下,在主程序中调用即可。
    FB_StateJudge

    FUNCTION_BLOCK FB_StateJudge
        IF IN_nPowerUnitStatusWord = Stopped_Status
            THEN
            OUT_bStatusRun := FALSE;
        ELSIF OUT_bStatusRun = 1    (*xS072为BOOL类型,不能取值为2*)   
            THEN
            OUT_bStatusRun := TRUE;
        END_IF
    
    
        IF IN_bStatusRun = FALSE AND IN_bStatusFault = FALSE AND IN_bMainSwitchStatus = FALSE AND IN_iSpeedActual >= IN_iGenStartSpeed
            THEN
            OUT_bStatusReady := TRUE;
        ELSE
            OUT_bStatusReady := FALSE;
        END_IF
    
        IF IN_bMainSwitchStatus = TRUE 
            THEN
            IF IN_bEngine1SwitchStatus OR IN_bEngine2SwitchStatus OR IN_bEngine3SwitchStatus 
                THEN
                IN_eParallelStatus := ShaftGenOnOnly;
            ELSE
                IN_eParallelStatus := ShaftGenAndDieselGenOn;
            END_IF
        ELSE
            IN_eParallelStatus := ShaftGenOff;
        END_IF      
    END_FUNCTION_BLOCK
    

    5.故障处理

    故障处理部分主要包括停轴发和启动备用发电机两个流程,分别写成两个Action,在主程序中调用。

    5.1.停轴发StopAxis

    ACTION StopAxis: 
    
    CASE Step OF        
             0:         
                IF eErrorType=A THEN    (*command = eErrorType*)
                    Step := 5;
                END_IF
    
             5:
                IF bMainSwitchStatus = TRUE THEN  (*xs601  bMainSwitchStatus*)
                    Step := 10;
                ELSE
                    Step := 30;
                END_IF                                  
        (*  CASE SubStep OF 0: *)
             10:
                timer1.IN := 1;
                timer1.PT := T#3000ms;
                timer1();
                IF timer1.Q =1 THEN
                    Step := 20;
                END_IF
    
             20:
                timer2.IN := 1;
                timer2.PT := T#500ms;
                timer2();
                IF timer2.Q =1 THEN 
                    Step := 30;
                ELSE 
                    Step := 255;
                END_IF
                (*AxisStop.Input.Funs.ton1.IN := AxisStop.Input.Par.signal1;    
    
                    AxisStop.Input.Funs.ton1.PT := AxisStop.Input.Par.time1;
                    AxisStop.Input.Funs.ton1(); 
                        IF AxisStop.Input.Funs.ton1.Q = 1 THEN
                        Step := 20;
                        END_IF
    
                    CASE 20:
                        AxisStop.Input.Funs.ton2.IN := AxisStop.Input.Par.signal2;
                        AxisStop.Input.Funs.ton2.PT := AxisStop.Input.Par.time2;    
                        AxisStop.Input.Funs.ton2();
                        IF AxisStop.Input.Funs.ton2.Q = TRUE
                        Step := 30;
                        ELSE    
                        Step := 255;
                        END_IF*)
    
         30:
            bCmdStartPowerUnit := FALSE;            
            IF nPowerUnitStausWord = FALSE THEN
    
                        Step := 0;
                        bMainSwitchStatus := 0;
            ELSE
            nSystemWarnWord1.10 := TRUE;
            nSystemWarnWord1.11 := TRUE;
            END_IF
    
         255:
            xA113F := TRUE;
            Step := 30;
    END_CASE
    END_ACTION
    

    5.2.起动备用发电机流程StartBackupGen

    ACTION StartBackupGen:
        CASE step1 OF
             0:
    
                IF eParallelStatus = ShaftGenOnOnly THEN 
    
                    step1 := 10;
                END_IF
    
            10:
                    bCmdStartBackupGen := TRUE;
                    timer3.IN := TRUE;
                    timer3.PT := T#3000ms;
                    timer3();
                    IF timer3.Q = TRUE 
                    THEN
                    bCmdStartBackupGen := FALSE;
                    timer3.IN:= FALSE;
                    step1:= 20;
                    END_IF
    
            20:
                    timer4.IN := TRUE;              
                    timer4.PT := T#45000ms;
                    timer4();
                IF timer4.Q = FALSE THEN
    
                        IF bEngine1SwitchStatus= TRUE 
                            OR bEngine2SwitchStatus=TRUE 
                            OR  bEngine3SwitchStatus =TRUE 
                        THEN
                    step1 := 0;
                    ELSE
                    nSystemWarnWord1.12 := TRUE;
                    END_IF
                    END_IF
    END_CASE
    END_ACTION
    

    6.操作

    操作部分主要包括停轴发,启动,增频,降频,复位和紧急停车几个操作,分别写成6个Action,在主程序中调用,停轴发部分上面已经讲过,下面是其他5个操作。

    6.1启动

    ACTION Start:
        bCmdStartPowerUnit := 1;
        timer5.IN := TRUE;
        timer5.PT := INT_TO_TIME (iMainSwicthDelayTime);
        IF timer5.Q =TRUE THEN
    
            IF nPowerUnitStatusWord = 2
                THEN
                ; 
            ELSE
    
            bStartFailed := TRUE;
            bFaultLatch := TRUE;
            bCmdStartPowerUnit := FALSE;
    
            END_IF
            END_IF
    END_ACTION
    

    6.2增频

    ACTION addFreq:
        IF iNoLoadFreqSetpoint < iNoloadMaxFreq
            THEN
            timer6.IN := TRUE;
            timer6.PT := T#1000ms;
            timer6();
            IF timer6.Q = TRUE
                THEN
                iNoLoadFreqSetpoint := iNoLoadFreqSetpoint + iFreqChangeRate;
                timer6.IN := FALSE;
            END_IF
    
            ELSE
            ;
            END_IF
    END_ACTION
    

    6.3减频

    ACTION decFreq: 
        IF iNoLoadFreqSetpoint > iNoloadMinFreq
    
            THEN
            timer6.IN := TRUE;
            timer6.PT := T#1000ms;
            timer6();
            IF timer6.Q = TRUE
                THEN
                iNoLoadFreqSetpoint := iNoLoadFreqSetpoint - iFreqChangeRate;
                timer6.IN := FALSE;
            ELSE
                ;
            END_IF
        END_IF
    END_ACTION
    

    6.4复位

    ACTION Reset:
        bFaultLatch := FALSE;(*bFaultLatch xS073*)
        bStartFailed := FALSE;
        bStopFailed := FALSE;
        nSystemWarnWord1.12 := FALSE;
        bCmdResetPowerCabinet := TRUE;
    END_ACTION
    

    6.5紧急停车

    ACTION EmergencyStop:
        bCmdStartPowerUnit := FALSE;
        bFaultLatch := TRUE;
        nSystemWarnWord1.11 := TRUE;
        bCmdMainSwitch := TRUE;
    END_ACTION
    

    7.主程序代码

    PROGRAM _CYCLIC
        (* Insert code here *)
    (*  F_AtypeErrorConfirm();
        F_BtypeErrorConfirm();
        F_CtypeErrorConfirm();
        F_DtypeErrorConfirm();
        F_EtypeErrorConfirm();  *)
        (*故障判断*)
        ErrorConfirm;
    
    (*****************************故障类型判断*************************)
        fbError.IN1 := nPowerUnitWarnWord1;
        fbError.IN2 := nPowerUnitWarnWord1;
        fbError.IN3 := nPowerUnitWarnWord1;
    
        fbError.IN4 := nSystemWarnWord1;
        fbError.IN5 := nSystemWarnWord2;
        fbError.IN6 := nSystemWarnWord3;  
        fbError.IN7 := nSystemWarnWord4;
    
        fbError();
        eErrorType := fbError.OUT1;
        bFaultLatch := fbError.OUT2;
        IF eErrorType <> 0     
            THEN
            bStatusFault := TRUE;
        ELSE
            ;
        END_IF
        (***************************状态判断*******************************)
        fbStatusJudge.IN_bEngine1SwitchStatus := bEngine1SwitchStatus;
        fbStatusJudge.IN_bEngine2SwitchStatus := bEngine2SwitchStatus;
        fbStatusJudge.IN_bEngine3SwitchStatus := bEngine3SwitchStatus;
        fbStatusJudge.IN_bMainSwitchStatus := bMainSwitchStatus;
        fbStatusJudge.IN_bStatusFault := bStatusFault;
        fbStatusJudge.IN_bStatusRun := bStatusRun;
        fbStatusJudge.IN_eParallelStatus := eParallelStatus;
        fbStatusJudge.IN_iGenStartSpeed := iGenStartSpeed;
        fbStatusJudge.IN_iSpeedActual := iSpeedActual;
        fbStatusJudge.IN_nPowerUnitStatusWord := nPowerUnitStatusWord;
    
        fbStatusJudge();    
        bStatusReady := fbStatusJudge.OUT_bStatusReady;
        bStatusRun := fbStatusJudge.OUT_bStatusRun;
        (*************************故障处理********************************)
        CASE test OF
    
            1:
    
                StopAxis;                  
            2:
                IF eParallelStatus = ShaftGenOnOnly
                    THEN
                    StartBackupGen;
                ELSE
                    StopAxis;                   
                END_IF 
            3:
                IF eParallelStatus = ShaftGenOnOnly
                    THEN
                    StartBackupGen;
                ELSE;
                END_IF
            4:
                StartBackupGen ;
            ELSE
                ;
        END_CASE;
    
        (***********************起动************************************)
        IF
            bStart=TRUE AND bStatusReady =TRUE AND bStop = FALSE
            THEN
            Start;
        END_IF
        (***********************停止************************************)
        IF bStop = TRUE AND bStatusRun = TRUE 
            THEN 
            StopAxis;
        END_IF
        (**********************增频或降频*******************************)
        IF bFreq_Add
            THEN
            addFreq;
        END_IF
        IF bFreq_Dec
            THEN
            decFreq;
        END_IF
        (**********************复位*************************************)
        IF bReset
            THEN
            Reset;
        END_IF 
        (**********************紧急停车*********************************)
        IF bEmergencyStop
            THEN
            EmergencyStop;
        END_IF
    END_PROGRAM
    
  • 相关阅读:
    python日志设置[logging]
    python异常处理
    python可迭代对象、迭代器、生成器
    python字典操作
    python列表和元组的操作
    python字符串操作
    python深拷贝和浅拷贝
    python时间和日期的处理
    ssh
    SSH安全外壳协议
  • 原文地址:https://www.cnblogs.com/zhengkang/p/5712434.html
Copyright © 2011-2022 走看看