Âåðñèÿ äëÿ ïå÷àòè

PCS7: FB1869 Analog input driver

Äàòà: 2017-08-08

Äîáàâëåíî: komatic

Òåìà: SCL



dosing



Áëîê îáðàáàòûâàåò âñå âîçìîæíûå òèïû àíàëîãîâûõ ñèãíàëîâ îò ìîäóëåé Siemens.



Èñõîäíèê áëîêà èç íîâîé áèáëèîòåêè PCS 7 Advanced Process Library v82sp1



analog input





Name: FB1869
Symbolic Name: Pcs7AnIn
Symbol Comment: Analog input driver
Family: Channel
Version: 8.7
Author: AdvLib82
Last modified: 12/09/2015
Use: UDT15,UDT16,UDT18
Size: 10878 bytes
Signature: generiert vom SCL Übersetzer Version: SCLCOMP K05.03.08.02_01.02.00.01 release





FUNCTION_BLOCK FB11869
TITLE ='Analog input driver'
{ S7_driver := 'chn'; S7_tasklist := 'OB100' }
AUTHOR : AdvLib82
FAMILY : Channel
NAME : Pcs7AnIn
VERSION : '8.7'
 
 
VAR_INPUT
  PV_In { S7_edit := 'signal' }: WORD ;    //Input value
  Scale { S7_edit := 'para'; S7_xedit := 'High,para;Low,para;' }: STRUCT     //Range of process value
   High : REAL  := 1.000000e+002;    // High Value
   Low : REAL ;    // Low Value
  END_STRUCT ;   
  PV_InUnit { S7_edit := 'para'; S7_enum := 'true' }: INT  := 1001;    //Unit of process value
  Feature { S7_visible := 'false' }: STRUCT     //Status of various features
   Bit0 : BOOL ;    //Reserved
   Bit1 : BOOL ;    //Reserved
   Bit2 : BOOL ;    //Reserved
   Bit3 : BOOL ;    //Reserved
   Bit4 : BOOL ;    //Reserved
   Bit5 : BOOL ;    //1 = Low cut off input value
   Bit6 : BOOL ;    //Reserved
   Bit7 : BOOL ;    //Reserved
   Bit8 : BOOL ;    //Reserved
   Bit9 : BOOL ;    //Reserved
   Bit10 : BOOL ;    //1 = Condition Monitoring
   Bit11 : BOOL ;    //Reserved
   Bit12 : BOOL ;    //Reserved
   Bit13 : BOOL ;    //Reserved
   Bit14 : BOOL ;    //Reserved
   Bit15 : BOOL ;    //Reserved
   Bit16 : BOOL ;    //Reserved
   Bit17 : BOOL ;    //Reserved
   Bit18 : BOOL ;    //Reserved
   Bit19 : BOOL ;    //Reserved
   Bit20 : BOOL ;    //Reserved
   Bit21 : BOOL ;    //Reserved
   Bit22 : BOOL ;    //Reserved
   Bit23 : BOOL ;    //Reserved
   Bit24 : BOOL ;    //Reserved
   Bit25 : BOOL ;    //Reserved
   Bit26 : BOOL ;    //Reserved
   Bit27 : BOOL ;    //Reserved
   Bit28 : BOOL  := TRUE;    //1 = Bad Value
   Bit29 : BOOL ;    //1 = Substitute value
   Bit30 : BOOL ;    //1 = Hold last value
   Bit31 : BOOL ;    //Reserved
  END_STRUCT ;   
  NamurOff { S7_visible := 'false' }: BOOL ;    //1=NAMUR limits off
  HighLimit { S7_edit := 'para'; S7_visible := 'false' }: REAL  := 2.150000e+001;    //High limit of input value(4-20mA)
  LowLimit { S7_edit := 'para'; S7_visible := 'false' }: REAL  := 3.300000e+000;    //Low limit of input value(4-20mA)
  SimOn { S7_edit := 'para' }: STRUCT     //1=Simulation active
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  SimPV_In { S7_edit := 'para' }: STRUCT     //Simulation value
   Value : REAL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  SubsPV_In { S7_edit := 'para' }: REAL ;    //Substitution value
  DeltaVal { S7_visible := 'false' }: REAL ;    //Delta value(PV.value - LastValidValue)
  CountLim { S7_edit := 'para'; S7_visible := 'false' }: INT ;    //Restart counter limit
  MS_Release { S7_visible := 'true' }: STRUCT     //Maintenance release
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  MS : DWORD ;    //Maintenance state
  MS_Ext { S7_link := 'true' }: DWORD ;    //External Maintenance state
  TextRef { S7_link := 'true' }: WORD ;    //Text reference external messages
  FlutEn { S7_edit := 'para'; S7_visible := 'false' }: BOOL ;    //1=Fluttersupress enable
  FlutTmIn { S7_edit := 'para'; S7_visible := 'false' }: INT ;    //Fluttersupress time
  FrznEn { S7_edit := 'para'; S7_visible := 'false' }: BOOL ;    //Enable monitoring for frozen input value (In)
  FrznTmIn { S7_edit := 'para'; S7_visible := 'false'; S7_dynamic := 'true' }: REAL ;    //Monitoring time of frozen imput value [s]
  DelMsgEn { S7_edit := 'para'; S7_visible := 'false' }: BOOL ;    //Reserve 
  DelMsgTm { S7_edit := 'para'; S7_visible := 'false' }: INT ;    //Reserve 
  SampleTime { S7_visible := 'false'; S7_link := 'false'; S7_sampletime := 'true'; S7_param := 'false' }: REAL  := 1.000000e-001;    //Sample Time[s]
  LowCutOff { S7_edit := 'para'; S7_visible := 'false' }: REAL ;    //Low cut off input value
END_VAR
VAR_OUTPUT
  Bad : STRUCT     //1=Bad process value
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  PV_Out : STRUCT     //Process value incl. ST
   Value : REAL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  PV_OutUnit : INT ;    //Unit of process value
  ScaleOut : STRUCT     //Range of process value
   High : REAL  := 1.000000e+002;    // High Value
   Low : REAL ;    // Low Value
  END_STRUCT ;   
  PV_HiAct { S7_visible := 'false' }: STRUCT     //1=Input value high limit failure
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  PV_LoAct { S7_visible := 'false' }: STRUCT     //1=Input value low limit failure
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  SimAct { S7_visible := 'false' }: STRUCT     //1=Simulation active
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  ModErr { S7_visible := 'false' }: STRUCT     //1=Higher level failure
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  FrznVal { S7_visible := 'false' }: STRUCT     //frozen input value
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  RemMonTm { S7_visible := 'false' }: REAL ;    //remaining monitoring time
  ErrorNum { S7_visible := 'false' }: INT  := -1;    //Parameter error
  OosAct { S7_dynamic := 'true' }: STRUCT     //Field device out of service, maintenance in pogress
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  PV_LcoAct { S7_visible := 'false' }: STRUCT     //1=Low cut off limit failure
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  MS_Req : STRUCT     //Maintenance request
   Value : BOOL ;    // Value
   ST : BYTE  := B#16#80;    // Signal Status
  END_STRUCT ;   
  MS_Dev : DWORD ;    //Maintenance State 
END_VAR
VAR_IN_OUT
  Mode : DWORD ;    //Quality and mode
  DataXchg : DWORD ;    //Data exchange
  DataXchg1 : DWORD ;    //Data exchange
  MS_Xchg : DWORD ;    //Maintenance State exchange
END_VAR
VAR
  LastValidValue : REAL ;   
  LastValidValue1 : REAL ;   
  LastPV_In : WORD ;   
  LastBad : BOOL ;   
  DeltaOn : BOOL ;   
  CntRes : INT ;    //Restart counter
  _r : ARRAY  [0 .. 7 ] OF BYTE ;   
  SxFirstStart : BOOL  := TRUE;    //First start
  LastByQuality : BYTE ;   
END_VAR
VAR_TEMP
  F_4mA : BOOL ;    //Fehler bei den NAMUR- oder Ersatz-Grenzen
  HiLoUngl : BOOL ;    //High Range = Low Range
  M4mA : BOOL ;    //Hilfsmerker 4 bis 20 mA
  Status : BOOL ;    //WertStatus des Analogwertes
  StatusM : BOOL ;    //Status Bereichdes Analogwertes
  BadAkt : BOOL ;    //Status Messbereichkodierung
  Except0_10V : BOOL ;    //Ausnahme Bereich 0-10V
  SubOn : BOOL ;    //true = substitution on error active
  LaValOn : BOOL ;    //true = last valid value on error active
  xFeatBadValue : BOOL ;    //1=Bad Value will be issued
  xInEquLastIn : BOOL ;    //PV_In is equal to last PV_In
  xFrznMonEn : BOOL ;    //monitoring of frozen values is on
  xMode80 : BOOL ;    //MODE = 16#80xxxxxx
  ByQuality : BYTE ;   
  Low_sc : INT ;    //Untere physische Grenze
  UnderCnt : INT ;    //Untersteuergrenze
  OverCnt : INT ;    //Übersteuergrenze
  InVal : INT ;    //Analogeingang word
  InValR : REAL ;    //Analogeingang in mA real
  LoScalR : REAL ;   
  FactPh : REAL ;    //Faktor für Messwertberechnung
  LastValT : REAL ;   
  FlutTm : DWORD ;    //Flatterunterdrückungszeit
  Overflow : INT ;    //Überlaufgrenze
  DeltaUnd : INT ;    //Differenz Unterlaufgrenze
  xFeatLowCutOff : BOOL ;    //1=LowCutOff enabled
  MS_AS : DWORD ;    //Maintenance State AS
  xConditionMonitoring : BOOL ;    //1=ConditionMonitoring
END_VAR
BEGIN
 
IF SxFirstStart THEN
    SxFirstStart:=FALSE;
    ErrorNum:=0;
END_IF;
 
Except0_10V:=FALSE;
xFeatLowCutOff:=Feature.Bit5;
xFeatBadValue:=Feature.Bit28;
xConditionMonitoring:=Feature.Bit10;
IF NOT(((xFeatBadValue) OR Feature.Bit29) OR Feature.Bit30) THEN
    xFeatBadValue:=TRUE;
END_IF;
 
IF ((((((((((Mode AND DW#16#FF00)=DW#16#700) AND ((Mode AND DW#16#FF)<>DW#16#C)) OR
    ((Mode AND DW#16#FF00)=DW#16#800)) OR
    ((Mode AND DW#16#FF00)=DW#16#900)) OR
    ((Mode AND DW#16#FF00)=DW#16#A00)) OR
    ((Mode AND DW#16#FF00)=DW#16#B00)) OR
    ((Mode AND DW#16#FF00)=DW#16#C00)) OR
    ((Mode AND DW#16#FF00)=DW#16#D00)) OR
    ((Mode AND DW#16#FF00)=DW#16#E00)) OR
    ((Mode AND DW#16#FF00)=DW#16#F00)
THEN
    IF DW#16#800000=(Mode AND DW#16#800000) THEN
        PV_InUnit:=1002;
    END_IF;
END_IF;
ScaleOut.High:=Scale.High;
ScaleOut.Low:=Scale.Low;
PV_OutUnit:=PV_InUnit;
 
OosAct.Value:=(((MS AND DW#16#F000000)=DW#16#5000000) OR
               ((MS AND DW#16#F000000)=DW#16#6000000)) OR
               ((MS AND DW#16#F000000)=DW#16#7000000);
 
IF xConditionMonitoring THEN
    DataXchg1:=DataXchg1 OR DW#16#1;
ELSE
DataXchg1:=DataXchg1 AND DW#16#FFFFFFFE;
END_IF;
 
IF MS_Release.Value THEN
    DataXchg:=DataXchg OR DW#16#1;
ELSE
    DataXchg:=DataXchg AND DW#16#FFFFFFFE;
END_IF;
 
MS_Dev:=MS;
DataXchg1:=DataXchg1 AND DW#16#FFFF;
MS_Xchg:=DW#16#0;
 
IF xConditionMonitoring THEN
    MS_Xchg:=MS_Ext;
    DataXchg1:=SHL(IN:=WORD_TO_DWORD(TextRef),N:=16) OR DataXchg1;
END_IF;
 
MS_Req.Value:=DWORD_TO_BOOL(SHR(IN:=DataXchg1 AND DW#16#2,N:=1))<>0;
 
 
IF FlutTmIn>255 THEN
    FlutTmIn:=255;
END_IF;
 
IF FlutEn THEN
    FlutTm:=SHL(IN:=INT_TO_DWORD(FlutTmIn),N:=24);
    DataXchg:=DataXchg AND DW#16#FFFFFF;
    DataXchg:=DataXchg OR FlutTm;
    DataXchg:=DataXchg OR DW#16#2;
ELSE
    DataXchg:=DataXchg AND DW#16#FFFFFD;
END_IF;
 
xMode80:=DW#16#80000000=(Mode AND DW#16#FF000000);
Status:=((DW#16#20000000=(Mode AND DW#16#FF000000)) OR xMode80) OR SimOn.Value;
xFrznMonEn:=((FrznTmIn>0.0) AND xMode80) AND FrznEn;
ModErr.Value:=DW#16#40000000=(Mode AND DW#16#FF000000);
SubOn:=(NOT(xFeatBadValue)) AND Feature.Bit29;
LaValOn:=(NOT((Feature.Bit29) OR xFeatBadValue)) AND Feature.Bit30;
F_4mA:=FALSE;
LoScalR:=Scale.Low;
Low_sc:=-27648;
UnderCnt:=-27648;
OverCnt:=27648;
Overflow:=32512;
 
IF DWORD_TO_INT(Mode AND DW#16#FFFF)=264 THEN
    DeltaUnd:=1;
ELSE
    DeltaUnd:=4865;
END_IF;
M4mA:=FALSE;
InValR:=Scale.High-LoScalR;
IF InValR=0.0 THEN
    HiLoUngl:=FALSE;
    InValR:=1.0;
    LoScalR:=0.0;
    Low_sc:=0;
    FactPh:=1.000000e-001;   
ELSE
    HiLoUngl:=TRUE;
    FactPh:=1.808449e-005;
END_IF;
InVal:=DWORD_TO_INT(Mode AND DW#16#FFFF);
StatusM:=FALSE;
 
 
CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF00) OF
    256 :
        CASE InVal OF
            257 :
                IF NOT HiLoUngl THEN
                    FactPh:=2.893518e-003;
                END_IF;
            258 :
                IF NOT HiLoUngl THEN
                    FactPh:=9.042245e-003;
                END_IF;
            259 :
                IF NOT HiLoUngl THEN
                    FactPh:=1.808449e-002;
                END_IF;
            260 :
                IF NOT HiLoUngl THEN
                    FactPh:=3.616898e-005;
                END_IF;
            261 :
                IF NOT HiLoUngl THEN
                    FactPh:=9.042245e-005;
                END_IF;
            262 :
                IF NOT HiLoUngl THEN
                    FactPh:=1.808449e-004;
                END_IF;
            263 :
                UnderCnt:=0;
                IF HiLoUngl THEN
                    Low_sc:=0;
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=1.446759e-004;
                    Low_sc:=-6912;
                END_IF;   
            264 :
                UnderCnt:=0;
                Low_sc:=0;
                Except0_10V:=TRUE;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=3.616898e-004;
                END_IF;   
            265 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=3.616898e-004;
                END_IF;
            266 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=9.042245e-004;
                END_IF;
            267 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=1.808449e-003;
                END_IF;    
            268 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=3.616898e-003;
                END_IF;   
            269 :
                Low_sc:=0;
                UnderCnt:=0;
                FactPh:=3.616898e-005;
            ELSE:
                Status:=FALSE;
                StatusM:=TRUE;
        END_CASE;
    512 :   
        CASE InVal OF
            512 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=1.157407e-004;
                END_IF;   
            513 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=3.616898e-004;
                END_IF;   
            514 :
                Low_sc:=0;
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=7.233796e-004;
                END_IF;   
            515 :
                M4mA:=TRUE;
                UnderCnt:=0;
                IF HiLoUngl THEN
                    Low_sc:=0;
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=5.787037e-004;
                    Low_sc:=-6912;
                END_IF;   
            516 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=7.233796e-004;
                END_IF;   
            517 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=1.808449e-004;
                END_IF;   
            ELSE
                Status:=FALSE;
                StatusM:=TRUE;
        END_CASE;   
    768 :   
        CASE InVal OF
            770 :
                IF HiLoUngl THEN
                    Low_sc:=0;
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=7.233796e-004;
                END_IF;
            771 :
                M4mA:=TRUE;
                UnderCnt:=0;
                IF HiLoUngl THEN
                    Low_sc:=0;
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=5.787037e-004;
                    Low_sc:=-6912;
                END_IF;
            772 :
                IF NOT(HiLoUngl) THEN
                    FactPh:=7.233796e-004;
                END_IF;
            ELSE
                Status:=FALSE;
                StatusM:=TRUE;
        END_CASE;   
    1024,1280,1536 :   
        Low_sc:=0;
        CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF) OF
            0 :
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=1.736111e-003;
                END_IF;
            2 :
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=5.425347e-003;               
                END_IF;
            4 :
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=1.085069e-002;
                END_IF;
            6 :
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=2.170139e-002;            
                END_IF;   
            7 :                   
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=1.085069e-001;       
                END_IF;
            8 :                   
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=2.170139e-001;
                END_IF;
            14 :               
                UnderCnt:=0;
                IF HiLoUngl THEN
                    FactPh:=3.616898e-005;
                ELSE
                    FactPh:=3.616898e-002;
                END_IF;
            15 :
                FactPh:=1.0;
                InValR:=1.0;
            ELSE
                Status:=FALSE;
                StatusM:=TRUE;
        END_CASE;   
    1792 :   
        Low_sc:=0;
        IF (Mode AND DW#16#100000)=DW#16#100000 THEN
            FactPh:=1.000000e-001;
            IF PV_InUnit=1002 THEN
                CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF) OF
                    0 :
                        UnderCnt:=320;
                        OverCnt:=27865;
                        Overflow:=32767;
                        DeltaUnd:=1841;
                    1 :
                        UnderCnt:=-4540;
                        OverCnt:=23720;
                        Overflow:=28221;
                        DeltaUnd:=4541;
                    2 :
                        UnderCnt:=-4540;
                        OverCnt:=18320;
                        Overflow:=21921;
                        DeltaUnd:=4541;
                    3 :
                        OverCnt:=32162;
                        UnderCnt:=-580;
                        Overflow:=32767;
                        DeltaUnd:=2741;
                    4 :
                        OverCnt:=32162;
                        UnderCnt:=-580;
                        Overflow:=32767;
                        DeltaUnd:=2741;
                    5 :
                        OverCnt:=21920;
                        UnderCnt:=-3460;
                        Overflow:=26421;
                        DeltaUnd:=3461;
                    6 :
                        OverCnt:=16520;
                        UnderCnt:=-3280;
                        Overflow:=21021;
                        DeltaUnd:=3281;
                    7 :
                        OverCnt:=7520;
                        UnderCnt:=-4540;
                        Overflow:=10041;
                        DeltaUnd:=4541;
                    8 :
                        OverCnt:=25016;
                        UnderCnt:=-4540;
                        Overflow:=29517;
                        DeltaUnd:=4541;
                    9 :
                        OverCnt:=11120;
                        UnderCnt:=-3280;
                        Overflow:=15621;
                        DeltaUnd:=3281;
                    10 :
                        OverCnt:=27865;
                        UnderCnt:=320;
                        Overflow:=32767;
                        DeltaUnd:=1841;
                    11 :
                        OverCnt:=14720;
                        UnderCnt:=-3280;
                        Overflow:=19221;
                        DeltaUnd:=3281;
                    ELSE   
                        Status:=FALSE;
                        StatusM:=TRUE;
                END_CASE;   
            ELSE
                CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF) OF
                    0 :
                        UnderCnt:=0;
                        OverCnt:=18200;
                        Overflow:=20701;
                        DeltaUnd:=1201;
                    1 :
                        UnderCnt:=-2700;
                        OverCnt:=13000;
                        Overflow:=15501;
                        DeltaUnd:=2701;
                    2 :
                        UnderCnt:=-2700;
                        OverCnt:=10000;
                        Overflow:=12001;
                        DeltaUnd:=2701;
                    3 :
                        OverCnt:=17690;
                        UnderCnt:=-500;
                        Overflow:=20191;
                        DeltaUnd:=1701;
                    4 :
                        OverCnt:=17690;
                        UnderCnt:=-500;
                        Overflow:=20191;
                        DeltaUnd:=1701;
                    5 :
                        OverCnt:=12000;
                        UnderCnt:=-2100;
                        Overflow:=14501;
                        DeltaUnd:=2101;
                    6 :
                        OverCnt:=9000;
                        UnderCnt:=-2000;
                        Overflow:=11501;
                        DeltaUnd:=2001;
                    7 :
                        OverCnt:=4000;
                        UnderCnt:=-2700;
                        Overflow:=5401;
                        DeltaUnd:=2701;
                    8 :
                        OverCnt:=13720;
                        UnderCnt:=-2700;
                        Overflow:=16221;
                        DeltaUnd:=2701;
                    9 :
                        OverCnt:=6000;
                        UnderCnt:=-2000;
                        Overflow:=8501;
                        DeltaUnd:=2001;
                    10 :
                        OverCnt:=23150;
                        UnderCnt:=0;
                        Overflow:=25001;
                        DeltaUnd:=1201;
                    11 :
                        OverCnt:=8000;
                        UnderCnt:=-2000;
                        Overflow:=10501;
                        DeltaUnd:=2001;
                    ELSE   
                        Status:=FALSE;
                        StatusM:=TRUE;
                END_CASE;
            END_IF;       
        ELSE
            CASE InVal OF
                1804 :
                    M4mA:=TRUE;
                    UnderCnt:=0;
                    IF HiLoUngl THEN
                        FactPh:=3.616898e-005;
                    ELSE
                        FactPh:=5.787037e-004;
                        Low_sc:=-6912;
                    END_IF;   
                ELSE   
                    Status:=FALSE;
                    StatusM:=TRUE;
            END_CASE;
        END_IF;   
    2048,2304,3840 :
        Low_sc:=0;
        IF PV_InUnit=1002 THEN
            CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF) OF
                0 :
                    UnderCnt:=-18400;
                    OverCnt:=26600;
                    FactPh:=1.000000e-002;
                    Overflow:=31101;
                    DeltaUnd:=22901;
                1 :
                    OverCnt:=28000;
                    UnderCnt:=-7600;
                    FactPh:=1.000000e-002;
                    Overflow:=32767;
                    DeltaUnd:=15701;
                2,3,4,5,85,87,89,91 :
                    OverCnt:=15620;
                    UnderCnt:=-3280;
                    FactPh:=1.000000e-001;
                    Overflow:=18321;
                    DeltaUnd:=4055;
                6 :
                    OverCnt:=4820;
                    UnderCnt:=-760;
                    FactPh:=1.000000e-001;
                    Overflow:=5631;
                    DeltaUnd:=1571;
                7,8,9,20,22,24,26 :
                    UnderCnt:=-18400;
                    OverCnt:=26600;
                    FactPh:=1.000000e-002;
                    Overflow:=31101;
                    DeltaUnd:=22901;
                10,13,17,19 :
                    IF (Mode AND DW#16#100000)=DW#16#100000 THEN
                        OverCnt:=5720;
                        UnderCnt:=-400;
                        FactPh:=1.000000e-001;
                        Overflow:=6671;
                        DeltaUnd:=527;
                    ELSE
                        OverCnt:=28000;
                        UnderCnt:=-7600;
                        FactPh:=1.000000e-002;
                        Overflow:=32767;
                        DeltaUnd:=15701;
                    END_IF;
                11,12,16,18 :
                    IF (Mode AND DW#16#100000)=DW#16#100000 THEN
                        OverCnt:=3470;
                        UnderCnt:=-670;
                        FactPh:=1.000000e-001;
                        Overflow:=4034;
                        DeltaUnd:=846;
                    ELSE
                        OverCnt:=4820;
                        UnderCnt:=-760;
                        FactPh:=1.000000e-001;
                        Overflow:=5631;
                        DeltaUnd:=1571;
                    END_IF;
                14 :
                    OverCnt:=28000;
                    UnderCnt:=-5800;
                    FactPh:=1.000000e-002;
                    Overflow:=32767;
                    DeltaUnd:=7601;
                15 :
                    OverCnt:=5000;
                    UnderCnt:=-3280;
                    FactPh:=1.000000e-001;
                    Overflow:=5937;
                    DeltaUnd:=4001;
                21,23,25,27 :
                    OverCnt:=20120;
                    UnderCnt:=-4360;
                    FactPh:=1.000000e-001;
                    Overflow:=23631;
                    DeltaUnd:=4598;
                29,31,33 :
                    OverCnt:=3920;
                    UnderCnt:=-580;
                    FactPh:=1.000000e-001;
                    Overflow:=4641;
                    DeltaUnd:=761;
                157,159,161 :
                    OverCnt:=3920;
                    UnderCnt:=-3280;
                    FactPh:=1.000000e-001;
                    Overflow:=4641;
                    DeltaUnd:=4055;
                28,30,32 :
                    OverCnt:=28000;
                    UnderCnt:=-5800;
                    FactPh:=1.000000e-002;
                    Overflow:=32767;
                    DeltaUnd:=7601;
                34 :
                    OverCnt:=28000;
                    UnderCnt:=-7600;
                    FactPh:=1.000000e-002;
                    Overflow:=32767;
                    DeltaUnd:=15701;
                35 :
                    OverCnt:=3560;
                    UnderCnt:=-760;
                    FactPh:=1.000000e-001;
                    Overflow:=4144;
                    DeltaUnd:=1571;
                ELSE   
                    Status:=FALSE;
                    StatusM:=TRUE;
            END_CASE;
        ELSE
            CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF) OF
                0 :
                    IF (Mode AND DW#16#F00000)=DW#16#300000 THEN
                        UnderCnt:=-20000;
                        OverCnt:=27648;
                        FactPh:=1.000000e-002;
                        Overflow:=32513;
                        DeltaUnd:=24001;
                    ELSE
                        UnderCnt:=-12000;
                        OverCnt:=13000;
                        FactPh:=1.000000e-002;
                        Overflow:=15501;
                        DeltaUnd:=14501;
                    END_IF;
                1 :
                    OverCnt:=25000;
                    UnderCnt:=-6000;
                    FactPh:=1.000000e-002;
                    Overflow:=29501;
                    DeltaUnd:=10501;
                2,3,4,5,85,87,89,91 :
                    IF (Mode AND DW#16#F00000)=DW#16#300000 THEN
                        OverCnt:=8500;
                        UnderCnt:=-2000;
                        FactPh:=1.000000e-001;
                        Overflow:=13001;
                        DeltaUnd:=2401;
                    ELSE
                        OverCnt:=8500;
                        UnderCnt:=-2000;
                        FactPh:=1.000000e-001;
                        Overflow:=10001;
                        DeltaUnd:=2431;
                    END_IF;   
                6 :
                    OverCnt:=2500;
                    UnderCnt:=-600;
                    FactPh:=1.000000e-001;
                    Overflow:=2951;
                    DeltaUnd:=1051;
                7,8,9,20,22,24,26 :
                    IF (Mode AND DW#16#F00000)=DW#16#300000 THEN
                        UnderCnt:=-20000;
                        OverCnt:=27648;
                        FactPh:=1.000000e-002;
                        Overflow:=32513;
                        DeltaUnd:=24001;
                    ELSE
                        UnderCnt:=-12000;
                        OverCnt:=13000;
                        FactPh:=1.000000e-002;
                        Overflow:=15501;
                        DeltaUnd:=14501;
                    END_IF;
                10,13,17,19 :
                    IF (Mode AND DW#16#100000)=DW#16#100000 THEN
                        OverCnt:=3000;
                        UnderCnt:=-400;
                        FactPh:=1.000000e-001;
                        Overflow:=3529;
                        DeltaUnd:=471;
                    ELSE
                        OverCnt:=25000;
                        UnderCnt:=-6000;
                        FactPh:=1.000000e-002;
                        Overflow:=29501;
                        DeltaUnd:=10501;
                    END_IF;   
                11,12,16,18 :
                    IF (Mode AND DW#16#100000)=DW#16#100000 THEN
                        OverCnt:=1750;
                        UnderCnt:=-550;
                        FactPh:=1.000000e-001;
                        Overflow:=2064;
                        DeltaUnd:=648;
                    ELSE
                        OverCnt:=2500;
                        UnderCnt:=-600;
                        FactPh:=1.000000e-001;
                        Overflow:=2951;
                        DeltaUnd:=1051;
                    END_IF;   
                14 :
                    OverCnt:=15000;
                    UnderCnt:=-5000;
                    FactPh:=1.000000e-002;
                    Overflow:=18001;
                    DeltaUnd:=6001;
                15 :
                    OverCnt:=2600;
                    UnderCnt:=-2000;
                    FactPh:=1.000000e-001;
                    Overflow:=3121;
                    DeltaUnd:=2401;
                21,23,25,27 :
                    OverCnt:=11000;
                    UnderCnt:=-2600;
                    FactPh:=1.000000e-001;
                    Overflow:=12951;
                    DeltaUnd:=2733;
                29,31,33 :
                    OverCnt:=2000;
                    UnderCnt:=-500;
                    FactPh:=1.000000e-001;
                    Overflow:=2401;
                    DeltaUnd:=601;
                157,159,161 :
                    OverCnt:=2000;
                    UnderCnt:=-2000;
                    FactPh:=1.000000e-001;
                    Overflow:=2401;
                    DeltaUnd:=2401;
                28,30,32 :
                    OverCnt:=15000;
                    UnderCnt:=-5000;
                    FactPh:=1.000000e-002;
                    Overflow:=18001;
                    DeltaUnd:=6001;
                34 :
                    OverCnt:=18000;
                    UnderCnt:=-6000;
                    FactPh:=1.000000e-002;
                    Overflow:=21241;
                    DeltaUnd:=10501;
                35 :
                    OverCnt:=1800;
                    UnderCnt:=-600;
                    FactPh:=1.000000e-001;
                    Overflow:=2125;
                    DeltaUnd:=1051;
                ELSE   
                    Status:=FALSE;
                    StatusM:=TRUE;
            END_CASE;
        END_IF;       
    2560,2816,3072,3328,3584 :
        Low_sc:=0;
        FactPh:=1.000000e-001;
        IF PV_InUnit=1002 THEN
            CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF) OF
                0 :
                    UnderCnt:=320;
                    OverCnt:=27865;
                    Overflow:=32767;
                    DeltaUnd:=1841;
                1 :
                    UnderCnt:=-4540;
                    OverCnt:=23720;
                    Overflow:=28221;
                    DeltaUnd:=4541;
                2 :
                    UnderCnt:=-4540;
                    OverCnt:=18320;
                    Overflow:=21921;
                    DeltaUnd:=4541;
                3 :
                    OverCnt:=32162;
                    UnderCnt:=-580;
                    Overflow:=32767;
                    DeltaUnd:=2741;
                4 :
                    OverCnt:=32162;
                    UnderCnt:=-580;
                    Overflow:=32767;
                    DeltaUnd:=2741;
                5 :
                    OverCnt:=21920;
                    UnderCnt:=-3460;
                    Overflow:=26421;
                    DeltaUnd:=3461;
                6 :
                    OverCnt:=16520;
                    UnderCnt:=-3280;
                    Overflow:=21021;
                    DeltaUnd:=3281;
                7 :
                    OverCnt:=7520;
                    UnderCnt:=-4540;
                    Overflow:=10041;
                    DeltaUnd:=4541;
                8 :
                    OverCnt:=25016;
                    UnderCnt:=-4540;
                    Overflow:=29517;
                    DeltaUnd:=4541;
                9 :
                    OverCnt:=11120;
                    UnderCnt:=-3280;
                    Overflow:=15621;
                    DeltaUnd:=3281;
                10 :
                    OverCnt:=27865;
                    UnderCnt:=320;
                    Overflow:=32767;
                    DeltaUnd:=1841;
                11 :               
                    OverCnt:=14720;
                    UnderCnt:=-3280;
                    Overflow:=19221;
                    DeltaUnd:=3281;
                ELSE   
                    Status:=FALSE;
                    StatusM:=TRUE;
            END_CASE;
        ELSE
            CASE WORD_TO_INT(INT_TO_WORD(InVal) AND W#16#FF) OF
                0 :
                    IF (Mode AND DW#16#F00000)=DW#16#300000 THEN
                        UnderCnt:=0;
                        OverCnt:=18200;
                        Overflow:=20701;
                        DeltaUnd:=1501;
                    ELSE
                        UnderCnt:=0;
                        OverCnt:=18200;
                        Overflow:=20701;
                        DeltaUnd:=1201;
                    END_IF;
                1 :
                    UnderCnt:=-2700;
                    OverCnt:=13000;
                    Overflow:=15501;
                    DeltaUnd:=2701;
                2 :
                    UnderCnt:=-2700;
                    OverCnt:=10000;
                    Overflow:=12001;
                    DeltaUnd:=2701;
                3 :
                    OverCnt:=17690;
                    UnderCnt:=-500;
                    Overflow:=20191;
                    DeltaUnd:=1701;
                4 :
                    IF (Mode AND DW#16#F00000)=DW#16#300000 THEN
                        OverCnt:=17690;
                        UnderCnt:=-500;
                        Overflow:=18501;
                        DeltaUnd:=1701;
                    ELSE
                        OverCnt:=17690;
                        UnderCnt:=-500;
                        Overflow:=20191;
                        DeltaUnd:=1701;
                    END_IF;   
                5 :
                    IF (Mode AND DW#16#F00000)=DW#16#300000 THEN
                        OverCnt:=12000;
                        UnderCnt:=-2100;
                        Overflow:=13601;
                        DeltaUnd:=2101;
                    ELSE
                        OverCnt:=12000;
                        UnderCnt:=-2100;
                        Overflow:=14501;
                        DeltaUnd:=2101;
                    END_IF;   
                6 :
                    OverCnt:=9000;
                    UnderCnt:=-2000;
                    Overflow:=11501;
                    DeltaUnd:=2001;
                7 :
                    OverCnt:=4000;
                    UnderCnt:=-2700;
                    Overflow:=5401;
                    DeltaUnd:=2701;
                8 :
                    OverCnt:=13720;
                    UnderCnt:=-2700;
                    Overflow:=16221;
                    DeltaUnd:=2701;
                9 :
                    OverCnt:=6000;
                    UnderCnt:=-2000;
                    Overflow:=8501;
                    DeltaUnd:=2001;
                10 :
                    OverCnt:=23150;
                    UnderCnt:=0;
                    Overflow:=25001;
                    DeltaUnd:=1201;
                11 :
                    OverCnt:=8000;
                    UnderCnt:=-2000;
                    Overflow:=10501;
                    DeltaUnd:=2001;
                ELSE   
                    Status:=FALSE;
                    StatusM:=TRUE;
            END_CASE;
        END_IF;
    ELSE   
        Status:=FALSE;
        StatusM:=TRUE;
END_CASE;
 
FactPh:=FactPh*InValR;
IF SimOn.Value THEN
    InValR:=((SimPV_In.Value-LoScalR)/FactPh)+INT_TO_REAL(Low_sc);
    Status:=TRUE;
    IF (InValR<3.276700e+004) AND (InValR>INT_TO_REAL(Low_sc-5120)) THEN
        InVal:=REAL_TO_INT(InValR);
    ELSE
        IF InValR>=3.276700e+004 THEN
            InVal:=32767;
        ELSE
            InVal:=Low_sc-5120;
        END_IF;
    END_IF;
    PV_LoAct.Value:=InVal<UnderCnt;
    PV_HiAct.Value:=InVal>OverCnt;
ELSE
    InVal:=WORD_TO_INT(PV_In);
    PV_LoAct.Value:=(InVal<UnderCnt) OR (DW#16#40000=(Mode AND DW#16#40000));
    PV_HiAct.Value:=(InVal>OverCnt) OR (DW#16#20000=(Mode AND DW#16#20000));
END_IF;
 
 
   
 
IF ((InVal<Overflow) AND (InVal>(Low_sc-DeltaUnd))) AND ((DW#16#0<>(Mode AND DW#16#FF000000)) OR SimOn.Value) THEN
    IF M4mA THEN
        InValR:=(INT_TO_REAL(InVal)*5.787037e-004)+4.000000e+000;
        IF NamurOff THEN
            F_4mA:=(InValR>HighLimit) OR (InValR<LowLimit);
        ELSE
            F_4mA:=(InValR>2.100000e+001) OR (InValR<3.600000e+000);
        END_IF;
    END_IF;   
ELSE   
    Status:=FALSE;
END_IF;
xInEquLastIn:=PV_In=LastPV_In;   
 
IF (NOT(xFrznMonEn)) OR SimOn.Value THEN
    FrznVal.Value:=FALSE;
    RemMonTm:=FrznTmIn;
ELSIF (FrznTmIn<SampleTime) OR (NOT(xInEquLastIn)) THEN
    FrznVal.Value:=xInEquLastIn;
    RemMonTm:=FrznTmIn;
ELSIF RemMonTm>0.0 THEN
    RemMonTm:=RemMonTm-SampleTime;
    IF NOT(xInEquLastIn) THEN
        FrznVal.Value:=FALSE;
        RemMonTm:=FrznTmIn;
    END_IF;
    IF (RemMonTm<=0.0) AND xInEquLastIn THEN
        FrznVal.Value:=TRUE;
        RemMonTm:=0.0;
    END_IF;
END_IF;
 
LastPV_In:=PV_In;
BadAkt:=((NOT(Status)) OR F_4mA) OR FrznVal.Value;
 
IF SimOn.Value THEN
    ByQuality:=B#16#60;
    InValR:=SimPV_In.Value;
    CntRes:=0;
ELSE
    IF BadAkt THEN
        IF SubOn THEN
            IF LaValOn THEN
                ByQuality:=B#16#0;
                InValR:=(DINT_TO_REAL(INT_TO_DINT(InVal)-INT_TO_DINT(Low_sc))*FactPh)+LoScalR;
            ELSE
                InValR:=SubsPV_In;
                ByQuality:=B#16#60;
            END_IF;   
        ELSE
            IF LaValOn THEN
                ByQuality:=B#16#60;
                InValR:=LastValidValue;
                LastValT:=LastValidValue1;
            ELSE
                ByQuality:=B#16#0;
                InValR:=(DINT_TO_REAL(INT_TO_DINT(InVal)-INT_TO_DINT(Low_sc))*FactPh)+LoScalR;
            END_IF;
        END_IF;
        CntRes:=0;
    ELSE
        InValR:=(DINT_TO_REAL(INT_TO_DINT(InVal)-INT_TO_DINT(Low_sc))*FactPh)+LoScalR;
        LastValT:=LastValidValue;
        ByQuality:=B#16#80;
        IF CountLim>0 THEN
            IF ((NOT(BadAkt)) AND LastBad) OR ((Mode AND DW#16#10000)=DW#16#10000) THEN
                IF CntRes=0 THEN
                    CntRes:=CountLim;
                    Mode:=Mode AND DW#16#FFFEFFFF;
                END_IF;
            END_IF;
            IF CntRes>0 THEN
                CntRes:=CntRes-1;
                BadAkt:=CntRes>0;
                IF BadAkt THEN
                    IF (LaValOn) OR SubOn THEN
                        ByQuality:=B#16#60;
                    ELSE
                        ByQuality:=B#16#0;
                    END_IF;
                    InValR:=LastValidValue;
                END_IF;
            END_IF;
        END_IF;
    END_IF;
    IF LaValOn THEN
        IF DeltaVal>0.0 THEN
            IF (ByQuality=B#16#60) OR ((ByQuality=B#16#80) AND (NOT(DeltaOn))) THEN
                IF ABS(InValR-LastValT)>DeltaVal THEN
                    InValR:=LastValT;
                    LastValidValue:=LastValT;
                    ByQuality:=B#16#60;
                    DeltaOn:=TRUE;
                ELSE
                    DeltaOn:=FALSE;
                END_IF;
            ELSE
                DeltaOn:=FALSE;
            END_IF;   
           
        ELSE
            DeltaOn:=FALSE;
        END_IF;
    END_IF;
END_IF;
 
IF (InVal<0) AND Except0_10V THEN
    ByQuality:=B#16#0;
    InValR:=Scale.Low;
    BadAkt:=TRUE;
END_IF;
 
PV_Out.ST:=ByQuality;
PV_Out.Value:=InValR;
ModErr.Value:=(ModErr.Value) OR StatusM;
LastValidValue1:=LastValidValue;
 
IF (NOT(SimOn.Value)) AND StatusM THEN
    PV_Out.Value:=0.0;
END_IF;
 
IF (PV_Out.Value<LowCutOff) AND xFeatLowCutOff THEN
    PV_Out.Value:=Scale.Low;
    PV_LcoAct.Value:=TRUE;
END_IF;
 
IF PV_Out.Value>LowCutOff THEN
    PV_LcoAct.Value:=FALSE;
END_IF;
 
Bad.Value:=BadAkt;
SimAct.Value:=SimOn.Value;
LastBad:=BadAkt;
LastValidValue:=InValR;
 
IF DWORD_TO_INT(MS AND DW#16#F)=6 THEN
    ByQuality:=B#16#68;
    PV_Out.ST:=B#16#68;
ELSIF DWORD_TO_INT(MS AND DW#16#F)=5 THEN
    ByQuality:=B#16#A4;
    PV_Out.ST:=B#16#A4;
END_IF;
 
END_FUNCTION_BLOCK



analog input

Block checksum îðèãèíàëüíîãî è âîññòàíîâëåííîãî áëîêà íå ñîâïàäàåò!!!
Ïðè÷èíà - èñïîëüçâîâàíèå â èñõîäíîì SCL êîäå äëèííûõ êîíñòàíò (áîëüøå 8 çíà÷àùèõ öèôð).
 òîæå âðåìÿ, ñãåíåíðèðîâàííûé STL òåêñò, ñîâïàäàåò ñ îðèãèíàëüíûì ïîëíîñòüþ.



Îðèãèíàëüíàÿ áèáëèîòåêà PCS7 (APL (V8.2sp1) (zip, 1.3Mb)

Äîêóìåíòàöèÿ íà áëîê (pdf, 21Mb)







Ïðîñìîòðîâ: 13041

Êîììåíòàðèè ê ìàòåðèàëó

Äîáàâëåí: Draco Malfoy    Äàòà: 2017-08-17

Äìèòðèé, à ÷òî îòôîðìàòèðîâàííûé íå âçÿëè

Äîáàâëåí: Âàñèëèé    Äàòà: 2017-09-07

Êàê ìíîãà Áóêàâ.

Äîáàâèòü êîììåíòàðèé

Âàøå èìÿ:

Òåêñò êîììåíòàðèÿ (4000 max):

Ââåäèòå ñóììó ñ êàðòèíêè: