##PROJECT_GLOBAL_BEGIN [Programs] Count=1 [Misc Info] Author= Company= Version= EditTime=580 ##PROJECT_GLOBAL_END ##PROGRAM_BEGIN_1 #PROJECT_OPTIONS_BEGIN [Program] Name= [VCP] I2CPriority=5 SendSource=0 ProtectWithPasswd=0 Password= ScanOverrunStopsProgram=1 [Misc Info] CyProVersion=1.9.0 Author=Joze Silc (microera@siol.net) Company=MicroERA Joze Silc s.p. Version=0.53n MonitorHistorySpeed=8 [Hardware] Model=2 AutoAllocInternal=1 Display=1 AutoAllocDisplay=1 Card1=7 Type1=0 AutoAlloc1=1 Card2=7 Type2=0 AutoAlloc2=1 Card4=7 Type4=0 AutoAlloc4=1 [Net] MasterNAD=0 PrgDevice00=1536 PrgDevice01=1628 PrgDevice02=1732 PrgDevice03=1766 PrgDevice04=2354 PrgDevice05=2432 PrgDevice06=2955 PrgDevice07=2345 PrgDevice08=2708 CurrentNAD=2708 [MonitorNet] MasterNAD=0 [Monitor00] Name= VarCount=26 VarName1=ix000 VarBase1=1 VarValue1=0 VarColor1=0 VarName2=ix001 VarBase2=1 VarValue2=0 VarColor2=0 VarName3=ix002 VarBase3=1 VarValue3=0 VarColor3=0 VarName4=ix003 VarBase4=1 VarValue4=0 VarColor4=0 VarName5=ix004 VarBase5=1 VarValue5=0 VarColor5=0 VarName6=ix005 VarBase6=1 VarValue6=0 VarColor6=0 VarName7=ix006 VarBase7=1 VarValue7=0 VarColor7=0 VarName8=ix007 VarBase8=1 VarValue8=0 VarColor8=0 VarName9=iw048 VarBase9=1 VarValue9=0 VarColor9=0 VarName10=iw049 VarBase10=1 VarValue10=0 VarColor10=0 VarName11=iw050 VarBase11=1 VarValue11=0 VarColor11=0 VarName12=iw051 VarBase12=1 VarValue12=0 VarColor12=0 VarName13=iw053 VarBase13=1 VarValue13=0 VarColor13=0 VarName14=iw016 VarBase14=1 VarValue14=0 VarColor14=0 VarName15=iw017 VarBase15=1 VarValue15=0 VarColor15=0 VarName16=iw018 VarBase16=1 VarValue16=0 VarColor16=0 VarName17=iw019 VarBase17=1 VarValue17=0 VarColor17=0 VarName18=iw020 VarBase18=1 VarValue18=0 VarColor18=0 VarName19=iw021 VarBase19=1 VarValue19=0 VarColor19=0 VarName20=iw032 VarBase20=1 VarValue20=0 VarColor20=0 VarName21=iw033 VarBase21=1 VarValue21=0 VarColor21=0 VarName22=iw034 VarBase22=1 VarValue22=0 VarColor22=0 VarName23=iw035 VarBase23=1 VarValue23=0 VarColor23=0 VarName24=iw036 VarBase24=1 VarValue24=0 VarColor24=0 VarName25=iw037 VarBase25=1 VarValue25=0 VarColor25=0 VarName26=iw069 VarBase26=1 VarValue26=0 VarColor26=0 [Monitor01] Name= VarCount=18 VarName1=inPValarmMin[1] VarBase1=1 VarValue1=0 VarColor1=0 VarName2=inPValarmMax[1] VarBase2=1 VarValue2=1 VarColor2=0 VarName3=inPValarmMin[2] VarBase3=1 VarValue3=0 VarColor3=0 VarName4=inPValarmMax[2] VarBase4=1 VarValue4=1 VarColor4=0 VarName5=inPValarmMin[3] VarBase5=1 VarValue5=0 VarColor5=0 VarName6=inPValarmMax[3] VarBase6=1 VarValue6=1 VarColor6=0 VarName7=inPValarmMin[4] VarBase7=1 VarValue7=0 VarColor7=0 VarName8=inPValarmMax[4] VarBase8=1 VarValue8=1 VarColor8=0 VarName9=inPValarmMin[5] VarBase9=1 VarValue9=0 VarColor9=0 VarName10=inPValarmMax[5] VarBase10=1 VarValue10=1 VarColor10=0 VarName11=inPValarmMin[6] VarBase11=1 VarValue11=0 VarColor11=0 VarName12=inPValarmMax[6] VarBase12=1 VarValue12=1 VarColor12=0 VarName13=inPValarmMin[7] VarBase13=1 VarValue13=0 VarColor13=0 VarName14=inPValarmMax[7] VarBase14=1 VarValue14=14 VarColor14=0 VarName15=inPValarmMin[8] VarBase15=1 VarValue15=0 VarColor15=0 VarName16=inPValarmMax[8] VarBase16=1 VarValue16=14 VarColor16=0 VarName17=inPValarmMin[9] VarBase17=1 VarValue17=0 VarColor17=0 VarName18=inPValarmMax[9] VarBase18=1 VarValue18=14 VarColor18=0 [Monitor02] Name= VarCount=27 VarName1=inVRSTA[1] VarBase1=1 VarValue1=1 VarColor1=0 VarName2=inVRSTA[2] VarBase2=1 VarValue2=1 VarColor2=0 VarName3=inVRSTA[3] VarBase3=1 VarValue3=1 VarColor3=0 VarName4=inVRSTA[4] VarBase4=1 VarValue4=1 VarColor4=0 VarName5=inVRSTA[5] VarBase5=1 VarValue5=1 VarColor5=0 VarName6=inVRSTA[6] VarBase6=1 VarValue6=1 VarColor6=0 VarName7=inVRSTA[7] VarBase7=1 VarValue7=2 VarColor7=0 VarName8=inVRSTA[8] VarBase8=1 VarValue8=2 VarColor8=0 VarName9=inVRSTA[9] VarBase9=1 VarValue9=2 VarColor9=0 VarName10=inVRSTA[10] VarBase10=1 VarValue10=2 VarColor10=0 VarName11=inVRSTA[11] VarBase11=1 VarValue11=2 VarColor11=0 VarName12=inVRSTA[12] VarBase12=1 VarValue12=2 VarColor12=0 VarName13=inVRSTA[13] VarBase13=1 VarValue13=3 VarColor13=0 VarName14=inVRSTA[14] VarBase14=1 VarValue14=3 VarColor14=0 VarName15=inVRSTA[15] VarBase15=1 VarValue15=3 VarColor15=0 VarName16=inVRSTA[16] VarBase16=1 VarValue16=3 VarColor16=0 VarName17=inVRSTA[17] VarBase17=1 VarValue17=3 VarColor17=0 VarName18=inVRSTA[18] VarBase18=1 VarValue18=3 VarColor18=0 VarName19=qx000 VarBase19=1 VarValue19=0 VarColor19=0 VarName20=qx001 VarBase20=1 VarValue20=0 VarColor20=0 VarName21=qx002 VarBase21=1 VarValue21=0 VarColor21=0 VarName22=qx003 VarBase22=1 VarValue22=0 VarColor22=0 VarName23=qx004 VarBase23=1 VarValue23=0 VarColor23=0 VarName24=qx005 VarBase24=1 VarValue24=0 VarColor24=0 VarName25=bVzorecOUT[1] VarBase25=1 VarValue25=0 VarColor25=0 VarName26=bVzorecOUT[2] VarBase26=1 VarValue26=0 VarColor26=0 VarName27=outNAVADEN[2] VarBase27=1 VarValue27=1 VarColor27=0 [Monitor03] Name= VarCount=24 VarName1=T1minINr[1] VarBase1=1 VarValue1=0 VarColor1=0 VarName2=T2maxINr[1] VarBase2=1 VarValue2=1 VarColor2=0 VarName3=T1minINr[2] VarBase3=1 VarValue3=0 VarColor3=0 VarName4=T2maxINr[2] VarBase4=1 VarValue4=1 VarColor4=0 VarName5=T1minINr[3] VarBase5=1 VarValue5=0 VarColor5=0 VarName6=T2maxINr[3] VarBase6=1 VarValue6=1 VarColor6=0 VarName7=T1minINr[4] VarBase7=1 VarValue7=0 VarColor7=0 VarName8=T2maxINr[4] VarBase8=1 VarValue8=1 VarColor8=0 VarName9=T1minINr[5] VarBase9=1 VarValue9=0 VarColor9=0 VarName10=T2maxINr[5] VarBase10=1 VarValue10=1 VarColor10=0 VarName11=T1minINr[6] VarBase11=1 VarValue11=0 VarColor11=0 VarName12=T2maxINr[6] VarBase12=1 VarValue12=1 VarColor12=0 VarName13=T1minINr[7] VarBase13=1 VarValue13=14 VarColor13=0 VarName14=T2maxINr[8] VarBase14=1 VarValue14=14 VarColor14=0 VarName15=T2maxINr[9] VarBase15=1 VarValue15=14 VarColor15=0 VarName16=T2maxINr[10] VarBase16=1 VarValue16=14 VarColor16=0 VarName17=T2maxINr[11] VarBase17=1 VarValue17=14 VarColor17=0 VarName18=T2maxINr[12] VarBase18=1 VarValue18=14 VarColor18=0 VarName19=T2maxINr[13] VarBase19=1 VarValue19=999,990051269531 VarColor19=0 VarName20=T2maxINr[14] VarBase20=1 VarValue20=1000 VarColor20=0 VarName21=T2maxINr[15] VarBase21=1 VarValue21=1000 VarColor21=0 VarName22=T2maxINr[16] VarBase22=1 VarValue22=1000 VarColor22=0 VarName23=T2maxINr[17] VarBase23=1 VarValue23=1000 VarColor23=0 VarName24=T2maxINr[18] VarBase24=1 VarValue24=1000 VarColor24=0 [Monitor04] Name= VarCount=22 VarName1=bSMSstatus VarBase1=1 VarValue1=0 VarColor1=0 VarName2=bSMSactive VarBase2=1 VarValue2=0 VarColor2=0 VarName3=SMSa[1] VarBase3=1 VarValue3=0 VarColor3=0 VarName4=SMSa[2] VarBase4=1 VarValue4=0 VarColor4=0 VarName5=SMSa[3] VarBase5=1 VarValue5=0 VarColor5=0 VarName6=SMSa[4] VarBase6=1 VarValue6=0 VarColor6=0 VarName7=SMSa[5] VarBase7=1 VarValue7=0 VarColor7=0 VarName8=SMSa[6] VarBase8=1 VarValue8=0 VarColor8=0 VarName9=SMSa[7] VarBase9=1 VarValue9=0 VarColor9=0 VarName10=SMSa[8] VarBase10=1 VarValue10=0 VarColor10=0 VarName11=SMSa[9] VarBase11=1 VarValue11=0 VarColor11=0 VarName12=SMSa[10] VarBase12=1 VarValue12=0 VarColor12=0 VarName13=SMSa[11] VarBase13=1 VarValue13=0 VarColor13=0 VarName14=SMSa[12] VarBase14=1 VarValue14=0 VarColor14=0 VarName15=SMSd[0] VarBase15=1 VarValue15=0 VarColor15=0 VarName16=SMSd[1] VarBase16=1 VarValue16=0 VarColor16=0 VarName17=SMSd[2] VarBase17=1 VarValue17=0 VarColor17=0 VarName18=SMSd[3] VarBase18=1 VarValue18=0 VarColor18=0 VarName19=SMSd[4] VarBase19=1 VarValue19=0 VarColor19=0 VarName20=SMSd[5] VarBase20=1 VarValue20=0 VarColor20=0 VarName21=SMSd[6] VarBase21=1 VarValue21=1 VarColor21=0 VarName22=SMSd[7] VarBase22=1 VarValue22=1 VarColor22=0 [Snapshots] Count=0 #PROJECT_OPTIONS_END #MASKS_BEGIN [Common] MaskCount=18 Timeout=0 EntryPoint=dummy_mask [Mask01] Name=mREG EntLoc=mCALT1in VarName=prikazREG EnterRq=1 LoLimit=1 HiLimit=18 CText=_ CPosX=1 CWidth=1 FWidth=1 UText=< REG.number UPosX=2 UWidth=14 [Mask02] Name=mregVRSTA EntLoc=mCALT1in VarName=t_regVRSTA LoLimit=0 HiLimit=3 IsMenu=1 MenuItems=0•=PID•=KRM•=0_1 BranchCnt=4 BranchLoc0=dummy_mask BranchVal1=1 BranchLoc1=mCALT1in BranchVal2=2 BranchLoc2=mCALT1in BranchVal3=3 BranchLoc3=mCALT1in CText=regulator= CPosX=2 CWidth=10 FPosX=12 FWidth=4 UPosX=14 [Mask03] Name=mCALT1in EntLoc=mCALT2in VarName=t_T1minINr DecNum=2 EnterRq=1 HiLimit=99999 CText=CalT1i: CPosX=2 CWidth=7 FPosX=9 FWidth=6 UPosX=15 UWidth=1 [Mask04] Name=mCALT2in EntLoc=minVRSTA VarName=t_T2maxINr DecNum=2 EnterRq=1 HiLimit=99999 CText=CalT2i: CPosX=2 CWidth=7 FPosX=9 FWidth=6 UPosX=15 UWidth=1 [Mask05] Name=minVRSTA EntLoc=mPIDnegiran VarName=t_inVRSTA EnterRq=1 HiLimit=6 IsMenu=1 MenuItems=_ _•mg/L•_pH_•_mV_•ppm_•_%__•stC_ CText=inVRSTA= CPosX=2 CWidth=10 FPosX=12 FWidth=4 UPosX=14 [Mask06] Name=mPIDnegiran EntLoc=mdecPIKA VarName=t_bPIDnegiran HiLimit=1 IsMenu=1 MenuItems=NE•DA CText=PIDneg: CPosX=2 CWidth=8 FPosX=10 FWidth=4 UPosX=14 UWidth=2 [Mask07] Name=mdecPIKA EntLoc=mSetP VarName=t_decPIKA EnterRq=1 HiLimit=2 CText= dec.PIKA: CPosX=2 CWidth=9 FPosX=11 FWidth=3 UPosX=14 UWidth=2 [Mask08] Name=mSetP EntLoc=moutMINimp VarName=t_SetP DecNum=2 EnterRq=1 HiLimit=9999 CText=SetP: CPosX=2 CWidth=5 FPosX=7 FWidth=5 UPosX=12 UWidth=4 [Mask09] Name=moutMINimp EntLoc=moutMAXimp VarName=t_outMINimp DecNum=1 EnterRq=1 HiLimit=400 CText=MINimp CPosX=2 CWidth=6 FPosX=8 FWidth=4 UPosX=12 UWidth=4 [Mask10] Name=moutMAXimp EntLoc=maxPValarm VarName=t_outMAXimp DecNum=1 EnterRq=1 LoLimit=10 HiLimit=990 CText=MAXimp CPosX=2 CWidth=6 FPosX=8 FWidth=4 UPosX=12 UWidth=4 [Mask11] Name=maxPValarm EntLoc=minPValarm VarName=t_inPValarmMax DecNum=2 EnterRq=1 LoLimit=20 HiLimit=99990 CText=SmsA@H CPosX=2 CWidth=6 FPosX=8 FWidth=7 UPosX=15 UWidth=1 [Mask12] Name=minPValarm EntLoc=minDELAY VarName=t_inPValarmMin DecNum=2 EnterRq=1 LoLimit=20 HiLimit=99990 CText=SmsA@L CPosX=2 CWidth=6 FPosX=8 FWidth=7 UPosX=15 UWidth=1 [Mask13] Name=minDELAY EntLoc=mKP VarName=t_inDELAY EnterRq=1 LoLimit=2 HiLimit=999 CText=T-mrtvi: CPosX=2 CWidth=9 FPosX=11 FWidth=3 UText=s UPosX=14 UWidth=2 [Mask14] Name=mKP EntLoc=mKI VarName=t_KP EnterRq=1 HiLimit=99 CText=KP: CPosX=2 CWidth=7 FPosX=9 FWidth=5 UPosX=14 UWidth=2 [Mask15] Name=mKI EntLoc=mKD VarName=t_KI EnterRq=1 HiLimit=99 CText=KI: CPosX=2 CWidth=7 FPosX=9 FWidth=5 UPosX=14 UWidth=2 [Mask16] Name=mKD EntLoc=dummy_mask VarName=t_KD EnterRq=1 HiLimit=99 CText=KD: CPosX=2 CWidth=7 FPosX=9 FWidth=5 UPosX=14 UWidth=2 [Mask17] Name=dummy_mask EntLoc=dummy_mask CWidth=9 FPosX=9 FWidth=5 UPosX=14 UWidth=2 [Mask18] Name=mHIS VarName=His[1] EnterRq=1 LoLimit=5 HiLimit=50 CText= HIST.= CWidth=10 FPosX=10 FWidth=4 UPosX=14 UWidth=2 #MASKS_END #CODE_BEGIN // AllocGroupList="User Variables", "I/O Variables", "Constants" var retain Auto_Mode: ARRAY[0..24] OF bool; // PIDr=Auto mode bPIDnegiran: ARRAY[0..24] OF bool; // PID funkcija negirana bSMSactive: bool; // 1=omogoci 0=onemogoci posiljanje Alarm SMS SMSd: ARRAY[0..8] OF bool; // SMS digital enable/disable za dig. vhode! SMSa: ARRAY[0..24] OF bool; // SMS analog enable/disable za an. vhode! Manual_Value: ARRAY[0..24] OF int; // PIDr=Manual_Value REG: int; // REG=ACTIVE REGULATOR prikazREG: int; // prikazuje REGulacijo inVRSTA: ARRAY[0..24] OF int; // konfiguracija vhoda REGi outADDRESS: ARRAY[0..24] OF int; // pisalni naslov izhoda outADDRESS2: ARRAY[0..24] OF int; // 2.pisalni naslov IZHODA outVRSTA: ARRAY[0..24] OF int; // vrsta izhoda 0=neaktiven regSERVOaddress: ARRAY[0..24] OF int; // morebitni naslov povratne vezave (uporovni naslov) His: ARRAY[0..24] OF int; // histereza pri servu! regVRSTA: ARRAY[0..24] OF int; // 1=AKTIVEN oz. VRSTA regulacije 1=Cl 2=Ph out4xADDRESS: ARRAY[0..24] OF int; out4xADDRESS2: ARRAY[0..24] OF int; CALtocka: int; // kal. tocka! outNAVADEN: ARRAY[0..24] OF int; // 1=NAVADEN IZHOD 2=NEGIRAN IZHOD maxCVi: ARRAY[0..24] OF int; ALARM: ARRAY[0..24] OF int; decPIKA: ARRAY[0..24] OF int; inDELAY: ARRAY[0..24] OF int; // zakasnitev vhoda proti reakciji izhoda! Ai: ARRAY[0..3] OF int; // Analogni vhod! (ZA SIMULACIJO) gsmNo: long; // Stevilka GSM-ja kamor se posilja SMS! 041402779=41402779 KP: ARRAY[0..24] OF real; // PIDr=KP KI: ARRAY[0..24] OF real; // PIDr=KI KD: ARRAY[0..24] OF real; // PIDr=KD Pterm: ARRAY[0..24] OF real; // PIDr=Pterm Iterm: ARRAY[0..24] OF real; // PIDr=Iterm Dterm: ARRAY[0..24] OF real; // PIDr=Dterm SetP: ARRAY[0..24] OF real; // PIDr=SP or SETPOINT Error: ARRAY[0..24] OF real; // PIDr=Error Sum_Error: ARRAY[0..24] OF real; // PIDr=Sum_Error CV: ARRAY[0..24] OF real; // PIDr=PID OUTPUT ?_-32768...0...+32768_? maxCV: ARRAY[0..24] OF real; // maximum od CV minCV: ARRAY[0..24] OF real; // minimum od CV maxSetP: ARRAY[0..24] OF real; // maximum od SetP minSetP: ARRAY[0..24] OF real; // minimum od SetP maxSumError: ARRAY[0..24] OF real; // maximalna vrednost VSOTE NAPAKE minSumError: ARRAY[0..24] OF real; // minimalna vrednost VSOTE NAPAKE regPRETOCNI: ARRAY[0..24] OF real; // 1=PRETOCNA REGULACIJA 2=AKUMULACIJSKA REGULACIJA inMAX: ARRAY[0..24] OF real; // maksimalna bralna vrednost vhoda inNAVADEN: ARRAY[0..24] OF real; // 1=navaden vhod 2=negiran vhod T1minINr: ARRAY[0..24] OF real; // min.realna vrednost 1. tocke T2maxINr: ARRAY[0..24] OF real; // max.realna vrednost 1.tocke T1minIN: ARRAY[0..24] OF real; // min.vrednost iz vhoda 2.tocke T2maxIN: ARRAY[0..24] OF real; // max.vrednost iz vhoda 2.tocke outMAX: ARRAY[0..24] OF real; // max.pisalna vrednost izhoda T1minOUTr: ARRAY[0..24] OF real; // minimalna realna vrednost 1.tocke IZHODA T2maxOUTr: ARRAY[0..24] OF real; // max.realna vrednost izhoda 1.tocke! T1minOUT: ARRAY[0..24] OF real; // min.vrednost izhoda 2.tocke T2maxOUT: ARRAY[0..24] OF real; // max.vrednost izhoda 2.tocke regPOVRATNA: ARRAY[0..24] OF real; // vrsta povratne informacije: 8=R500 koefPV: ARRAY[0..24] OF real; // koeficient med PV in PVi konstPV: ARRAY[0..24] OF real; // konstantaPV outMIN: ARRAY[0..24] OF real; // min.pisalna vrednost izhoda koefSERVO: ARRAY[0..24] OF real; // koeficinet v primeru da imamo servo! konstSERVO: ARRAY[0..24] OF real; // konstanta za servo outMINimp: ARRAY[0..24] OF real; // PID: Minimalno število impulzov na izhodu! outMAXimp: ARRAY[0..24] OF real; // PID: MAXimalna vrednost impulzov na izhodu inPValarmMax: ARRAY[0..24] OF real; // max.vrednost PV za regulacijo. ALARM ! inPValarmMin: ARRAY[0..24] OF real; // min.vrednost PV za regulacijo. ALARM ! var_end; var constant cIN_Clor = 1; // enota je mg/L cIN_Ph = 2; // 0 .. 14 pH cIN_TEMP = 6; // TEMP, Pt100 cIN_Rx = 3; // Rx=0 .. 100 mV cREG_PID = 1; // PID regulacija cOUT_DIG2x = 2; // imamo IZHOD 2x DIG gor, dol (naprej, nazaj) cREG_KRM = 2; // nacin krmiljenja: an.vhod pomeni doloceno stopnjo odprtja ventila! cOUT_DIG4x = 3; // 4 dig. izhodi: 2 para! Zamenjata +-5V cOUT_AN = 1; // analogni izhod cIN_PRETOK = 5; cMaxTipPrikaza = 2; cIN_Clor2 = 4; // enota je ppm SteviloREG = 18; // Vpisi število vseh regulatorjev! cOUT_IMP = 1; // 1x Digitalni izhod (impulzni izhod) dolgIMP = 4; MTOUT = 2500; // message timeout CTOUT = 100; // char timeout RTOUT = 1000; // restart timeout STOP_EXECUTED = 1; // receive status END_DETECTED = 2; // receive status LEN_RECEIVED = 3; // receive status TOUT_OCCURED = 4; // receive status cSMSdelay = 3600; // Delay med SMSi po kanalu! 300s=5min cSMSdelayMIN = 12; // Splosna zakasnitev med SMS-i! Doloca pogostnost alarmiranja med SMS-i! cREG_0_1 = 3; // Pomeni ON/OFF regulacijo var_end; var iw048: int; // {AllocGroup="I/O Variables"} iw049: int; // {AllocGroup="I/O Variables"} iw050: int; // {AllocGroup="I/O Variables"} iw051: int; // {AllocGroup="I/O Variables"} iw052: int; // {AllocGroup="I/O Variables"} iw053: int; // {AllocGroup="I/O Variables"} tmpDIG: bool; bSetP: bool; // 1=prikaz z SetPoint 0=normal bVzorecPID: ARRAY[0..24] OF bool; bALARM: ARRAY[0..24] OF bool; // Alarm premajhne vrednosti na vhodu! bPValarm: ARRAY[0..24] OF bool; // bitna spremenljivka Alarm-a! bVzorecOUT: ARRAY[0..24] OF bool; bPIDr: ARRAY[0..24] OF bool; // Bil je vstop v zanko PID! fp_bVzorecPID: ARRAY[0..24] OF bool; // prva flanka! fn_bVzorecPID: ARRAY[0..24] OF bool; // zadnja flanka! t_bPIDnegiran: bool; sms_send_request: bool; // sms: zahteva po SMS bSMSstatus: bool; // Zahteva po slanju SMS statusa! bSneGlej: bool; bSMSneVec: bool; // V tem SMS sporocilu ne posiljaj vec! SMS je ze definiran! RTC_leto: int; RTC_mesec: int; RTC_dan: int; RTC_ura: int; RTC_min: int; First_PID_Execution: ARRAY[0..24] OF int; // PIDr=First_PID_Execution com_open: int; // for test if COM port is opened! i: int; // zacasna spremenljivka vMask01: int; // VAR prve maske VRSTAo: int; // VRSTA izhoda password: int; // geslo PVi: ARRAY[0..24] OF int; // direktna vrednost iz vhoda CVi: ARRAY[0..24] OF int; // integer vrednost izhoda DIG1: ARRAY[0..24] OF int; DIG2: ARRAY[0..24] OF int; SetPi: ARRAY[0..24] OF int; // SetP v integer varianti (izhod) CVservo: ARRAY[0..24] OF int; // povratna informacija iz serva! naprejNAZAJ: ARRAY[0..24] OF int; TipPrikaza: int; // tip prikaza displaya: 0=normal 1=servo menuREG_no: int; // Stevilka regulatorja DIG3: ARRAY[0..24] OF int; DIG4: ARRAY[0..24] OF int; t: int; vzorciPID: ARRAY[0..24] OF int; // vzorci za PID regulacijo index: int; // index za variable array! t_inVRSTA: int; // temp.1 t_decPIKA: int; // temp. 0 t_inDELAY: int; // temp. 2..999 s CASvzorca: ARRAY[0..24] OF int; // ...v sekundah. Razlicno od regulatorja! CV100ms: ARRAY[0..24] OF int; // Za out_imp po 100ms VzorciOUT: ARRAY[0..24] OF int; // tekoči po 100ms Areg: int; // trenutna stevilka REG step: int; // sms sms_id: int; // sms s: int; smsCNTsecD: ARRAY[0..8] OF int; // sms: D=digitalni stevec sekund pogostosti posiljanja SMS! (300s) smsCNTsecA: ARRAY[0..24] OF int; // sms: A=digitalni stevec sekund pogostosti posiljanja SMS! (300s) SMSdig: ARRAY[0..8] OF int; // Preslikava dig. ALARMA v array! SMStimerD: ARRAY[0..24] OF int; // Steje sekunde med ALARM-i v istem "kanalu"! Na primer: 300s=5min iii: int; // zacasni PValarmSMS: ARRAY[0..24] OF int; // Vsebuje st. REG (an.vhoda) z alarmom! 0=ni alarma AlarmSms_REG: int; // Zacasna spremenljivka v communication! SMStimerA: ARRAY[0..24] OF int; // Steje sekunde med AN. ALARM-i v istem "kanalu"! REGrequest: int; // SMS Zahteva po podatkih o regulatorju REG! Na primer: "REG?=11" pp: int; t_regVRSTA: int; // temp. ___ 0=ni aktiven REGULATOR ddd: int; cnter: long; Initial_Error: ARRAY[0..24] OF real; // PIDr=Initial_Error Last_PV: ARRAY[0..24] OF real; // PIDr=Last_PV Last_SetP: ARRAY[0..24] OF real; // PIDr=Last_SetP d_PV: ARRAY[0..24] OF real; // PIDr=Derrivated delta PV PV: ARRAY[0..24] OF real; // Process value dummy: real; t_outMINimp: real; // temp. 1.0 ... 99.9 / min t_outMAXimp: real; // temp. 2.0 ... 120.0 / min t_KP: real; // temp. KP 0.1 ... 9.9 t_KI: real; // temp. KI 0.1 ... 9.9 t_KD: real; // temp. KD 0.1 ... 9.9 t_T1minINr: real; // temp. t_T2maxINr: real; // temp. t_SetP: real; // temp. SetP t_inPValarmMax: real; // temp. CVimp: ARRAY[0..24] OF real; // trenutno število impulzov na minuto! koefIMPULZ: ARRAY[0..24] OF real; // za preračun CV v CVimp konstIMPULZ: ARRAY[0..24] OF real; // za preračun CV v CVimp t_inPValarmMin: real; // temporary waitPrikazSP: timer = ( PT:=3000; TYPE:=OnDelay; BASE:=100 ); // ce nekaj pritisnemo se prikaze set point za ta CAS hitreTIPKEup: timer = ( PT:=400; TYPE:=OnDelay; BASE:=100 ); hitreTIPKEdn: timer = ( PT:=400; TYPE:=OnDelay; BASE:=100 ); WaitT1_T2: timer = ( PT:=1900; TYPE:=OnDelay; BASE:=100 ); // drzimo tipko toliko casa....za izracun parametrov! timeVENT: timer = ( PT:=75; TYPE:=Pulse; BASE:=10 ); potrdiTOCKO: timer = ( PT:=500; TYPE:=OnDelay; BASE:=100 ); tSMSdelayMIN: timer = ( PT:=12000; TYPE:=Pulse; BASE:=1000 ); // doloca pogostnost posiljanja SMS! iw048_1 AT %IW0064: int; // {AllocGroup="I/O Variables"} iw049_1 AT %IW0065: int; // {AllocGroup="I/O Variables"} iw050_1 AT %IW0066: int; // {AllocGroup="I/O Variables"} iw051_1 AT %IW0067: int; // {AllocGroup="I/O Variables"} iw052_1 AT %IW0068: int; // {AllocGroup="I/O Variables"} iw053_1 AT %IW0069: int; // {AllocGroup="I/O Variables"} var_end; function main:void; language 'Structured Text'; function prikaz:void; language 'Structured Text'; begin // // 0123456789012345 // ---------------- //0 1. Cl= 0.45 mg/L _ppm //1 i=xxxxx o=xx_imp // ---------------- // ---------------- //0 2. pH= 04.5 _pH_ //1 i=xxxx o=xx_imp // ---------------- // ---------------- //0 3. Rx= 0450 _mV_ //1 i=xxxx o=xx_imp // ---------------- // 0123456789012345 if prikazREG<10 then pp:=1; dprns(1, 0,'.'); else pp:=2; end_if; dprni( 0, 0, pp, 0, prikazREG); // 'i=xxxx_ o=xxx.xi'); // 0123456789012345 if regVRSTA[prikazREG]=0 then dprns( 2, 0, ' '); dprns( 0, 1,' '); else case inVRSTA[prikazREG] of cIN_Clor: // 0123456789012345 if pp=1 then dprns( 1, 0, '.Cl = x.xx mg/L'); else dprns( 2, 0, 'Cl = x.xx mg/L'); end_if; // dprni( 0, 0, 1, 0, prikazREG); if bSetP then dprnr( 7, 0, 5, decPIKA[prikazREG], SetP[prikazREG]); dprnb( 5, 0,' ','=',clock_1s); else dprnr( 7, 0, 5, decPIKA[prikazREG], PV[prikazREG]); end_if; // 0123456789012345 if (outVRSTA[prikazREG]=cOUT_IMP) then if bSMSactive then dprns( 0, 1,'i=xxxx_ o=xxx.xi'); else dprns( 0, 1,'i=xxxx o=xxx.xi'); end_if; dprnr(10, 1, 5, 1, CVimp[prikazREG]); /* prikaz realne vrednosti izhoda */ else dprns( 0, 1,'i=xxxx o=out '); end_if; dprni( 2, 1, 4, 1, PVi[prikazREG]); if (regPOVRATNA[prikazREG]>0) then if (regPOVRATNA[prikazREG]=cIN_Clor) then dprni( 10, 1, 4, 1, CVservo[prikazREG]); else dprni( 10, 1, 4, 1, CVi[prikazREG]); end_if; end_if; cIN_Ph: // 0123456789012345 if pp=1 then dprns( 1, 0, '.pH = xx.xx pH '); else dprns( 2, 0, 'pH = xx.xx pH '); end_if; // dprni( 0, 0, 1, 0, prikazREG); if bSetP then dprnr( 7, 0, 5, decPIKA[prikazREG], SetP[prikazREG]); dprnb( 5, 0,' ','=',clock_1s); else dprnr( 7, 0, 5, decPIKA[prikazREG], PV[prikazREG]); end_if; // 0123456789012345 // 0123456789012345 if (outVRSTA[prikazREG]=cOUT_IMP) then dprns( 0, 1,'i=xxxx o=xxx.xi'); dprnr(10, 1, 5, 1, CVimp[prikazREG]); /* prikaz realne vrednosti izhoda */ else dprns( 0, 1,'i=xxxx o=out '); end_if; dprni( 2, 1, 4, 1, PVi[prikazREG]); cIN_Rx: // 0123456789012345 if pp=1 then dprns( 1, 0, '.Rx = xx.xx mV '); else dprns( 2, 0, 'Rx = xx.xx mV '); end_if; // dprni( 0, 0, 1, 0, prikazREG); if bSetP then dprnr( 7, 0, 5, decPIKA[prikazREG], SetP[prikazREG]); dprnb( 5, 0,' ','=',clock_1s); else dprnr( 7, 0, 5, decPIKA[prikazREG], PV[prikazREG]); end_if; // 0123456789012345 if (outVRSTA[prikazREG]=cOUT_IMP) then dprns( 0, 1,'i=xxxx o=xxx.xi'); dprnr(10, 1, 5, 1, CVimp[prikazREG]); /* prikaz realne vrednosti izhoda */ else dprns( 0, 1,'i=xxxx o=out '); end_if; dprni( 2, 1, 4, 1, PVi[prikazREG]); cIN_Clor2: // 0123456789012345 if pp=1 then dprns( 1, 0, '.Cl = xx.xx ppm '); else dprns( 2, 0, 'Cl = xx.xx ppm '); end_if; // dprni( 0, 0, 1, 0, prikazREG); if bSetP then dprnr( 7, 0, 5, decPIKA[prikazREG], SetP[prikazREG]); dprnb( 5, 0,' ','=',clock_1s); else dprnr( 7, 0, 5, decPIKA[prikazREG], PV[prikazREG]); end_if; // 0123456789012345 if (outVRSTA[prikazREG]=cOUT_IMP) then dprns( 0, 1,'i=xxxx o=xxx.xi'); dprnr(10, 1, 5, 1, CVimp[prikazREG]); /* prikaz realne vrednosti izhoda */ else dprns( 0, 1,'i=xxxx o=out '); end_if; dprni( 2, 1, 4, 1, PVi[prikazREG]); cIN_TEMP: // 0123456789012345 if pp=1 then dprns( 1, 0, '.TEMP=xx.xx stC '); else dprns( 2, 0, 'TEMP=xx.xx stC '); end_if; // dprni( 0, 0, 1, 0, prikazREG); if bSetP then dprnr( 7, 0, 5, decPIKA[prikazREG], SetP[prikazREG]); dprnb( 5, 0,' ','=',clock_1s); else dprnr( 7, 0, 5, decPIKA[prikazREG], PV[prikazREG]); end_if; // 0123456789012345 if (outVRSTA[prikazREG]=cOUT_IMP) then dprns( 0, 1,'i=xxxx o=xxx.xi'); dprnr(10, 1, 5, 1, CVimp[prikazREG]); /* prikaz realne vrednosti izhoda */ else dprns( 0, 1,'i=xxxx o=out '); end_if; dprni( 2, 1, 4, 1, PVi[prikazREG]); end_case; case regVRSTA[prikazREG] of cREG_PID: if bPIDr[prikazREG] then dprns( 7, 1, '*'); end_if; // oznaka, da gremo v PIDregulator /* // 0123456789012345 case current_mask of 01: dprns( 1, 0, ' '); dprns( 0, 1,'i=xxxx o=out '); dprni( 2, 1, 4, 0, PVi[prikazREG]); if (regPOVRATNA[prikazREG]=cIN_PRETOK) then dprni( 10, 1, 4, 0, CVservo[prikazREG]); else dprni( 10, 1, 4, 0, CVi[prikazREG]); end_if; else // 0123456789012345 dprni( 0, 0, 1, 0, prikazREG); case TipPrikaza of 0: dprns( 1, 0, '.Pretok'); dprns( 9,0,'xx.xl/s'); dprns( 8, 0,'='); dprnr( 9, 0, 4, 1, PV[prikazREG]); 1: dprns( 1, 0, '.SetP '); dprns( 9,0,'xx.xl/s '); if bSetP then dprnb(8, 0,' ','=',clock_1s); else dprns( 8, 0,'='); end_if; dprnr( 9, 0, 4, 1, SetP[prikazREG]); 2: dprns( 1, 0, '.SERVO '); dprns( 9,0,'xx.x % '); dprns( 8, 0,'='); dprnr( 9, 0, 4, 1, CV[prikazREG]); end_case; dprns( 0, 1,'i=xxxx o=out '); dprni( 2, 1, 4, 0, PVi[prikazREG]); if regPOVRATNA[prikazREG]>0 then if (regPOVRATNA[prikazREG]=cIN_PRETOK) then dprni( 10, 1, 4, 0, CVservo[prikazREG]); else dprni( 10, 1, 4, 0, CVi[prikazREG]); end_if; end_if; end_case; */ // ***** ALARM PREMAJHNEGA VHODA: OBICAJNO POD 4mA (oz. 3.5mA) = 350 ***** /*0123456789012345*/ if bALARM[prikazREG] then // dprns( 1, 0, 'ALARM:An.input!'); /*!!!!!!!!! kasneje !!!!!!!!*/ if clock_1s then dprns( 0, 1, ' '); end_if; end_if; // ***** ALARM PREMAJHNEGA vrednosti (REALna vrednost) ***** if bPValarm[prikazREG] then /*6789012345 */ if clock_1s then dprns( 6, 0, 'ALARM!'); end_if; end_if; cREG_KRM: /* v038 // 0123456789012345 case current_mask of 01: dprns( 1, 0, ' '); dprns( 0, 1,'i=xxxx o=out '); dprni( 2, 1, 4, 0, PVi[prikazREG]); else // 0123456789012345 dprni( 0, 0, 1, 0, prikazREG); case TipPrikaza of 0: dprns( 1, 0, '.Pretok'); dprns( 9,0,'xx.xL/s'); dprns( 8, 0,'='); dprnr( 9, 0, 4, 1, PV[prikazREG]); 1: dprns( 1, 0, '.CAL. '); dprns( 10,0, ' '); dprni( 8, 0, 2, 1, CALtocka); dprnb( 7, 0,' ','T',clock_1s); 2: TipPrikaza:=0; // ne dovolimo nelogicnega prikaza... end_case; dprns( 0, 1,'i=xxxx o=out '); case naprejNAZAJ[REG] of 2: dprns( 7, 1,'<'); 1: dprns( 7, 1,'>'); 0: dprns( 7, 1,' '); end_case; case outNAVADEN[REG] of 2: dprns( 9, 1,':'); 1: dprns( 9, 1,'='); end_case; dprni( 2, 1, 4, 0, PVi[prikazREG]); if (regPOVRATNA[prikazREG]=cIN_PRETOK) then dprni( 10, 1, 4, 0, CVservo[prikazREG]); else dprni( 10, 1, 4, 0, CVi[prikazREG]); end_if; end_case; if (ALARM[REG]=1) then dprns( 1, 0, ' ALARM Proces! '); if clock_1s then dprns( 0, 1, 'EnableREGULATOR!'); end_if; end_if; */ end_case; end_if; end; function INIT_regulator:void; language 'Structured Text'; begin // // INIT. NASTAVITVE // // CONFreg parameter 1: 0=neaktiven, 1=aktiven,.... // CONFreg parameter 2: 1=pretocni, 2=akumulacijski // CONFreg parameter 3: KP (proporcionalno ojacanje regulatorja) Izhod glede na napako! // CONFreg parameter 4: KI (integralno ojacanje regulatorja) popravki stalne napake // CONFreg parameter 5: KD (ojacanje regulatorja glede na spremembe) hitri popravki /* CV=IZHOD REGULATORJA-stevilka */ /* SetP=Setpoint zeljena nsatavljena vrednost-realna */ // 1=Cl // REG1: // ********************************************************************* // ********** CONFreg *** regVRSTA[1]:=cREG_PID; //aktiven, ce ga ne uporabimo ga damo na 0! //1=cREG_KRM 2=cREG_PID (PID regulacija) Auto_Mode[1]:=1; regPRETOCNI[1]:=1; // 1= pretocni 2=akumulacijski KP[1]:=5; // 0.00 ... 9.99 KI[1]:=4; // 0.00 ... 9.99 KD[1]:=3; // 0.00 ... 9.99 regPOVRATNA[1]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[1]:=016; // iw016 016=slot1 His[1]:= 18; minCV[1]:=0; maxCV[1]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[1]:=500 ; // na primer 5V // minSetP[1]:=0.1; maxSetP[1]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[1]:=0; maxSumError[1]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[1]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[1]:=2000; // 0..20mA=0..2000 inNAVADEN[1]:=2; // 1=navaden vhod, 2=negiran T1minINr[1]:=0; //T1_min_INr (realna vrednost) T2maxINr[1]:=14; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[1]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[1]:=350; T2maxIN[1]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[1]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[1]:=0; // 0V //1.par vezano na minus SERVO outADDRESS2[1]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[1]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[1]:=4; // 5V //2.par vezano na minus SERVO outMIN[1]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[1]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[1]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[1]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[1]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[1]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[1]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG2: // ********************************************************************* regVRSTA[2]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[2]:=1; KP[2]:=5; // 0.00 ... 9.99 KI[2]:=4; // 0.00 ... 9.99 KD[2]:=3; // 0.00 ... 9.99 regPOVRATNA[2]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... minSetP[2]:=0.12; maxSetP[2]:=19.9; /* realne vrednosti */ minCV[2]:=0; maxCV[2]:=100; /* realne vrednosti npr. % pri pretoku */ minSumError[2]:=0; maxSumError[2]:=200; // ********** CONFin *** inVRSTA[2]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[2]:=2000; // 0..20mA=0..2000 inNAVADEN[2]:=1; // 1=navaden vhod, 2=negiran T1minINr[2]:=0; //T1_min_INr (realna vrednost) T2maxINr[2]:=14; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[2]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[2]:=350; T2maxIN[2]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[2]:=cOUT_IMP; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) outADDRESS[2]:=1; // 0=qx00, 1=qx01, 2=qx02 outMIN[2]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[2]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[2]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[2]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[2]:=100; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[2]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[2]:=2000; //T2_maxOUT (max vrednost na izhodu) // REG3: // ********************************************************************* regVRSTA[3]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[3]:=1; KP[3]:=5; // 0.00 ... 9.99 KI[3]:=4; // 0.00 ... 9.99 KD[3]:=3; // 0.00 ... 9.99 regPOVRATNA[3]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... minCV[3]:=0; maxCV[3]:=100; /* realne vrednosti npr. % pri pretoku */ minSetP[3]:=0.1; maxSetP[3]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[3]:=0; maxSumError[3]:=200; // ********** CONFin *** inVRSTA[3]:=cIN_pH; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[3]:=2000; // 0..20mA=0..2000 inNAVADEN[3]:=1; // 1=navaden vhod, 2=negiran T1minINr[3]:=0; //T1_min_INr (realna vrednost) T2maxINr[3]:=14; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[3]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[3]:=350; T2maxIN[3]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[3]:=cOUT_IMP; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) outADDRESS[3]:=2; // 0=qx00, 1=qx01, 2=qx02 outMIN[3]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[3]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[3]:=2; // 1=navaden izhod, 2= negiran izhod T1minOUTr[3]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[3]:=100; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[3]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[3]:=2000; //T2_maxOUT (max vrednost na izhodu) // REG4: // ********************************************************************* regVRSTA[4]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[4]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[4]:=1; KP[4]:=5; // 0.00 ... 9.99 KI[4]:=4; // 0.00 ... 9.99 KD[4]:=3; // 0.00 ... 9.99 regPOVRATNA[4]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... minCV[4]:=0; maxCV[4]:=100; /* realne vrednosti npr. % pri pretoku */ minSetP[4]:=0.1; maxSetP[4]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[4]:=0; maxSumError[4]:=200; // ********** CONFin *** inVRSTA[4]:=cIN_Clor; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[4]:=2000; // 0..20mA=0..2000 inNAVADEN[4]:=1; // 1=navaden vhod, 2=negiran T1minINr[4]:=0; //T1_min_INr (realna vrednost) T2maxINr[4]:=1; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[4]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[4]:=350; T2maxIN[4]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[4]:=cOUT_IMP; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) outADDRESS[4]:=3; // 0=qx00, 1=qx01, 2=qx02 outMIN[4]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[4]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[4]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[4]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[4]:=100; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[4]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[4]:=2000; //T2_maxOUT (max vrednost na izhodu) // REG5: // ********************************************************************* regVRSTA[5]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[5]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[5]:=1; KP[5]:=5; // 0.00 ... 9.99 KI[5]:=4; // 0.00 ... 9.99 KD[5]:=3; // 0.00 ... 9.99 regPOVRATNA[5]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... minCV[5]:=0; maxCV[5]:=100; /* realne vrednosti npr. % pri pretoku */ minSetP[5]:=0.1; maxSetP[5]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[5]:=0; maxSumError[5]:=200; // ********** CONFin *** inVRSTA[5]:=cIN_Clor; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[5]:=2000; // 0..20mA=0..2000 inNAVADEN[5]:=1; // 1=navaden vhod, 2=negiran T1minINr[5]:=0; //T1_min_INr (realna vrednost) T2maxINr[5]:=1; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[5]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[5]:=350; T2maxIN[5]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[5]:=cOUT_IMP; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) outADDRESS[5]:=4; // 0=qx00, 1=qx01, 2=qx02 outMIN[5]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[5]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[5]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[5]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[5]:=100; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[5]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[5]:=2000; //T2_maxOUT (max vrednost na izhodu) // REG6: // ********************************************************************* regVRSTA[6]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[6]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[6]:=1; KP[6]:=5; // 0.00 ... 9.99 KI[6]:=4; // 0.00 ... 9.99 KD[6]:=3; // 0.00 ... 9.99 regPOVRATNA[6]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... minCV[6]:=0; maxCV[6]:=100; /* realne vrednosti npr. % pri pretoku */ minSetP[6]:=0.1; maxSetP[6]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[6]:=0; maxSumError[6]:=200; // ********** CONFin *** inVRSTA[6]:=cIN_Clor; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[6]:=2000; // 0..20mA=0..2000 inNAVADEN[6]:=1; // 1=navaden vhod, 2=negiran T1minINr[6]:=0; //T1_min_INr (realna vrednost) T2maxINr[6]:=1; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[6]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[6]:=350; T2maxIN[6]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[6]:=cOUT_IMP; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) outADDRESS[6]:=5; // 0=qx00, 1=qx01, 2=qx02 outMIN[6]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[6]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[6]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[6]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[6]:=100; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[6]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[6]:=2000; //T2_maxOUT (max vrednost na izhodu) // REG7: // ********************************************************************* // regVRSTA[7]:=0; //aktiven, ce ga ne uporabimo da damo na 0! regVRSTA[7]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[7]:=1; regPRETOCNI[7]:=1; // 1= pretocni 2=akumulacijski KP[7]:=5; // 0.00 ... 9.99 KI[7]:=4; // 0.00 ... 9.99 KD[7]:=3; // 0.00 ... 9.99 regPOVRATNA[7]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[7]:=016; // iw016 016=slot1 His[7]:= 18; minCV[7]:=0; maxCV[7]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[7]:=500 ; // na primer 5V // minSetP[7]:=0.1; maxSetP[7]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[7]:=0; maxSumError[7]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[7]:=cIN_Rx; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[7]:=2000; // 0..20mA=0..2000 inNAVADEN[7]:=1; // 1=navaden vhod, 2=negiran T1minINr[7]:=0; //T1_min_INr (realna vrednost) T2maxINr[7]:=999; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[7]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[7]:=350; T2maxIN[7]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[7]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[7]:=6; // 0V //1.par vezano na minus SERVO outADDRESS2[7]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[7]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[7]:=4; // 5V //2.par vezano na minus SERVO outMIN[7]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[7]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[7]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[7]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[7]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[7]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[7]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG8: // ********************************************************************* // regVRSTA[8]:=0; //aktiven, ce ga ne uporabimo da damo na 0! regVRSTA[8]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[8]:=1; regPRETOCNI[8]:=1; // 1= pretocni 2=akumulacijski KP[8]:=5; // 0.00 ... 9.99 KI[8]:=4; // 0.00 ... 9.99 KD[8]:=3; // 0.00 ... 9.99 regPOVRATNA[8]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[8]:=016; // iw016 016=slot1 His[8]:= 18; minCV[8]:=0; maxCV[8]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[8]:=500 ; // na primer 5V // minSetP[8]:=0.1; maxSetP[8]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[8]:=0; maxSumError[8]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[8]:=cIN_Rx; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[8]:=2000; // 0..20mA=0..2000 inNAVADEN[8]:=1; // 1=navaden vhod, 2=negiran T1minINr[8]:=0; //T1_min_INr (realna vrednost) T2maxINr[8]:=999; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[8]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[8]:=350; T2maxIN[8]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[8]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[8]:=7; // 0V //1.par vezano na minus SERVO outADDRESS2[8]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[8]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[8]:=4; // 5V //2.par vezano na minus SERVO outMIN[8]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[8]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[8]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[8]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[8]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[8]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[8]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG9: // ********************************************************************* regVRSTA[9]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[9]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[9]:=1; regPRETOCNI[1]:=1; // 1= pretocni 2=akumulacijski KP[9]:=5; // 0.00 ... 9.99 KI[9]:=4; // 0.00 ... 9.99 KD[9]:=3; // 0.00 ... 9.99 regPOVRATNA[9]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[9]:=016; // iw016 016=slot1 His[9]:= 18; minCV[9]:=0; maxCV[9]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[9]:=500 ; // na primer 5V // minSetP[9]:=0.1; maxSetP[9]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[9]:=0; maxSumError[9]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[9]:=cIN_Rx; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[9]:=2000; // 0..20mA=0..2000 inNAVADEN[9]:=1; // 1=navaden vhod, 2=negiran T1minINr[9]:=0; //T1_min_INr (realna vrednost) T2maxINr[9]:=999; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[9]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[1]:=350; T2maxIN[1]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[9]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[9]:=8; // 0V //1.par vezano na minus SERVO outADDRESS2[9]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[9]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[9]:=4; // 5V //2.par vezano na minus SERVO outMIN[9]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[9]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[9]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[9]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[9]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[9]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[9]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG10: // ********************************************************************* regVRSTA[10]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[10]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[10]:=1; regPRETOCNI[10]:=1; // 1= pretocni 2=akumulacijski KP[10]:=5; // 0.00 ... 9.99 KI[10]:=4; // 0.00 ... 9.99 KD[10]:=3; // 0.00 ... 9.99 regPOVRATNA[10]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[10]:=016; // iw016 016=slot1 His[10]:= 18; minCV[10]:=0; maxCV[10]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[10]:=500 ; // na primer 5V // minSetP[10]:=0.1; maxSetP[10]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[10]:=0; maxSumError[10]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[10]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[10]:=2000; // 0..20mA=0..2000 inNAVADEN[10]:=1; // 1=navaden vhod, 2=negiran T1minINr[10]:=0; //T1_min_INr (realna vrednost) T2maxINr[10]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[10]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[10]:=350; T2maxIN[10]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[10]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[10]:=9; // 0V //1.par vezano na minus SERVO outADDRESS2[10]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[10]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[10]:=4; // 5V //2.par vezano na minus SERVO outMIN[10]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[10]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[10]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[10]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[10]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[10]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[10]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG11: // ********************************************************************* regVRSTA[11]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[11]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[11]:=1; regPRETOCNI[11]:=1; // 1= pretocni 2=akumulacijski KP[11]:=5; // 0.00 ... 9.99 KI[11]:=4; // 0.00 ... 9.99 KD[11]:=3; // 0.00 ... 9.99 regPOVRATNA[11]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[11]:=016; // iw016 016=slot1 His[11]:= 18; minCV[11]:=0; maxCV[11]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[11]:=500 ; // na primer 5V // minSetP[11]:=0.1; maxSetP[11]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[11]:=0; maxSumError[11]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[11]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[11]:=2000; // 0..20mA=0..2000 inNAVADEN[11]:=1; // 1=navaden vhod, 2=negiran T1minINr[11]:=0; //T1_min_INr (realna vrednost) T2maxINr[11]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[11]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[11]:=350; T2maxIN[11]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[11]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[11]:=10; // 0V //1.par vezano na minus SERVO outADDRESS2[11]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[11]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[11]:=4; // 5V //2.par vezano na minus SERVO outMIN[11]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[11]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[11]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[11]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[11]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[11]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[11]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG12: // ********************************************************************* regVRSTA[12]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[12]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[12]:=1; //aktiven, ce ga ne uporabimo da damo na 0! // REG2: // ********************************************************************* KP[12]:=5; // 0.00 ... 9.99 KI[12]:=4; // 0.00 ... 9.99 KD[12]:=3; // 0.00 ... 9.99 regPOVRATNA[12]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... minSetP[12]:=0.12; maxSetP[12]:=19.9; /* realne vrednosti */ minCV[12]:=0; maxCV[12]:=100; /* realne vrednosti npr. % pri pretoku */ minSumError[12]:=0; maxSumError[12]:=200; // ********** CONFin *** inVRSTA[12]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[12]:=2000; // 0..20mA=0..2000 inNAVADEN[12]:=1; // 1=navaden vhod, 2=negiran T1minINr[12]:=0; //T1_min_INr (realna vrednost) T2maxINr[12]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[12]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[12]:=350; T2maxIN[12]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[12]:=cOUT_IMP; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) outADDRESS[12]:=11; // 0=qx00, 1=qx01, 2=qx02 outMIN[12]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[12]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[12]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[12]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[12]:=100; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[12]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[12]:=2000; //T2_maxOUT (max vrednost na izhodu) // REG13: // ********************************************************************* // regVRSTA[13]:=0; //aktiven, ce ga ne uporabimo da damo na 0! regVRSTA[13]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[13]:=1; //aktiven, ce ga ne uporabimo da damo na 0! // REG2: // ********************************************************************* KP[13]:=5; // 0.00 ... 9.99 KI[13]:=4; // 0.00 ... 9.99 KD[13]:=3; // 0.00 ... 9.99 regPOVRATNA[13]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... minSetP[13]:=0.12; maxSetP[13]:=19.9; /* realne vrednosti */ minCV[13]:=0; maxCV[13]:=100; /* realne vrednosti npr. % pri pretoku */ minSumError[13]:=0; maxSumError[13]:=200; // ********** CONFin *** inVRSTA[13]:=cIN_Rx; //IN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[13]:=2000; // 0..20mA=0..2000 inNAVADEN[13]:=1; // 1=navaden vhod, 2=negiran T1minINr[13]:=0; //T1_min_INr (realna vrednost) T2maxINr[13]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[13]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[13]:=350; T2maxIN[13]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[13]:=cOUT_IMP; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) outADDRESS[13]:=11; // 0=qx00, 1=qx01, 2=qx02 outMIN[13]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[13]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[13]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[13]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[13]:=100; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[13]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[13]:=2000; //T2_maxOUT (max vrednost na izhodu) // REG14: // ********************************************************************* regVRSTA[14]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[10]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[14]:=1; regPRETOCNI[14]:=1; // 1= pretocni 2=akumulacijski KP[14]:=5; // 0.00 ... 9.99 KI[14]:=4; // 0.00 ... 9.99 KD[14]:=3; // 0.00 ... 9.99 regPOVRATNA[14]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[14]:=016; // iw016 016=slot1 His[14]:= 18; minCV[14]:=0; maxCV[14]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[14]:=500 ; // na primer 5V // minSetP[14]:=0.1; maxSetP[14]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[14]:=0; maxSumError[14]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[14]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[14]:=2000; // 0..20mA=0..2000 inNAVADEN[14]:=1; // 1=navaden vhod, 2=negiran T1minINr[14]:=0; //T1_min_INr (realna vrednost) T2maxINr[14]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[14]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[14]:=350; T2maxIN[14]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[14]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[14]:=9; // 0V //1.par vezano na minus SERVO outADDRESS2[14]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[14]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[14]:=4; // 5V //2.par vezano na minus SERVO outMIN[14]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[14]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[14]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[14]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[14]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[14]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[14]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG15: // ********************************************************************* regVRSTA[15]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[10]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[15]:=1; regPRETOCNI[15]:=1; // 1= pretocni 2=akumulacijski KP[15]:=5; // 0.00 ... 9.99 KI[15]:=4; // 0.00 ... 9.99 KD[15]:=3; // 0.00 ... 9.99 regPOVRATNA[15]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[15]:=016; // iw016 016=slot1 His[15]:= 18; minCV[15]:=0; maxCV[15]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[15]:=500 ; // na primer 5V // minSetP[15]:=0.1; maxSetP[15]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[15]:=0; maxSumError[15]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[15]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[15]:=2000; // 0..20mA=0..2000 inNAVADEN[15]:=1; // 1=navaden vhod, 2=negiran T1minINr[15]:=0; //T1_min_INr (realna vrednost) T2maxINr[15]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[15]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[15]:=350; T2maxIN[15]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[15]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[15]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[15]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[15]:=9; // 0V //1.par vezano na minus SERVO outADDRESS2[15]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[15]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[15]:=4; // 5V //2.par vezano na minus SERVO outMIN[15]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[15]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[15]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[15]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[15]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[15]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[15]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG16: // ********************************************************************* regVRSTA[16]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[16]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[16]:=1; regPRETOCNI[16]:=1; // 1= pretocni 2=akumulacijski KP[16]:=5; // 0.00 ... 9.99 KI[16]:=4; // 0.00 ... 9.99 KD[16]:=3; // 0.00 ... 9.99 regPOVRATNA[16]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[16]:=016; // iw016 016=slot1 His[16]:= 18; minCV[16]:=0; maxCV[16]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[16]:=500 ; // na primer 5V // minSetP[16]:=0.1; maxSetP[16]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[16]:=0; maxSumError[16]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[16]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[16]:=2000; // 0..20mA=0..2000 inNAVADEN[16]:=1; // 1=navaden vhod, 2=negiran T1minINr[16]:=0; //T1_min_INr (realna vrednost) T2maxINr[16]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[16]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[16]:=350; T2maxIN[16]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[16]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[16]:=9; // 0V //1.par vezano na minus SERVO outADDRESS2[16]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[16]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[16]:=4; // 5V //2.par vezano na minus SERVO outMIN[16]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[16]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[16]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[16]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[16]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[16]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[16]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG17: // ********************************************************************* regVRSTA[17]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[10]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[17]:=1; regPRETOCNI[17]:=1; // 1= pretocni 2=akumulacijski KP[17]:=5; // 0.00 ... 9.99 KI[17]:=4; // 0.00 ... 9.99 KD[17]:=3; // 0.00 ... 9.99 regPOVRATNA[17]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[17]:=016; // iw016 016=slot1 His[17]:= 18; minCV[17]:=0; maxCV[17]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[17]:=500 ; // na primer 5V // minSetP[17]:=0.1; maxSetP[17]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[17]:=0; maxSumError[17]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[17]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[17]:=2000; // 0..20mA=0..2000 inNAVADEN[17]:=1; // 1=navaden vhod, 2=negiran T1minINr[17]:=0; //T1_min_INr (realna vrednost) T2maxINr[17]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[17]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[17]:=350; T2maxIN[17]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[17]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[1]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[1]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[17]:=9; // 0V //1.par vezano na minus SERVO outADDRESS2[17]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[17]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[17]:=4; // 5V //2.par vezano na minus SERVO outMIN[17]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[17]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[17]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[17]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[17]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[17]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[17]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** // REG18: // ********************************************************************* regVRSTA[18]:=0; //aktiven, ce ga ne uporabimo da damo na 0! // regVRSTA[10]:=cREG_PID; //aktiven, ce ga ne uporabimo da damo na 0! Auto_Mode[18]:=1; regPRETOCNI[18]:=1; // 1= pretocni 2=akumulacijski KP[18]:=5; // 0.00 ... 9.99 KI[18]:=4; // 0.00 ... 9.99 KD[18]:=3; // 0.00 ... 9.99 regPOVRATNA[18]:=0; //=cIN_PRETOK; // 8=R500 9=R2000 npr.iw016,.... regSERVOaddress[18]:=016; // iw016 016=slot1 His[18]:= 18; minCV[18]:=0; maxCV[18]:=100; /* realne vrednosti npr. % pri pretoku */ maxCVi[18]:=500 ; // na primer 5V // minSetP[18]:=0.1; maxSetP[18]:=10; /* realne vrednosti l/s pri pretoku*/ minSumError[18]:=0; maxSumError[18]:=200; /// SetP[1]:= 600.5; /* % */ // ********** CONFin *** inVRSTA[18]:=cIN_TEMP; // 0=neaktiven, 1=cIN_Clor (mg/L), 2=cIN_pH, 3=cIN_Rx, // 4=cIN_Clor2 (ppm), 5=cIN_PRETOK, 6=cIN_TEMP inMAX[18]:=2000; // 0..20mA=0..2000 inNAVADEN[18]:=1; // 1=navaden vhod, 2=negiran T1minINr[18]:=0; //T1_min_INr (realna vrednost) T2maxINr[18]:=100; //T1_max_INr (realna vrednost) Cl=0..1 L/s T1minIN[18]:=400; //T2_min_IN (vrednost iz vhoda) ALARM[18]:=350; T2maxIN[18]:=2000; //T2_max_IN (vrednost iz vhoda) // ********** CONFout *** outVRSTA[18]:=cOUT_IMP; //cOUT_DIG4x; // VRSTA IZHODA: 1=DIG.IMP., 2=SERVO, 3=1DIG_vklop/izklop, // 4=2xDIG_naprej,nazaj cDIG2x // 5=0..20mA, 6=0..10V, 7=4xDIG (2para+-5V zamenjata fazo) // outADDRESS[18]:=0; // 1.pisalni naslov izhoda: 0=qx000, 1=qx001, ... // outADDRESS2[18]:=1; // 2.pisalni naslov izhoda: 0=qx000, 1=qx001, ... outADDRESS[18]:=9; // 0V //1.par vezano na minus SERVO outADDRESS2[18]:=3; // 5V //1.par vezanao ma plus SERVO out4xADDRESS[18]:=1; // 5V //2.par vezano na plus SERVO out4xADDRESS2[18]:=4; // 5V //2.par vezano na minus SERVO outMIN[18]:=0; // pri cPRETOK pomeni 0=vklop DIG1 (zapiraj) // 1=izklop DIG1 in DIG2 2=vklop DIG2 (odpiraj) outMAX[18]:=2; // maksimalna pisalna vrednost izhoda outNAVADEN[18]:=1; // 1=navaden izhod, 2= negiran izhod T1minOUTr[18]:=0; //T1_minOUTr (min realna vrednost na izhodu) pri pretoku je % T2maxOUTr[18]:=2; //T1_maxOUTr (max realna vrednost na izhodu) pri pretoku je % T1minOUT[18]:=0; //T2_minOUT (min vrednost na izhodu) T2maxOUT[18]:=2000; //T2_maxOUT (max vrednost na izhodu) // ****************************************************************************** end; function TxCOM2:void; language 'Structured Text'; begin // Za DEBUG uporabimo kar COM2 // dprnr(x:int, y:int, width:int, dec:int, value:real); // 012345678901234567890123456789012345678901234567890123456 // dprns(0, 0, 0,'CV=xxx.x PV=xxx.x SP=xxx.x KP=x.xx KI=x.xx KD=x.xx \n'); // dprnr(0, 3, 0, 5, 1, CV[REG]); // dprnr(0, 12, 0, 5, 0, PV[REG]); // dprnr(0, 21, 0, 5, 1, SetP[REG]); // dprnr(0, 30, 0, 4, 2, KP[REG]); // dprnr(0, 38, 0, 4, 2, KI[REG]); // dprnr(0, 46, 0, 4, 2, KD[REG]); // tx_start(53); end; function Read_INP66:void; language 'Structured Text'; begin // if regPOVRATNA[REG]=cIN_PRETOK then // case regSERVOaddress[REG] of // 16: CVservo[REG]:= iw016; // Process Value (read from input) // 17: // else; // end_case; // // end_if; //****** za simulacijo: // Ai[prikazREG]:=Ai[prikazREG]-fp(ix000)-fp(ix001)*20+fp(ix002)+fp(ix003)*10+fp(ix004)*20; // if Ai[prikazREG]< 0 then Ai[prikazREG]:=0; end_if; /* omejitev */ // if Ai[prikazREG] > 2000 then Ai[prikazREG]:=2000; end_if; /* omejitev */ //****** za simulacijo case REG of // 016: PVi[REG]:= iw016; // Process Value (read from input) SLOT1 // 032: PVi[REG]:= iw032; // Process Value (read from input) SLOT2 //Clor // 1. kos aiva-6 .................................................... 1: PVi[REG]:= iw016; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 2: PVi[REG]:= iw017; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 3: PVi[REG]:= iw018; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 4: PVi[REG]:= iw019; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 5: PVi[REG]:= iw020; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 6: PVi[REG]:= iw021; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija // 2. kos aiva-6 .................................................... //pH 7: PVi[REG]:= iw032; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 8: PVi[REG]:= iw033; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 9: PVi[REG]:= iw034; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 10: PVi[REG]:= iw035; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 11: PVi[REG]:= iw036; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 12: PVi[REG]:= iw037; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija //Rx 13: PVi[REG]:= iw064; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 14: PVi[REG]:= iw065; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 15: PVi[REG]:= iw066; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 16: PVi[REG]:= iw067; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 17: PVi[REG]:= iw068; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija 18: PVi[REG]:= iw069; // Process Value (read from input AiVA-6) //PVi[REG]:=Ai[REG]; // simulacija else ; end_case; end; function Write_OUT1:void; language 'Structured Text'; begin //============================================================================== // OUTPUT //============================================================================== case outVRSTA[REG] of cOUT_IMP: //========================= // pretvorba CV v CVimp: //========================= // CV=0 ... CVimp=0 // CV=minCV[REG] ... CVimp=outMINimp[REG] // CV=maxCV[REG] ... CVimp=outMAXimp[REG] koefIMPULZ[REG]:=(outMAXimp[REG] - outMINimp[REG]) / (maxCV[REG] - minCV[REG]); konstIMPULZ[REG]:=outMINimp[REG] - (koefIMPULZ[REG] * minCV[REG]); if (CV[REG]=0) then CVimp[REG]:=outMINimp[REG]; else CVimp[REG]:=CV[REG] * koefIMPULZ[REG] + konstIMPULZ[REG]; end_if; if bPValarm[REG] or bALARM[REG] then CVimp[REG]:=0; end_if; //CVimp= 600/(4+pavza) //pavza+4= 600/Cvimp ...... pavza= 600/Cvimp-4 /* 1imp/min=(600-4)x, 2imp/min=(600/2-4)=x, ... 30imp/min=(600/30-4)x, ...60imp/min=(600/60)-4) */ if CVimp[REG]>0.1 then CV100ms[REG]:=int( (600/CVimp[REG]) - dolgIMP ); else CV100ms[REG]:=999; end_if; cOUT_DIG2x: ////// =4 IZHOD je 2x digitalni en za odpiraj drug za zapiraj ! /* if CVservo[REG] < (CVi[REG] - His[REG]) then naprejNAZAJ[REG]:=2; end_if; if CVservo[REG] = CVi[REG] then naprejNAZAJ[REG]:=0; end_if; if CVservo[REG] > (CVi[REG] + His[REG]) then naprejNAZAJ[REG]:=1; end_if; if (outNAVADEN[REG]=2) then DIG1[REG]:=outADDRESS2[REG]; DIG2[REG]:=outADDRESS[REG]; else DIG2[REG]:=outADDRESS2[REG]; DIG1[REG]:=outADDRESS[REG]; end_if; case naprejNAZAJ[REG] of 0: case DIG2[REG] of 0: qx000:=1; // gremo dol (oz.nazaj) (oz.zapiraj) 1: qx001:=1; 2: qx002:=1; 3: qx003:=1; 4: qx004:=1; 5: qx005:=1; end_case; case DIG1[REG] of 0: qx000:=0; // IZKLOP 1: qx001:=0; 2: qx002:=0; 3: qx003:=0; 4: qx004:=0; 5: qx005:=0; end_case; 1: case DIG2[REG] of 0: qx000:=0; // IZKLOP 1: qx001:=0; 2: qx002:=0; 3: qx003:=0; 4: qx004:=0; 5: qx005:=0; end_case; case DIG1[REG] of 0: qx000:=0; // IZKLOP 1: qx001:=0; 2: qx002:=0; 3: qx003:=0; 4: qx004:=0; 5: qx005:=0; end_case; 2: case DIG1[REG] of 0: qx000:=1; // gremo gor (oz.naprej) (oz.odpiraj) 1: qx001:=1; 2: qx002:=1; 3: qx003:=1; 4: qx004:=1; 5: qx005:=1; end_case; case DIG2[REG] of 0: qx000:=0; // IZKLOP 1: qx001:=0; 2: qx002:=0; 3: qx003:=0; 4: qx004:=0; 5: qx005:=0; end_case; else dprns( 0, 1,'error wr_OUT'); end_case; */ end_case; end; function NastaviSetP:void; language 'Structured Text'; begin /******************************************************************* nastavi SetPoint *******************************************************************/ /* if minSetP[prikazREG]>maxSetP[prikazREG] then maxSetP[prikazREG]:=minSetP[prikazREG]+9.9; end_if; if maxSetP[prikazREG]>inPValarm[prikazREG] then maxSetP[prikazREG]:=inPValarm[prikazREG]; end_if; */ // // dprnb(2,0,' ','%',clock_1s); SetP[PrikazREG]:=SetP[PrikazREG] + fp(key_up) * 0.1 - fp(key_dn) * 0.1; // if hitreTIPKEup.q then SetP[PrikazREG]:=SetP[PrikazREG] + 2; end_if; hitreTIPKEup.in:=key_up and not fp(hitreTIPKEup.q); // if hitreTIPKEdn.q then SetP[PrikazREG]:=SetP[PrikazREG] - 2; end_if; hitreTIPKEdn.in:=key_dn and not fp(hitreTIPKEdn.q); if SetP[PrikazREG]>maxSetP[PrikazREG] then SetP[PrikazREG]:=maxSetP[PrikazREG]; end_if; if SetP[PrikazREG] 0)and (Error[REG] < 0)) then First_PID_Execution[REG] := 2; Last_PV[REG] := PV[REG]; end_if; if ((Initial_Error[REG] < 0) and (Error[REG] > 0)) then First_PID_Execution[REG] := 2; Last_PV[REG] := PV[REG]; end_if; Last_SetP[REG] := SetP[REG]; else //* ----- normal loop ----- begin */ d_PV[REG] := Last_PV[REG] - PV[REG]; if bPIDnegiran[REG] then d_PV[REG] := -d_PV[REG]; end_if; // v045 Last_PV[REG] := PV[REG]; Dterm[REG] := KD[REG] * d_PV[REG]; if (SetP[REG] == Last_SetP[REG]) then Pterm[REG] := KP[REG] * Error[REG]; else Pterm[REG] := 0; Dterm[REG] := 0; if ((SetP[REG] > Last_SetP[REG]) and (PV[REG] > SetP[REG])) then Last_SetP[REG] := SetP[REG]; Last_PV[REG] := PV[REG]; end_if; if ( (SetP[REG] < Last_SetP[REG]) and (PV[REG] < SetP[REG]) ) then Last_SetP[REG] := SetP[REG]; Last_PV[REG] := PV[REG]; end_if; end_if; //* ----- normal loop ----- end */ end_if; CV[REG] := Pterm[REG] + Iterm[REG] + Dterm[REG]; else /* if NOT auto mode */ CV[REG] := Manual_Value[REG]; First_PID_Execution[REG] := 0; end_if; //============================================================================== // Omejitve //============================================================================== if CV[REG]>maxCV[REG] then CV[REG]:=maxCV[REG]; end_if; if SetP[REG]>maxSetP[REG] then SetP[REG]:=maxSetP[REG]; end_if; if CV[REG]maxSumError[REG] then Sum_Error[REG]:=maxSumError[REG]; end_if; if Sum_Error[REG]=1 then /* predno gremo na naslednja polja z istim index-om SAVE spremenljivke */ /* write */ regVRSTA[index]:=t_regVRSTA; T1minINr[index]:=t_T1minINr; T2maxINr[index]:=t_T2maxINr; inVRSTA[index]:=t_inVRSTA; bPIDnegiran[index]:=t_bPIDnegiran; decPIKA[index]:=t_decPIKA; SetP[index]:=t_SetP; outMINimp[index]:=t_outMINimp; outMAXimp[index]:=t_outMAXimp; inPVAlarmMax[index]:=t_inPVAlarmMax; inPVAlarmMin[index]:=t_inPVAlarmMin; inDelay[index]:=t_inDELAY; KP[index]:=t_KP; KI[index]:=t_KI; KD[index]:=t_KD; /* last pair entered, force exit */ input_mask:=0; /* TOLE POVZROČI IZHOD Iz NASTAVLJANJA PARAMETROV */ /* end_if; */ elsif index<=steviloREG then /* predno jih zacnemo popravljati jih RESTORE spremenljivke */ index:=prikazREG; /* v039 */ /* read */ t_regVRSTA:=regVRSTA[index]; t_T1minINr:=T1minINr[index]; t_T2maxINr:=T2maxINr[index]; t_inVRSTA:=inVRSTA[index]; t_bPIDnegiran:=bPIDnegiran[index]; t_decPIKA:=decPIKA[index]; t_SetP:=SetP[index]; t_outMINimp:=outMINimp[index]; t_outMAXimp:=outMAXimp[index]; t_inPVAlarmMax:=inPVAlarmMax[index]; t_inPVAlarmMin:=inPVAlarmMin[index]; t_inDELAY:=inDELAY[index]; t_KP:=KP[index]; t_KI:=KI[index]; t_KD:=KD[index]; // input_mask:=mREG; /* skok na prvo vhodno točko s parametri v MaskEditor */ // input_mask:=mCALT1in; /* skok na prvo vhodno točko s parametri v MaskEditor */ input_mask:=mregVRSTA; /* skok na prvo vhodno točko s parametri v MaskEditor v52m */ else /* last pair entered, force exit */ input_mask:=0; /* TOLE POVZROČI IZHOD Iz NASTAVLJANJA PARAMETROV */ end_if; end_if; end; function communication:void; language 'Structured Text'; begin // na COM2 if first_scan then com_init(19200,8,0,1); end_if; case step of 0: /* disable local echo */ if not(rx_active()) then dprns(0,0,0,'ate0\n'); tx_start(6); rx_start(0,0,0,MTOUT,CTOUT); // step:=step+1; step:=step+3; //ce nimamo pin-a end_if; 1: /* ask for PIN */ if not(rx_active()) then end_if; 2: /* enter PIN */ if not(rx_active()) then end_if; 3: /* set text mode */ if not(rx_active()) then if rx_strpos(0,'OK')<>-1 then dprns(0,0,0,'at+cmgf=1\n'); tx_start(11); rx_start(0,'\r',0,0,CTOUT); step:=step+1; else /* PIN not ok */ step:=0; /* ce ni v redu gre kar na zacetek */ end_if; end_if; 4: /* idle loop */ if sms_send_request and rx_count()=0 then sms_send_request:=NO; /* enter your GSM number here */ //...................01234567890123456789 // dprns(0,0,0,'at+cmgs="041402779"\n'); //.................01234567890123456789 dprns(0,0,0,'at+cmgs="070683023"\n'); dprnl(0,10,0,8,yes,gsmNo); //v text "spravi" spremenljivko! tx_start(21); rx_start(0,'>',0,MTOUT,CTOUT); step:=5; end_if; if not(rx_active()) then if rx_strpos(0,'+CMTI')<>-1 then sms_id:=rx_strtoi(rx_strpos(0,'+CMTI')+12); //...................01234567890123456789 dprns(0,0,0,'at+cmgr=xxx\n'); dprni(0,8,0,3,no,sms_id); tx_start(13); rx_start(0,0,0,MTOUT,MTOUT); step:=6; else rx_start(0,0,0,0,CTOUT); end_if; end_if; 5: /* send SMS message */ bSMSneVec:=0; /* SMS se ni definiran */ if not(rx_active()) then if rx_strpos(0,'>')<>-1 then /* najdemo morebitni se ne poslani Analogni alarm! */ for iii:=1 to SteviloREG do if (!bSMSneVec and (PValarmSMS[iii]>0) and (SMStimerA[iii]=0) and (SMSa[iii]=1)) then /* Ce je ravnokar prisel na dolocenem reg. alarm ... */ SMStimerA[iii]:=1; /* ... se postavi stevec na prvo sekundo! .... */ AlarmSms_REG:=iii; /* ... in zapomni si st. regulatorja oz. an. vhoda za alarm! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ case inVRSTA[AlarmSms_REG] of cIN_Clor: // 0123456789012345678901234567890123456789012345678901234567890 dprns( 0, 0, 0, 'ALARM: REG=x Cl = x.xx mg/L i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[AlarmSms_REG], PV[AlarmSms_REG]); cIN_Ph: dprns( 0, 0, 0, 'ALARM: REG=x Ph = xx.xx pH i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[AlarmSms_REG], PV[AlarmSms_REG]); cIN_Rx: dprns( 0, 0, 0, 'ALARM: REG=x Rx = xx.xx mV i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[AlarmSms_REG], PV[AlarmSms_REG]); cIN_Clor2: dprns( 0, 0, 0, 'ALARM: REG=x Cl = xx.xx ppm i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[AlarmSms_REG], PV[AlarmSms_REG]); end_case; dprni(0, 11, 0, 2, yes, AlarmSms_REG); //v text "spravi" spremenljivko! dprni(0, 30, 0, 4, yes, PVi[AlarmSms_REG]); end_if; end_for; // 0123456789012345678901234567890123456789012345678901234567890 if !bSMSneVec and (SMSdig[1]=1) and (SMStimerD[1]=0) then /* samo v 0. sekundi timerja ...se poslje SMS! */ dprns(0, 0, 0, 'ALARM: Dig. ix000 Ni KLORA !!! Menjaj balon \1A'); SMStimerD[1]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[1]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z if !bSMSneVec and (SMSdig[2]=1) and (SMStimerD[2]=0) then dprns(0, 0, 0, 'ALARM: Dig. ix001 Ni KISLINE !! Menjaj balon \1A'); SMStimerD[2]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[2]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z if !bSMSneVec and (SMSdig[3]=1) and (SMStimerD[3]=0) then dprns(0, 0, 0, 'ALARM: Dig. ix002 Ni pretoka BAZEN \1A'); SMStimerD[3]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[3]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z if !bSMSneVec and (SMSdig[4]=1) and (SMStimerD[4]=0) then dprns(0, 0, 0, 'ALARM: Dig. ix003 Ni pretoka WHIRPOOL \1A'); SMStimerD[4]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[4]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z if !bSMSneVec and (SMSdig[5]=1) and (SMStimerD[5]=0) then dprns(0, 0, 0, 'ALARM: Dig. ix004 Ni pretoka KNEIP \1A'); SMStimerD[5]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[5]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z if !bSMSneVec and (SMSdig[6]=1) and (SMStimerD[6]=0) then dprns(0, 0, 0, 'ALARM: Dig. ix005 Poplava strojnice !!!!!! \1A'); SMStimerD[6]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[6]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z if !bSMSneVec and (SMSdig[7]=1) and (SMStimerD[7]=0) then dprns(0, 0, 0, 'ALARM: Dig. ix006 Temperatura BOJLER !!!! \1A'); SMStimerD[7]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[7]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z if !bSMSneVec and (SMSdig[8]=1) and (SMStimerD[8]=0) then dprns(0, 0, 0, 'ALARM: Dig. ix007 \1A'); SMStimerD[8]:=1; /* postavitev timerja "na prvo sekundo" !! */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ SMSdig[8]:=0; /* označimo, da smo poslali */ end_if; //pripravi text ter nato \1A=Ctrl-Z //bSneGlej:=0; // Zaradi zahteve (poslan je bil "SMSstatus?") po statusu alarimiranja se poslje naslednje: */ if !bSMSneVec and bSMSstatus=1 then /* ce smo zahtevali z SMS-om SMS status ... */ if bSMSactive then // 012345678901234567890123456789012345678901234567891234567890 /*bSMSactive=1*/ dprns(0, 0, 0, 'SMSstatus=en. D:_2345678 A:_23456789__23456789__234 \1A'); else /*bSMSactive=0*/ dprns(0, 0, 0, 'SMSstatus=dis.D:_2345678 A:_23456789__23456789__234 \1A'); end_if; for s:=1 to 8 do /* digitalni */ dprni(0, 15+s, 0, 1, yes, int(SMSd[s])); //v text "spravi" spremenljivko! end_for; for s:=1 to SteviloREG do /* analogni */ dprni(0, 26+s, 0, 1, yes, int(SMSa[s])); //v text "spravi" spremenljivko! end_for; bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ bSMSstatus:=0; end_if; //pripravi text ter nato \1A=Ctrl-Z // Zaradi zahteve (poslan je bil "REG?=") po statusu alarimiranja se poslje naslednje: */ if !bSMSneVec and (REGrequest>0) then /* ce smo zahtevali z SMS-om SMS status ... */ bSMSneVec:=1; /* SMS je ze definiran, zato onemogoci nadaljno kreiranje SMS-a */ /* Glede na vrsto regulacije izpisemo zeljeni text */ case inVRSTA[REGrequest] of cIN_Clor: // 0123456789012345678901234567890123456789012345678901234567890 dprns( 0, 0, 0, 'info: REG=x Cl = x.xx mg/L i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[REGrequest], PV[REGrequest]); cIN_Ph: // 0123456789012345 dprns( 0, 0, 0, 'info: REG=x Ph = xx.xx pH i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[REGrequest], PV[REGrequest]); cIN_Rx: // 0123456789012345 dprns( 0, 0, 0, 'info: REG=x Rx = xx.xx mV i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[REGrequest], PV[REGrequest]); cIN_Clor2: // 0123456789012345 dprns( 0, 0, 0, 'info: REG=x Cl = xx.xx ppm i=iiii \1A'); //pripravi text ter nato \1A=Ctrl-Z dprnr( 0, 18, 0, 5, decPIKA[REGrequest], PV[REGrequest]); end_case; dprni(0, 11, 0, 2, yes, REGrequest); //v text "spravi" spremenljivko! dprni(0, 30, 0, 4, yes, PVi[REGrequest]); REGrequest:=0; end_if; tx_start(60); //37); /* tole je dolzina SMS-a oz. text-a !!!!!!!!! v50b=60 namesto prej 37 */ rx_start(0,0,0,MTOUT,CTOUT); step:=4; else /* send error: no prompt */ rx_start(0,0,0,0,CTOUT); step:=4; end_if; end_if; 6: /* receive SMS message */ if not(rx_active()) then if (rx_strpos(0,'+CMGR')<>-1) /*and (rx_strpos(0,'OK')<>-1)*/ then /* SMS received, parse content */ if rx_strpos(0,'SMSdisable')<>-1 then bSMSactive:=0; end_if; /* Enable SMS message */ if rx_strpos(0,'SMSenable')<>-1 then bSMSactive:=1; end_if; /* Enable SMS message */ // if rx_strpos(0,'CNT=')<>-1 then //ce je prisel text/SMS z tem stringom potem... // cnter:=rx_strtol(rx_strpos(0,'CNT=')+4); //...string pretvorimo v long int! if rx_strpos(0,'gsmNo=')<>-1 then //ce je prisel text/SMS z tem stringom potem... gsmNo:=rx_strtol(rx_strpos(0,'gsmNo=')+6); //...string pretvorimo v long int! end_if; if rx_strpos(0,'REG?=')<>-1 then //ce je prisel text/SMS z tem stringom potem... REGrequest:=rx_strtoi(rx_strpos(0,'REG?=')+5); //...string pretvorimo v long int! end_if; if rx_strpos(0,'SMSd1=1')<>-1 then SMSd[1]:=1; end_if; if rx_strpos(0,'SMSd2=1')<>-1 then SMSd[2]:=1; end_if; if rx_strpos(0,'SMSd3=1')<>-1 then SMSd[3]:=1; end_if; if rx_strpos(0,'SMSd4=1')<>-1 then SMSd[4]:=1; end_if; if rx_strpos(0,'SMSd5=1')<>-1 then SMSd[5]:=1; end_if; if rx_strpos(0,'SMSd6=1')<>-1 then SMSd[6]:=1; end_if; if rx_strpos(0,'SMSd7=1')<>-1 then SMSd[7]:=1; end_if; if rx_strpos(0,'SMSd8=1')<>-1 then SMSd[8]:=1; end_if; if rx_strpos(0,'SMSd1=0')<>-1 then SMSd[1]:=0; end_if; if rx_strpos(0,'SMSd2=0')<>-1 then SMSd[2]:=0; end_if; if rx_strpos(0,'SMSd3=0')<>-1 then SMSd[3]:=0; end_if; if rx_strpos(0,'SMSd4=0')<>-1 then SMSd[4]:=0; end_if; if rx_strpos(0,'SMSd5=0')<>-1 then SMSd[5]:=0; end_if; if rx_strpos(0,'SMSd6=0')<>-1 then SMSd[6]:=0; end_if; if rx_strpos(0,'SMSd7=0')<>-1 then SMSd[7]:=0; end_if; if rx_strpos(0,'SMSd8=0')<>-1 then SMSd[8]:=0; end_if; if rx_strpos(0,'SMSa1=1')<>-1 then SMSa[1]:=1; end_if; if rx_strpos(0,'SMSa2=1')<>-1 then SMSa[2]:=1; end_if; if rx_strpos(0,'SMSa3=1')<>-1 then SMSa[3]:=1; end_if; if rx_strpos(0,'SMSa4=1')<>-1 then SMSa[4]:=1; end_if; if rx_strpos(0,'SMSa5=1')<>-1 then SMSa[5]:=1; end_if; if rx_strpos(0,'SMSa6=1')<>-1 then SMSa[6]:=1; end_if; if rx_strpos(0,'SMSa7=1')<>-1 then SMSa[7]:=1; end_if; if rx_strpos(0,'SMSa8=1')<>-1 then SMSa[8]:=1; end_if; if rx_strpos(0,'SMSa9=1')<>-1 then SMSa[9]:=1; end_if; if rx_strpos(0,'SMSa10=1')<>-1 then SMSa[10]:=1; end_if; if rx_strpos(0,'SMSa11=1')<>-1 then SMSa[11]:=1; end_if; if rx_strpos(0,'SMSa12=1')<>-1 then SMSa[12]:=1; end_if; if rx_strpos(0,'SMSa13=1')<>-1 then SMSa[13]:=1; end_if; if rx_strpos(0,'SMSa14=1')<>-1 then SMSa[14]:=1; end_if; if rx_strpos(0,'SMSa15=1')<>-1 then SMSa[15]:=1; end_if; if rx_strpos(0,'SMSa16=1')<>-1 then SMSa[16]:=1; end_if; if rx_strpos(0,'SMSa17=1')<>-1 then SMSa[17]:=1; end_if; if rx_strpos(0,'SMSa18=1')<>-1 then SMSa[18]:=1; end_if; if rx_strpos(0,'SMSa19=1')<>-1 then SMSa[19]:=1; end_if; if rx_strpos(0,'SMSa20=1')<>-1 then SMSa[20]:=1; end_if; if rx_strpos(0,'SMSa21=1')<>-1 then SMSa[21]:=1; end_if; if rx_strpos(0,'SMSa22=1')<>-1 then SMSa[22]:=1; end_if; if rx_strpos(0,'SMSa23=1')<>-1 then SMSa[23]:=1; end_if; if rx_strpos(0,'SMSa24=1')<>-1 then SMSa[24]:=1; end_if; if rx_strpos(0,'SMSa1=0')<>-1 then SMSa[1]:=0; end_if; if rx_strpos(0,'SMSa2=0')<>-1 then SMSa[2]:=0; end_if; if rx_strpos(0,'SMSa3=0')<>-1 then SMSa[3]:=0; end_if; if rx_strpos(0,'SMSa4=0')<>-1 then SMSa[4]:=0; end_if; if rx_strpos(0,'SMSa5=0')<>-1 then SMSa[5]:=0; end_if; if rx_strpos(0,'SMSa6=0')<>-1 then SMSa[6]:=0; end_if; if rx_strpos(0,'SMSa7=0')<>-1 then SMSa[7]:=0; end_if; if rx_strpos(0,'SMSa8=0')<>-1 then SMSa[8]:=0; end_if; if rx_strpos(0,'SMSa9=0')<>-1 then SMSa[9]:=0; end_if; if rx_strpos(0,'SMSa10=0')<>-1 then SMSa[10]:=0; end_if; if rx_strpos(0,'SMSa11=0')<>-1 then SMSa[11]:=0; end_if; if rx_strpos(0,'SMSa12=0')<>-1 then SMSa[12]:=0; end_if; if rx_strpos(0,'SMSa13=0')<>-1 then SMSa[13]:=0; end_if; if rx_strpos(0,'SMSa14=0')<>-1 then SMSa[14]:=0; end_if; if rx_strpos(0,'SMSa15=0')<>-1 then SMSa[15]:=0; end_if; if rx_strpos(0,'SMSa16=0')<>-1 then SMSa[16]:=0; end_if; if rx_strpos(0,'SMSa17=0')<>-1 then SMSa[17]:=0; end_if; if rx_strpos(0,'SMSa18=0')<>-1 then SMSa[18]:=0; end_if; if rx_strpos(0,'SMSa19=0')<>-1 then SMSa[19]:=0; end_if; if rx_strpos(0,'SMSa20=0')<>-1 then SMSa[20]:=0; end_if; if rx_strpos(0,'SMSa21=0')<>-1 then SMSa[21]:=0; end_if; if rx_strpos(0,'SMSa22=0')<>-1 then SMSa[22]:=0; end_if; if rx_strpos(0,'SMSa23=0')<>-1 then SMSa[23]:=0; end_if; if rx_strpos(0,'SMSa24=0')<>-1 then SMSa[24]:=0; end_if; if rx_strpos(0,'SMSstatus?')<>-1 then bSMSstatus:=1; // SMS_ALARMdelayD1.et:=SMS_ALARMdelayD1.pt; /* se TAKOJ zahteva SMS... brez mozne zakasnitve */ end_if; /* delete message after reading */ // 0123456789012 dprns(0,0,0,'at+cmgd=xxx\n'); dprni(0,8,0,3,yes,sms_id); tx_start(13); // 12 ali 13 tukaj!!!?????????? // rx_start(0,0,0,MTOUT,CTOUT); step:=4; else /* message read failed */ rx_start(0,0,0,0,CTOUT); step:=4; end_if; end_if; else step:=0; end_case; end; function ONoffRegulator:void; language 'Structured Text'; begin // navaden ON / OFF regulator PV[REG] := PVi[REG] * koefPV[REG] + konstPV[REG]; if (outNAVADEN[REG]=1) then //navaden izhod if (PV[REG]SteviloREG) /*v51e or ((regVRSTA[prikazREG]=0)*/ and (input_mask=0)) then if ( (prikazREG>SteviloREG) and (input_mask=0)) then /* v51e!!! */ prikazREG:=1; end_if; if fp(key_up) or fp(key_dn) then bSetP:=true; WaitPrikazSP.in:=false; WaitPrikazSP.in:=true; end_if; if bSetP then WaitPrikazSP.in:=true; TipPrikaza:=1; else WaitPrikazSP.in:=false; end_if; if WaitPrikazSP.q then bSetP:=false; TipPrikaza:=0; end_if; /* if bSetP then NastaviSetP(); end_if; */ //============================================================================== // Kontrola vrednosti pred regulacijo //============================================================================== //============================================================================== // REGULACIJA //============================================================================== // if fp(clock_1s) then // sec:=(sec+1)%60; // increment seconds // min:=(min+(sec=0))%60; // increment minutes // end_if; // R E G U L A T O R 1 ========= REGULATOR 1===================== // REG:=1; /* !!!!!!!!!!!!!!!! REGULATOR 1 !!!!!!!!!!!!!!!!!!!! */ tSMSdelayMIN.in:=0; /* pulzni timer: določa MAX pogostnost med SMS-i! v52m */ //v048b SMS alarm -----------------------begin //v51e zadnji izvrseni digitalni alarm! /* SMSdig[ se postavi na 1 ob fp(ix00x) na 0 ga da pa DIGtimer[ */ /* SMStimer[ gre na 0 po preteku cSMSdelay (5min) */ if bSMSactive then if ( fp(ix000=1) and (SMSd[1]=1) ) then SMSdig[1]:=1; end_if; if ( fp(ix001=1) and (SMSd[2]=1) ) then SMSdig[2]:=1; end_if; if ( fp(ix002=1) and (SMSd[3]=1) ) then SMSdig[3]:=1; end_if; if ( fp(ix003=1) and (SMSd[4]=1) ) then SMSdig[4]:=1; end_if; if ( fp(ix004=1) and (SMSd[5]=1) ) then SMSdig[5]:=1; end_if; if ( fp(ix005=1) and (SMSd[6]=1) ) then SMSdig[6]:=1; end_if; if ( fp(ix006=1) and (SMSd[7]=1) ) then SMSdig[7]:=1; end_if; if ( fp(ix007=1) and (SMSd[8]=1) ) then SMSdig[8]:=1; end_if; // if SMSdig>0 then bSneGlej:=1; end_if; end_if; /* DIGITALNI */ FOR ddd:=1 to 8 do if ( (SMSdig[ddd]>0) and (SMStimerD[ddd]=0) ) then if (gsmNo>31000000) and !tSMSdelayMIN.q then sms_send_request:=YES; end_if; tSMSdelayMIN.in:=sms_send_request; end_if; end_for; //v048b SMS alarm -----------------------end For REG:=1 to SteviloREG do Read_INP66(); /* BEREMO BOLJ POGOSTO */ // alarm ----------------------- if !bPIDnegiran[REG] then if PV[REG]>=inPValarmMax[REG] then bPValarm[REG]:=TRUE; // Qx005:=1; else bPValarm[REG]:=FALSE; end_if; elsif PV[REG]<=inPValarmMax[REG] then bPValarm[REG]:=TRUE; // Qx005:=1; else bPValarm[REG]:=FALSE; end_if; //v048b SMS alarm -----------------------begin if bSMSactive and !sms_send_request then if !bPIDnegiran[REG] then PValarmSMS[REG]:=0; /* začetno stanje v52m */ if PV[REG]>=inPValarmMax[REG] then PValarmSMS[REG]:=REG; end_if /* zapomnimo si kateri an.vhod oz. REGulator je pod alarmom! */ elsif PV[REG]<=inPValarmMax[REG] then PValarmSMS[REG]:=REG; end_if; /* zapomnimo si kateri an.vhod oz. REGulator je pod alarmom! */ // novo v v052j begin if !bPIDnegiran[REG] and (PValarmSMS[REG]=0) then if PV[REG]inPValarmMin[REG] then PValarmSMS[REG]:=REG; end_if; /* zapomnimo si kateri an.vhod oz. REGulator je pod alarmom! */ // novo v v052j end if (SMSa[REG]=0) then PValarmSMS[REG]:=0; end_if; /* disable if not enabled ! */ // if /*!SMS_ALARMdelayD1.q and*/ fp((PValarmSMS[REG]>0) or (SMSdig[REG]>0)) then /* ANALOGNI */ if ( (PValarmSMS[REG]>0) and (SMStimerA[REG]=0) ) then if (gsmNo>31000000) and !tSMSdelayMIN.q then sms_send_request:=YES; end_if; tSMSdelayMIN.in:=sms_send_request; end_if; end_if; // bSMSactive //v048b SMS alarm -----------------------end end_for; /* call PRIKAZ/DISPLAY OP1 subroutine */ prikaz(); /* PRIKAZUJEMO BOLJ POGOSTO */ //*******************************************************************/ v51e v25h // SMS casovna kontrola po kanalu! // SMStimer[ se prvic postavi na 1 po poslanem SMS-u (glej communication), nato se povecuje // tukaj! if fp(clock_1s) then /* stetje sekund */ /* časovniki/timerji za DIGITALNE SMS alarme */ For iii:=1 to 8 do if /*(SMSdig[iii]=1) and*/ (SMStimerD[iii]>0) then /* ce je aktiven dolocen dig. alarm se timer ... */ SMStimerD[iii]:=SMStimerD[iii]+1; /* ... povecuje */ end_if; if SMStimerD[iii]>cSMSdelay then SMStimerD[iii]:=0; SMSdig[iii]:=0; end_if; end_for; /* DIGIT. */ /* časovniki/timerji za ANALOGNE SMS alarme */ For REG:=1 to SteviloREG do if /*(PValarmSMS[REG]>0) and */ (SMStimerA[REG]>0) then /* ce je aktiven dolocen dig. alarm se timer ... */ SMStimerA[REG]:=SMStimerA[REG]+1; /* ... povecuje */ end_if; if SMStimerA[REG]>cSMSdelay then SMStimerA[REG]:=0; end_if; end_for; /* ANALOG */ end_if; //*******************************************************************/ // sms_send_request:=NO; // /* press key_f to send SMS message */ // if fp(key_f) then // sms_send_request:=YES; // end_if; /* call communication subroutine 1x @ second */ if bSMSstatus and !tSMSdelayMIN.q then sms_send_request:=YES; end_if; /* zahteva po sporocilu o statusu */ if (REGrequest>0) and (REGrequest<=SteviloREG) and !tSMSdelayMIN.q then sms_send_request:=YES; /* zahteva po sporocilu o regulatorju REG */ end_if; tSMSdelayMIN.in:=sms_send_request; /* tole mora biti na koncu zadnje dodelitve sms_send_request */ if fp(clock_1s) then communication(); end_if; //*******************************************************************/ // NOBEN alarem ne sme biti prisoten...za izklop Qx05 ! // if !bPValarm[1] and !bPValarm[2] and !bPValarm[3] then Qx005:=0; end_if; if fp(clock_1s) or fn(clock_1s) then For REG:=1 to SteviloREG do vzorciPID[REG]:=(vzorciPID[REG]+1)%CASvzorca[REG]; if (vzorciPID[REG]=1) then bVzorecPID[REG]:=1; fn_bVzorecPID[REG]:=FALSE; else bVzorecPID[REG]:=0; fp_bVzorecPID[REG]:=FALSE; end_if; CASvzorca[REG]:=inDELAY[REG]; /* Čas po katerem se računa PID !!!! */ // BEREMO VHODE NA NEGATIVNI FLANKI...POSTAVLJAMO IZHODE PA NA POZITIVNI FLANKI.....! // __|----|_____ if ( !bVzorecPID[REG] and !fn_bVzorecPID[REG] ) then Read_INP66(); bPIDr[REG]:=FALSE; fn_bVzorecPID[REG]:=TRUE; /* DISABLE second time */ end_if; /* !!!!!!!!!!!!!!!! */ // ALARM premajhne vrednosti na analognem vhodu! (ponavadi 4 mA !) if ( PVi[REG]<(ALARM[REG]) ) then bALARM[REG]:=TRUE; else bALARM[REG]:=FALSE; end_if; // _______|----|_____POZITIVNA FLANKA if bVzorecPID[REG] and !fp_bVzorecPID[REG] then fp_bVzorecPID[REG]:=TRUE; /* DISABLE second time */ if (regVRSTA[REG]>0) then case regVRSTA[REG] of cREG_PID: // Read_INP1(); bPIDr[REG]:=TRUE; Areg:=REG; PIDregulator(); Write_OUT1(); //krm cREG_KRM: //krm Read_INP1(); //krm if (ALARM[REG]=0) then KRMregulator(); end_if; cREG_0_1: bPIDr[REG]:=TRUE; Areg:=REG; ONoffRegulator(); //Write_OUT2(); end_case; end_if; // if REG=1 then TxCOM2(); end_if; // ZA DEBUG regulacije.... // else // // prikaz(); // ce nimamo: fp(bVzorecPID[REG]) end_if; //...TOREJ POSTAVLJAMO IZHOD V NEGATIVNI POZICIJI bVzorec // filter za bVzorec mora biti znotraj rutine ..... //krm if (regVRSTA[REG]=cREG_KRM) and (ALARM[REG]=0) then Write_OUT4x(); end_if; end_for; end_if; //============================================================================== // AKTIVIRANJE IN KONTROLA IZHODNIH IMPULZOV CV100ms //============================================================================== if fp(clock_100ms) then For REG:=1 to SteviloREG do //--------------- portorož 01b if (regVRSTA[REG]=cREG_0_1) then //če je ON / OFF reg. ... je reg. izhoda čisti ON / OFF // bVzorecOUT se nastavlja v ONoffRegulator-ju! else //...če ni ON / OFF je kot prej VzorciOUT[REG]:=(VzorciOUT[REG]+1)%CV100ms[REG]; if (VzorciOUT[REG]>=1) and (VzorciOUT[REG]<=dolgIMP) then bVzorecOUT[REG]:=1; else bVzorecOUT[REG]:=0; end_if; end_if; //--------------- portorož 01b //v0.47b Ce je: bPValarm[REG] or bALARM[REG] se tako in tako postavi CV100ms[REG] na 0 zato: if ((CV100ms[REG]=999) and (regVRSTA[REG]=cREG_PID)) then // tukaj je alarm ali "izklopljeni" oz. nedelujoci izhodi! // Niti ni potrebno postaviti bVzorecOUT[REG] na nic... else case outADDRESS[REG] of 1: qx000:=bVzorecOUT[REG]; 2: qx001:=bVzorecOUT[REG]; 3: qx002:=bVzorecOUT[REG]; 4: qx003:=bVzorecOUT[REG]; 5: qx004:=bVzorecOUT[REG]; 6: qx005:=bVzorecOUT[REG]; end_case; end_if; End_for; end_if; //============================================================================== // Nastavitev ter izracun T1 ter T2 //============================================================================== // koefPV=(T1maxINr-T1minINr) / (T2maxIN-T1minIN) // konstPV=T1minINr - (koef. * T1minIN) if TipPrikaza>cMaxTipPrikaza then TipPrikaza:=0; end_if; if current_mask>0 then Read_INP66(); end_if; //ReadIN_OUTprikaz(); end_if; prej?? case current_mask of 0: // normalno stanje if fp(key_f) then TipPrikaza:=TipPrikaza+1; end_if; if key_up then WaitT1_T2.in:=1; else WaitT1_T2.in:=0; end_if; if fp(WAITT1_T2.q) then izracunKOEF(); end_if; /* v038 krm if (TipPrikaza=1) and (regVRSTA[prikazREG]=cREG_KRM) and key_up then if fp(key_dn) then // ce imamo tudi enter potem... CALtocka:=0; // ni se nobene definirane else potrdiTOCKO.in:=1; // ...drugace START TIMER ZA POTRDITEV TOCKE! end_if; else potrdiTOCKO.in:=0; // reset timerja za potrditev! end_if; if potrdiTOCKO.q and fp(key_e) then // ****** CAL.TOCKE PRI KRMILJENJU ******* CALtocka:=CALtocka + 1; TOCKEin[CALtocka]:=real(PVi[prikazREG]); TOCKEservo[CALtocka]:=real(CVservo[prikazREG]); t:=CALtocka; if t>=2 then if (TOCKEservo[t] - TOCKEservo[t-1])=0 then TOCKEkoef[t]:=real(0); TOCKEkonst[t]:=real(TOCKEservo[t]); else TOCKEkoef[t]:=(TOCKEin[t] - TOCKEin[t-1]) / (TOCKEservo[t] - TOCKEservo[t-1]); TOCKEkonst[t]:=TOCKEin[t-1] - ( TOCKEkoef[t] * TOCKEservo[t-1]); end_if; end_if; end_if; */ mCALT1in: dprnb( 1, 1,' ','=',clock_1s); // realna vrednost se vnasa preko maske! if fp(key_f) then T1minIN[prikazREG]:=PVi[prikazREG]; end_if; mCALT2in: // realna vrednost se vnasa preko maske! dprnb( 1, 1,' ','=',clock_1s); if fp(key_f) then T2maxIN[prikazREG]:=PVi[prikazREG]; end_if; else; end_case; //============================================================================== // MASK support //============================================================================== MASK_support(); //============================================================================== // Real Time Clock.. //============================================================================== // // RTC_leto:=RTC_read_year(); // RTC_mesec:=RTC_read_month(); // RTC_dan:=RTC_read_date(); // RTC_ura:=RTC_read_hour(); // RTC_min:=RTC_read_min(); end; #CODE_END #DESCRIPTION_BEGIN //******************************************************************** // // F O R A BERLITZ 2002/2003 // //Kernel: 1.6.6 //******************************************************************** // // 15.3.2002 // Cl = 0...1 mg/L (klor) // Ph = 0...14 ph (kislost) // Rx = 0...1000 mV // temperatura = 0 ... 100 st.C // // iw048 = input I1 0..20000 (10 uA resolution) // iw049 = input I2 // iw050 = input I3 // iw051 = input I4 // iw052 = input I5 // iw053 = input I6 // // _______________ IMPULZNI IZHOD _______________________________________ // Kadar bo izhod impulz naj bo impulz 0.5 s, ... // ... pavza pa od 0,5s (60 imp/min) do 600 s (0,1 imp/min)! // // Za ImpOUT = ImpOUT ; min ImpOUT= 0,1 /min // ; max ImpOUT= 60 /min // // _______________ ANALOGNI TOKOVNI VHOD ________________________________ // y = k * x + o ; k= strmina = dx / dy // ; o= offset (odmik) // ; o= se postavi ob popravljanju // // Za Cl = (1 mg/L / 20000) * i + o ; o= 0 v zacetku, nato ga popravlja FORA // NE, NE !! (postavlja se vedno samo dve tocki!) // // // CONFreg[REG] // 1-neaktiven=0, 1=aktiven (oz.vrsta regulacije) // 2-PRETOCNI/AKUMUL. NACIN // 3-KP (0.00..1.00) // 4-KI (0.00..1.00) // 5-KD (0.00..1.00) // 6-naslov oz. vrsta povratne vezave pri servo izhodu 8=R500 9=R2000 // CONFin[x]: // x=1..8 stevilka slota oz. vhoda REG // 1-VRSTA vhoda/krmiljenja: // (0=neaktiven, 1=Cl(0..1mg/L), // 2=Ph (0..14pH), 3=Rx(0..1000mV), // 4=TEMP_Pt100(0..100 st.C)) 5=TEMP_Pt1000 // 6=TEMP_Ni100 7=TEMP_Ni1000 // 8=R500 9=R2000 // 10=pretok [0 .. 100 %] // 2-bralni NASLOV vhoda // 3-MAKSimalna bralna vrednost vhoda // 4-navaden / negiran vhod // 5-Cal.T1_min (realna vrednost) // 6-Cal.T2_max (realna vrednost) // 7-Cal.T1_min (vrednost iz vhoda) // 8-Cal.T2_max (vrednost iz vhoda) // CONFout[x]: // x=1..8 stevilka izhoda REG // 1-vrsta krmiljenja (0=neaktiven, 1=DIG.IMP.izhod 2=SERVO) // 2-bralni naslov izhoda // 3-maksimalna pisalna vrednost izhoda // 4-navaden / negiran vhod // 5-Cal.T1_min (realna vrednost: min imp. ali min Rpot_servo) // 6-Cal.T2_max // 7-Cal.T1_min (stevilcna vrednost izhoda) // 8-Cal.T2_max (stevilcna vrednost izhoda) // //Upornost do 5K // Kalibracijske točke za motor: x-omov ventil zaprt , y-omov ventil maksimalno odprt!!! Vrednosti x in y tako da potrdimo vrednost x ko fizično premaknemo motor v pozicijo zaprtega ventila Y pa ko motor premaknemo v pozicijo max odprtega ventila. Merjena vrednost ni klor ampak pretok. Ta se kalibrira podobno kot klor : 0,00 l/s je 4mA x,xxmA je y,yyl/s Primer: 16mA=7,5l/s pomeni 20mA=10l/s 16mA=15l/s pomeni 20mA=20l/s set point ni več časa pokliči!!!!! ************************************************************************************** 25.2.2002 nov nacin krmiljenja (in ne regulacije): Pretok (0..20mA) pomeni tudi doloceno stopnjo odprtja ventila. Umerjanje je na max. 16 tockah! ************************************************************************************** 22.4.2002 Daj vključi tudi PID !!! // enote: // 0.31a ... 27.4.2002 Cl [_ppm ali mg/L] // pH [_pH_] // Rx [_mV_] // iw048, 49 ter 50 (TOLE BODO VHODI) ************************************************************************************** 1.5.2002 IN: 1.postavitev merske enote (0=brez enota, 1=mg/L, 2=_pH_, 3=_mV_, 4=_ppm (Cl v zraku) ) 2.nastavitev decimalk (0=cela števila xxx, 1=xx.x, 2=x.xx, 3=x.xxx) 3.kalibracijska tocka 1 4.kalibracijska tocka 2 5.željena vrednost 6.Maximalna vrednost IN za output OFF (ALARM!) OUT: 1.minimalno število impulzov 2.maximalno število impulzov REG_PID: (prej REG) 1.Aktiviranje REG-ulatorja (prikazREG=1..3) 2.zakasnitev vzorca (2..999s) //3.nacin prikaza NAVADEN / AVTOMATSKI // ( se pomikamo z tipko po regulatorju // / se samodejno premika prikaz od // regulatorja do regulatorja) v38:26.5.2002: -upravljanje z mask editorjem....MASK_support() v39:27.5.2002: -upravljanje z mask editorjem....MASK_support() -WriteOut()...cOUT_IMP: v40:28.5.2002: - v0.45b ... je misilim tista verzija, ki jo je vzel Igor s seboj! v0.47b ... 11.6.2002 moram popraviti/dodati: -Moznost disable z vsakim vhodom! -Ko je Cas CV100ms[REG]:=999 (ali alarm) mora biti popoln izklop izhodov! CYPRO.P 1-00-100030-0 S/N:001766 Kernel: 1.6.6 "Savna Fanči" ************************************************************************************************* ************************** 21.12.2002 v0.48a sms (prvic izpeljana iz 047b brez sms) ************* f048aPID6xIGOR2FANCIsms.cyp v0.48a sms CYPRO.P 1-00-001030-0 v1.1 S.No. 0502-002432 ************************************************************************************************* This program demonstrates process control by sending and receiving SMS messages. Device used in this example is Siemens M20, but the same principle may be used for any other GSM modem. To run application you have to: 1. Enter M20 PIN number and adjust number of bytes to transmit 2. Enter your GSM phone number and adjust number of bytes to transmit 3. Press "Start" button. 4. When asked, enter the network address of the target VCP. Connect CyBro Com2 port to Siemens M20. CyBro will send initialization strings to M20. When initialization is done, CyBro will wait (step 4) to receive message or request to send message. To send SMS message from M20 to your GSM press F key. Message will contain keyword "CNT=" and current counter position. To set counter value send GSM message from your GSM to M20. Message should contain keyword "CNT=" and a number. The counter will be set to given number. // //test s stevilko: //040 694 521 // /* main task: counting scan cycles */ cnter:=cnter+1; /* press key_f to send SMS message */ if fp(key_f) then sms_send_request:=YES; end_if; /* call communication subroutine */ communication(); /* update display */ dprns(0,0,'Step:'); dprni(5,0,1,yes,step); dprns(7,0,'Rx:'); dprni(10,0,1,yes,rx_active()); dprns(12,0,'Tx:'); dprni(15,0,1,yes,tx_active()); dprns(0,1,'Counter='); dprnl(8,1,8,yes,cnter); // // v048c // ----------------------------------- // 12.2.2003 ......... v0.50a (f050aPID6xIGOR2FANCIsms2003Delay.cyp) // POPRAVA: 1 digitalni alarmi ------ če je eden sprožen naslednjega ne zazna !!!!! zazna ga šele ko je prvi odpravljen, 2 digitalni alarmi ------ odpravi povezavo z digitalnimi izhodi za krmiljenje dozirnih črpalk, 3 analogni vhodi ----- regulacija časa pogostosti javljanja alarma, sedaj se mu zmeša DODELAVA: 4 analogni vhodi ----- nadgradnja še šestih 5 aktiviraj še obstoječa na cybro 6 SMS ----- naredi da lahko vprašaš po analogni vrednosti 7 NAPAJALNIKI 2kos // 0.50c ...19.02.2003 prisel Igor FORA.... v pisarno // 0.50d ...19.02.2003 ...6+6 regulator // Read_INP1 se spremeni v Read_INP66! // InADDRESS sem vrgel ven! (glej Read_INP66() ) /* case REG of */ // Stevci smsCNTsecD ter smsCNTsecA za omejitve prevec posiljanja SMS...! (na 5 min max) // // 0.51e ...20.02.2003 ... SMSdig[ , SMStimer[ // 0.51f ...22.02.2003 ... SMSdig[ , SMStimer[ // 0.52g ...22.02.2003 ... SMSdig[ , SMStimer[ // sms_send_request se postavi najhitreje po (delay10s). To je generalna zahteva za SMS alarm // Naslednji sms se lahko poslje sele po teh 10s!!!!?!! // sms_send_req[ pa se seveda dogaja na max 5 min! // // 0.52h ...28.02.2003 ... SMSdig[ , SMStimer[ DIGITALNI ALARM: SMSdig[ se postavi vedno ko pride pozitivna planka ustreznega dig. vhoda! SMSdig[ se zbrise sele po preteku timerja DIGtimer[, ce je ustrezni fizični dig.vhod se vedno prisoten se postavi se enkrat SMSdig[! Hkrati se ponovi ponovno postavljanje SMStimer[ .... Posiljanje SMS sporocila se vrsi v prvi sekundi SMStimer[-ja! (SMSdig[=1) and (SMStimer[=1) ANALOGNI ALARM: PValarmSMS[ se postavi vedno ko pride do analognega alarma. PValarmSMS[ vsebuje stevilko an. vhoda oz. REGulatorja, kateremu pripada alarm! Ce je 0 potem alarma NI! Podobno kot pri dig. alarmih se tudi tukaj SMStimerA postavi pri posiljanju na 1 nato pa se povecuje v glavnem programu naprej do cSMSdelay konstante! REGrequest=0 ce ni zahteve oz. ce je razlicen od nic, ce je zahteva po dolocenem regulatorju Preko SMS lahko damo zahtevo po stanju dolocenega regulatorja: "REG?=xx" kjer je xx stevilka regulatorja! REGrequest=xx -------------------------------------- 6.3.2003 v52k...fora v pisarni! Vzel na posodo CyBro.P 1-00-001030-0 v1.1 sn=0502-002354 .......... Aiva iexu-ai-va6ma sn=0402-620014 -------------------------------------- at+cmgs="070683023" 0mg/L i= 400 " ______________________________________ v52l 6.3.2003 zvecer popravljam in gledam doma! -------------------------------------- 8.3.2003, sobota v052m imam modul doma in bom poskusal 9.3.2002 nedelja ....... if fp( ((PValarmSMS[REG]>0) and (SMStimerA[REG]=0)) or ((SMSdig[REG]>0) and ... fp( _____ sem dal ven! stevilka=040755555 joze2=041/477463 v53n (nedelja) -------------------------------------- 16.7.2005 FORA Menda bodo 3x AIVA6 5x3vhodi ter samo en cybro z 6 izhodi?! Verjetno impulzni izhod 5x! -------------------------------------- -------------------------------------- -------------------------------------- #DESCRIPTION_END ##PROGRAM_END_1