(* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) PROGRAM mod_Read VAR END_VAR (* @END_DECLARATION := '0' *) (*Branje BOOL*) (**) mind_bool[0]:=AGR1_POS_0; mind_bool[1]:=AGR1_POS_AGREGAT; mind_bool[2]:=AGR1_POS_MREZA; mind_bool[3]:=AGR1_Q1_izpad; mind_bool[4]:=AGR1_Q1_vkljuceno; mind_bool[5]:=AGR1_Q2_izpad; mind_bool[6]:=AGR1_Q2_vkljuceno; mind_bool[7]:=AGR1_Q3_izpad; mind_bool[8]:=AGR1_Q3_vkljuceno; mind_bool[9]:=AGR1_Q4_izpad; mind_bool[10]:=AGR1_Q4_vkljuceno; mind_bool[11]:=AGR1_Q5_izpad; mind_bool[12]:=AGR1_Q5_vkljuceno; mind_bool[13]:=Alarm_EAGR1; mind_bool[14]:=ComSCADA; mind_bool[15]:=ComSCADA1; mind_bool[16]:=ComSCADA2; mind_bool[17]:=ComSCADA3; mind_bool[18]:=ErrComCirc[1]; mind_bool[19]:=ErrComPort2; mind_bool[20]:=ErrorComCirc[1].Error; mind_bool[21]:=fek_voda_del; mind_bool[22]:=fek_voda_napaka; mind_bool[23]:=fek_voda_vklop; mind_bool[24]:=FekalijeErr; mind_bool[25]:=Filter_VHK_delovanje; mind_bool[26]:=Filter_VHK_napaka; mind_bool[27]:=GlavnoStikaloNapaka; mind_bool[28]:=KL_split1_del; mind_bool[29]:=KL_split1_napaka; mind_bool[30]:=KL_split2_del; mind_bool[31]:=KL_split2_napaka; mind_bool[32]:=KomunikacijaErr; mind_bool[33]:=mehc_delovanje; mind_bool[34]:=mehc_napaka; mind_bool[35]:=mehc_vklop; mind_bool[36]:=N_AGR1_Q1_izpad; mind_bool[37]:=N_AGR1_Q1_vkljuceno; mind_bool[38]:=N_AGR1_Q2_izpad; mind_bool[39]:=N_AGR1_Q2_vkljuceno; mind_bool[40]:=N_AGR1_Q3_izpad; mind_bool[41]:=N_AGR1_Q3_vkljuceno; mind_bool[42]:=N_AGR1_Q4_izpad; mind_bool[43]:=N_AGR1_Q4_vkljuceno; mind_bool[44]:=N_AGR1_Q5_izpad; mind_bool[45]:=N_AGR1_Q5_vkljuceno; mind_bool[46]:=N_fek_voda_napaka; mind_bool[47]:=N_Filter_VHK_napaka; mind_bool[48]:=N_mehc_napaka; mind_bool[49]:=napaka_kom_panel; mind_bool[50]:=napaka_kom_scada; mind_bool[51]:=napaka_kom_scada2; mind_bool[52]:=NapakaSenzorSkupno; mind_bool[53]:=NapakaSenzorVlagaHIA1; mind_bool[54]:=NapakaSenzorVlagaHIA2; mind_bool[55]:=NapakaTSTempTIA1; mind_bool[56]:=NapakaTSTempTIA2; mind_bool[57]:=PrevisokaTemp; mind_bool[58]:=SetDateTime; mind_bool[59]:=SetDateTimeDemand; mind_bool[60]:=SetDateTimeError; mind_bool[61]:=SetDateTimeFinished; mind_bool[62]:=SlabaBaterijaPLC; mind_bool[63]:=TIA1_previs_temp; mind_bool[64]:=TIA2_previs_temp; mind_bool[65]:=ups_alarm; mind_bool[66]:=ups_baterijski_nac; mind_bool[67]:=ups_polnjenje; mind_bool[68]:=UserLoggedIn; mind_bool[69]:=XVH_AlarmOn; mind_bool[70]:=Circ_Vpis_Dnevne_energija_scada1; mind_bool[71]:=Circ_Vpis_Dnevne_energija_scada2; mind_bool[72]:=Circ_Vpis_Tedenska_energija_scada1; mind_bool[73]:=Circ_Vpis_Tedenska_energija_scada2; mind_bool[74]:=Circ_Vpis_Mesecna_energija_scada1; mind_bool[75]:=Circ_Vpis_Mesecna_energija_scada2; (*Branje INT*) (**) mind[0]:=DateTime.Dan; mind[1]:=DateTime.Leto; mind[2]:=DateTime.Leto2; mind[3]:=DateTime.Mesec; mind[4]:=DateTime.Minuta; mind[5]:=DateTime.Sekunda; mind[6]:=DateTime.Ura; mind[7]:=ErrorComCirc[1].Code[10]; mind[8]:=ErrorComCirc[1].Code[11]; mind[9]:=ErrorComCirc[1].Code[12]; mind[10]:=ErrorComCirc[1].Code[13]; mind[11]:=ErrorComCirc[1].Code[14]; mind[12]:=ErrorComCirc[1].Code[15]; mind[13]:=ErrorComCirc[1].Code[1]; mind[14]:=ErrorComCirc[1].Code[2]; mind[15]:=ErrorComCirc[1].Code[3]; mind[16]:=ErrorComCirc[1].Code[4]; mind[17]:=ErrorComCirc[1].Code[5]; mind[18]:=ErrorComCirc[1].Code[6]; mind[19]:=ErrorComCirc[1].Code[7]; mind[20]:=ErrorComCirc[1].Code[8]; mind[21]:=ErrorComCirc[1].Code[9]; mind[22]:=ErrorComCirc[1].Status; mind[23]:=HIA1_vlaga; mind[24]:=HIA1_vlaga_s; mind[25]:=HIA2_vlaga; mind[26]:=HIA2_vlaga_s; mind[27]:=Qstanje[10]; mind[28]:=Qstanje[1]; mind[29]:=Qstanje[2]; mind[30]:=Qstanje[3]; mind[31]:=Qstanje[4]; mind[32]:=Qstanje[5]; mind[33]:=Qstanje[6]; mind[34]:=Qstanje[7]; mind[35]:=Qstanje[8]; mind[36]:=Qstanje[9]; mind[37]:=TIA1_alarm; mind[38]:=TIA1_temp; mind[39]:=TIA1_temp_s; mind[40]:=TIA2_alarm; mind[41]:=TIA2_temp; mind[42]:=TIA2_temp_s; mind[43]:=UserCurrentLevel; mind[44]:=XVH_KlimaSplitStatus[1]; mind[45]:=XVH_KlimaSplitStatus[2]; mind[46]:=XVH_UPSstatus; (*Branje UINT*) (**) mind[6000]:=kom_nast_cas_izpada; (*Branje LONG*) (**) (*Branje REAL*) (**) Read_Real(rVar:=Circ[1].CosFi_III,lo:=4000,hi:=4001); Read_Real(rVar:=Circ[1].DelovnaEnergija,lo:=4002,hi:=4003); Read_Real(rVar:=Circ[1].DelovnaMoc_III,lo:=4004,hi:=4005); Read_Real(rVar:=Circ[1].DelovnaMoc_L1,lo:=4006,hi:=4007); Read_Real(rVar:=Circ[1].DelovnaMoc_L2,lo:=4008,hi:=4009); Read_Real(rVar:=Circ[1].DelovnaMoc_L3,lo:=4010,hi:=4011); Read_Real(rVar:=Circ[1].Frekvenca_L1,lo:=4012,hi:=4013); Read_Real(rVar:=Circ[1].InduktivnaEnergija,lo:=4014,hi:=4015); Read_Real(rVar:=Circ[1].InduktivnaMoc_III,lo:=4016,hi:=4017); Read_Real(rVar:=Circ[1].JalovaMoc_L1,lo:=4018,hi:=4019); Read_Real(rVar:=Circ[1].JalovaMoc_L2,lo:=4020,hi:=4021); Read_Real(rVar:=Circ[1].JalovaMoc_L3,lo:=4022,hi:=4023); Read_Real(rVar:=Circ[1].KapacitivnaEnergija,lo:=4024,hi:=4025); Read_Real(rVar:=Circ[1].KapacitivnaMoc_III,lo:=4026,hi:=4027); Read_Real(rVar:=Circ[1].MaximumDemand,lo:=4028,hi:=4029); Read_Real(rVar:=Circ[1].Napetost_L1_L2,lo:=4030,hi:=4031); Read_Real(rVar:=Circ[1].Napetost_L1_N,lo:=4032,hi:=4033); Read_Real(rVar:=Circ[1].Napetost_L2_L3,lo:=4034,hi:=4035); Read_Real(rVar:=Circ[1].Napetost_L2_N,lo:=4036,hi:=4037); Read_Real(rVar:=Circ[1].Napetost_L3_L1,lo:=4038,hi:=4039); Read_Real(rVar:=Circ[1].Napetost_L3_N,lo:=4040,hi:=4041); Read_Real(rVar:=Circ[1].NavideznaMoc_III,lo:=4042,hi:=4043); Read_Real(rVar:=Circ[1].NicelniTok,lo:=4044,hi:=4045); Read_Real(rVar:=Circ[1].PowerFactor_III,lo:=4046,hi:=4047); Read_Real(rVar:=Circ[1].PowerFactor_L1,lo:=4048,hi:=4049); Read_Real(rVar:=Circ[1].PowerFactor_L2,lo:=4050,hi:=4051); Read_Real(rVar:=Circ[1].PowerFactor_L3,lo:=4052,hi:=4053); Read_Real(rVar:=Circ[1].THDI_L1,lo:=4054,hi:=4055); Read_Real(rVar:=Circ[1].THDI_L2,lo:=4056,hi:=4057); Read_Real(rVar:=Circ[1].THDI_L3,lo:=4058,hi:=4059); Read_Real(rVar:=Circ[1].THDV_L1,lo:=4060,hi:=4061); Read_Real(rVar:=Circ[1].THDV_L2,lo:=4062,hi:=4063); Read_Real(rVar:=Circ[1].THDV_L3,lo:=4064,hi:=4065); Read_Real(rVar:=Circ[1].Tok_L1,lo:=4066,hi:=4067); Read_Real(rVar:=Circ[1].Tok_L2,lo:=4068,hi:=4069); Read_Real(rVar:=Circ[1].Tok_L3,lo:=4070,hi:=4071); Read_Real(rVar:=Circ[1].TokPovprecje_III,lo:=4072,hi:=4073); Read_Real(rVar:=Circ[1].MaximumDemandA2,lo:=4074,hi:=4075); Read_Real(rVar:=Circ[1].MaximumDemandA3,lo:=4076,hi:=4077); Read_Real(rVar:=Circ[1].RazEner_D_SCADA,lo:=4078,hi:=4079); Read_Real(rVar:=Circ[1].RazEner_T_SCADA,lo:=4080,hi:=4081); Read_Real(rVar:=Circ[1].RazEner_M_SCADA,lo:=4082,hi:=4083); (*Branje STRING*) (**) Read_String(sVar:=Date_Time[0],start:=5000); Read_String(sVar:=Date_Time[1],start:=5015); Read_String(sVar:=Date_Time[2],start:=5030); Read_String(sVar:=Date_Time[3],start:=5045); Read_String(sVar:=UserCurrentName,start:=5060); END_PROGRAM (* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) FUNCTION mod_Write_Bool : BOOL VAR_INPUT index: INT; END_VAR VAR END_VAR (* @END_DECLARATION := '0' *) (*vpis iz scade*) CASE index OF (*Pisanje BOOL*) (**) 0:AGR1_POS_0:=Bit_0; 1:AGR1_POS_AGREGAT:=Bit_0; 2:AGR1_POS_MREZA:=Bit_0; 3:AGR1_Q1_izpad:=Bit_0; 4:AGR1_Q1_vkljuceno:=Bit_0; 5:AGR1_Q2_izpad:=Bit_0; 6:AGR1_Q2_vkljuceno:=Bit_0; 7:AGR1_Q3_izpad:=Bit_0; 8:AGR1_Q3_vkljuceno:=Bit_0; 9:AGR1_Q4_izpad:=Bit_0; 10:AGR1_Q4_vkljuceno:=Bit_0; 11:AGR1_Q5_izpad:=Bit_0; 12:AGR1_Q5_vkljuceno:=Bit_0; 13:Alarm_EAGR1:=Bit_0; 14:ComSCADA:=Bit_0; 15:ComSCADA1:=Bit_0; 16:ComSCADA2:=Bit_0; 17:ComSCADA3:=Bit_0; 18:ErrComCirc[1]:=Bit_0; 19:ErrComPort2:=Bit_0; 20:ErrorComCirc[1].Error:=Bit_0; 21:fek_voda_del:=Bit_0; 22:fek_voda_napaka:=Bit_0; 23:fek_voda_vklop:=Bit_0; 24:FekalijeErr:=Bit_0; 25:Filter_VHK_delovanje:=Bit_0; 26:Filter_VHK_napaka:=Bit_0; 27:GlavnoStikaloNapaka:=Bit_0; 28:KL_split1_del:=Bit_0; 29:KL_split1_napaka:=Bit_0; 30:KL_split2_del:=Bit_0; 31:KL_split2_napaka:=Bit_0; 32:KomunikacijaErr:=Bit_0; 33:mehc_delovanje:=Bit_0; 34:mehc_napaka:=Bit_0; 35:mehc_vklop:=Bit_0; 36:N_AGR1_Q1_izpad:=Bit_0; 37:N_AGR1_Q1_vkljuceno:=Bit_0; 38:N_AGR1_Q2_izpad:=Bit_0; 39:N_AGR1_Q2_vkljuceno:=Bit_0; 40:N_AGR1_Q3_izpad:=Bit_0; 41:N_AGR1_Q3_vkljuceno:=Bit_0; 42:N_AGR1_Q4_izpad:=Bit_0; 43:N_AGR1_Q4_vkljuceno:=Bit_0; 44:N_AGR1_Q5_izpad:=Bit_0; 45:N_AGR1_Q5_vkljuceno:=Bit_0; 46:N_fek_voda_napaka:=Bit_0; 47:N_Filter_VHK_napaka:=Bit_0; 48:N_mehc_napaka:=Bit_0; 49:napaka_kom_panel:=Bit_0; 50:napaka_kom_scada:=Bit_0; 51:napaka_kom_scada2:=Bit_0; 52:NapakaSenzorSkupno:=Bit_0; 53:NapakaSenzorVlagaHIA1:=Bit_0; 54:NapakaSenzorVlagaHIA2:=Bit_0; 55:NapakaTSTempTIA1:=Bit_0; 56:NapakaTSTempTIA2:=Bit_0; 57:PrevisokaTemp:=Bit_0; 58:SetDateTime:=Bit_0; 59:SetDateTimeDemand:=Bit_0; 60:SetDateTimeError:=Bit_0; 61:SetDateTimeFinished:=Bit_0; 62:SlabaBaterijaPLC:=Bit_0; 63:TIA1_previs_temp:=Bit_0; 64:TIA2_previs_temp:=Bit_0; 65:ups_alarm:=Bit_0; 66:ups_baterijski_nac:=Bit_0; 67:ups_polnjenje:=Bit_0; 68:UserLoggedIn:=Bit_0; 69:XVH_AlarmOn:=Bit_0; 70:Circ_Vpis_Dnevne_energija_scada1:=Bit_0; 71:Circ_Vpis_Dnevne_energija_scada2:=Bit_0; 72:Circ_Vpis_Tedenska_energija_scada1:=Bit_0; 73:Circ_Vpis_Tedenska_energija_scada2:=Bit_0; 74:Circ_Vpis_Mesecna_energija_scada1:=Bit_0; 75:Circ_Vpis_Mesecna_energija_scada2:=Bit_0; (*BOOL*) END_CASE END_FUNCTION (* @SYMFILEFLAGS := '2048' *) FUNCTION mod_Write_dWord : BOOL VAR_INPUT Index:INT; END_VAR VAR END_VAR (* @END_DECLARATION := '0' *) (*vpis iz scade*) CASE index OF (*Pisanje LONG*) (**) (*Pisanje REAL*) (**) 4001:Circ[1].CosFi_III:=Real_0; 4003:Circ[1].DelovnaEnergija:=Real_0; 4005:Circ[1].DelovnaMoc_III:=Real_0; 4007:Circ[1].DelovnaMoc_L1:=Real_0; 4009:Circ[1].DelovnaMoc_L2:=Real_0; 4011:Circ[1].DelovnaMoc_L3:=Real_0; 4013:Circ[1].Frekvenca_L1:=Real_0; 4015:Circ[1].InduktivnaEnergija:=Real_0; 4017:Circ[1].InduktivnaMoc_III:=Real_0; 4019:Circ[1].JalovaMoc_L1:=Real_0; 4021:Circ[1].JalovaMoc_L2:=Real_0; 4023:Circ[1].JalovaMoc_L3:=Real_0; 4025:Circ[1].KapacitivnaEnergija:=Real_0; 4027:Circ[1].KapacitivnaMoc_III:=Real_0; 4029:Circ[1].MaximumDemand:=Real_0; 4031:Circ[1].Napetost_L1_L2:=Real_0; 4033:Circ[1].Napetost_L1_N:=Real_0; 4035:Circ[1].Napetost_L2_L3:=Real_0; 4037:Circ[1].Napetost_L2_N:=Real_0; 4039:Circ[1].Napetost_L3_L1:=Real_0; 4041:Circ[1].Napetost_L3_N:=Real_0; 4043:Circ[1].NavideznaMoc_III:=Real_0; 4045:Circ[1].NicelniTok:=Real_0; 4047:Circ[1].PowerFactor_III:=Real_0; 4049:Circ[1].PowerFactor_L1:=Real_0; 4051:Circ[1].PowerFactor_L2:=Real_0; 4053:Circ[1].PowerFactor_L3:=Real_0; 4055:Circ[1].THDI_L1:=Real_0; 4057:Circ[1].THDI_L2:=Real_0; 4059:Circ[1].THDI_L3:=Real_0; 4061:Circ[1].THDV_L1:=Real_0; 4063:Circ[1].THDV_L2:=Real_0; 4065:Circ[1].THDV_L3:=Real_0; 4067:Circ[1].Tok_L1:=Real_0; 4069:Circ[1].Tok_L2:=Real_0; 4071:Circ[1].Tok_L3:=Real_0; 4073:Circ[1].TokPovprecje_III:=Real_0; 4075:Circ[1].MaximumDemandA2:=Real_0; 4077:Circ[1].MaximumDemandA3:=Real_0; 4079:Circ[1].RazEner_D_SCADA:=Real_0; 4081:Circ[1].RazEner_T_SCADA:=Real_0; 4083:Circ[1].RazEner_M_SCADA:=Real_0; END_CASE END_FUNCTION (* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) FUNCTION mod_Write_String : BOOL VAR_INPUT Index:INT; END_VAR VAR END_VAR (* @END_DECLARATION := '0' *) (*vpis iz scade*) CASE index OF (*Pisanje STRING*) (**) 5000:Date_Time[0]:=String_0; 5015:Date_Time[1]:=String_0; 5030:Date_Time[2]:=String_0; 5045:Date_Time[3]:=String_0; 5060:UserCurrentName:=String_0; END_CASE END_FUNCTION (* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) FUNCTION mod_Write_Word : BOOL VAR_INPUT Index:INT; END_VAR VAR END_VAR (* @END_DECLARATION := '0' *) (*vpis iz scade*) CASE index OF (*Pisanje INT*) (**) 0:DateTime.Dan:=Byte_0; 1:DateTime.Leto:=Byte_0; 2:DateTime.Leto2:=Word_01; 3:DateTime.Mesec:=Byte_0; 4:DateTime.Minuta:=Byte_0; 5:DateTime.Sekunda:=Byte_0; 6:DateTime.Ura:=Byte_0; 7:ErrorComCirc[1].Code[10]:=Byte_0; 8:ErrorComCirc[1].Code[11]:=Byte_0; 9:ErrorComCirc[1].Code[12]:=Byte_0; 10:ErrorComCirc[1].Code[13]:=Byte_0; 11:ErrorComCirc[1].Code[14]:=Byte_0; 12:ErrorComCirc[1].Code[15]:=Byte_0; 13:ErrorComCirc[1].Code[1]:=Byte_0; 14:ErrorComCirc[1].Code[2]:=Byte_0; 15:ErrorComCirc[1].Code[3]:=Byte_0; 16:ErrorComCirc[1].Code[4]:=Byte_0; 17:ErrorComCirc[1].Code[5]:=Byte_0; 18:ErrorComCirc[1].Code[6]:=Byte_0; 19:ErrorComCirc[1].Code[7]:=Byte_0; 20:ErrorComCirc[1].Code[8]:=Byte_0; 21:ErrorComCirc[1].Code[9]:=Byte_0; 22:ErrorComCirc[1].Status:=Word_01; 23:HIA1_vlaga:=Word_01; 24:HIA1_vlaga_s:=Word_01; 25:HIA2_vlaga:=Word_01; 26:HIA2_vlaga_s:=Word_01; 27:Qstanje[10]:=Byte_0; 28:Qstanje[1]:=Byte_0; 29:Qstanje[2]:=Byte_0; 30:Qstanje[3]:=Byte_0; 31:Qstanje[4]:=Byte_0; 32:Qstanje[5]:=Byte_0; 33:Qstanje[6]:=Byte_0; 34:Qstanje[7]:=Byte_0; 35:Qstanje[8]:=Byte_0; 36:Qstanje[9]:=Byte_0; 37:TIA1_alarm:=Word_01; 38:TIA1_temp:=Word_01; 39:TIA1_temp_s:=Word_01; 40:TIA2_alarm:=Word_01; 41:TIA2_temp:=Word_01; 42:TIA2_temp_s:=Word_01; 43:UserCurrentLevel:=Byte_0; 44:XVH_KlimaSplitStatus[1]:=Byte_0; 45:XVH_KlimaSplitStatus[2]:=Byte_0; 46:XVH_UPSstatus:=Byte_0; (*Pisanje UINT*) (**) 6000:kom_nast_cas_izpada:=Word_01; ; END_CASE END_FUNCTION (* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) (*Modbus Slave Example*) PROGRAM PLC_PRG_modnet VAR Slave_Adresa:BYTE:=2; Slave_Port:INT:=502; SlaveSetup:MBS_Setup; SlavePoll:MBS_Poll; SlaveAnswer:MBS_Answer; step: USINT; end :BOOL; i: INT; cycle :BOOL := FALSE; (* First cycle *) OpenDefaultPort: BOOL; Write_16: BOOL; Write_15: BOOL; Write_5: BOOL; j: INT; slavepollwOffset_temp: INT; slaveanswerwCount_temp: INT; slaveanswerwoffset_temp: INT; END_VAR (* @END_DECLARATION := '0' *) (*Modbus Slave Example*) IF Write_16=TRUE THEN (**) FOR j := 0 TO (slaveanswerwCount_temp-1)/15 BY 1 DO (*vpiše se dword, real*) wStr_0:=mind[slaveanswerwoffset_temp+j]; wStr_1:=mind[slaveanswerwoffset_temp+j+1]; wStr_2 :=mind[slaveanswerwoffset_temp+j+2]; wStr_3:=mind[slaveanswerwoffset_temp+j+3]; wStr_4:=mind[slaveanswerwoffset_temp+j+4]; wStr_5 :=mind[slaveanswerwoffset_temp+j+5]; wStr_6:=mind[slaveanswerwoffset_temp+j+6]; wStr_7:=mind[slaveanswerwoffset_temp+j+7]; wStr_8:=mind[slaveanswerwoffset_temp+j+8]; wStr_9:=mind[slaveanswerwoffset_temp+j+9]; wStr_10:=mind[slaveanswerwoffset_temp+j+10]; wStr_11:=mind[slaveanswerwoffset_temp+j+11]; wStr_12:=mind[slaveanswerwoffset_temp+j+12]; wStr_13:=mind[slaveanswerwoffset_temp+j+13]; wStr_14:=mind[slaveanswerwoffset_temp+j+14]; bStr_29:=0; mod_Write_String(index:=slaveanswerwoffset_temp+j); (*vpis real in string*) END_FOR; FOR j := 1 TO slaveanswerwCount_temp-1 BY 2 DO (*vpiše se dword, real*) Word_01:=mind[slaveanswerwoffset_temp+j-1]; Word_23:=mind[slaveanswerwoffset_temp+j]; mod_Write_dWord(index:=slaveanswerwoffset_temp+j); (*vpis real in dword*) END_FOR; FOR j := 0 TO slaveanswerwCount_temp-1 BY 1 DO (*vpiše se word*) Word_01:=mind[slaveanswerwoffset_temp+j]; mod_Write_Word(index:=slaveanswerwoffset_temp+j); (*vpis word*) END_FOR; Write_16:=FALSE; END_IF; IF Write_5=TRUE OR Write_15=TRUE THEN (**) FOR j := 0 TO slaveanswerwCount_temp-1 BY 1 DO Bit_0:=mind_bool[slaveanswerwoffset_temp+j]; mod_Write_Bool(index:=slaveanswerwoffset_temp+j); (*vpis spremembe v spremenljivko*) END_FOR; Write_5:=FALSE; Write_15:=FALSE; END_IF; (*iz scade ni komande za branje*) IF Write_16=FALSE AND Write_5=FALSE AND Write_15=FALSE THEN mod_Read();(*branje spremenljivk za scado*) END_IF (*Close all sockets on corresponding event*) IF cycle = FALSE THEN SysCallbackRegister(INDEXOF(Callback_Stop),event_stop); SysCallbackRegister(INDEXOF(Callback_Reset),event_before_reset); SysCallbackRegister(INDEXOF(Callback_Reset),event_shutdown); cycle := TRUE; END_IF (*Close all connections via application *) IF end = TRUE THEN MBS_CloseAllConnections(); SlaveSetup (xstrobe:= TRUE,bUnitIdentifier:=Slave_Adresa,wDefaultPort:=Slave_Port,xDefaultPortActive:=FALSE); (*Close port*) step := 0; END_IF IF OpenDefaultPort=TRUE THEN SlaveSetup (xstrobe:= TRUE,bUnitIdentifier:=Slave_Adresa,wDefaultPort:=Slave_Port,xDefaultPortActive:=TRUE); (*Close port*) step := 0; OpenDefaultPort:=FALSE; END_IF (* State machine for setup, poll and answer *) CASE step OF 0:(**) SlaveSetup.bUnitIdentifier:=Slave_Adresa;(*Subunitnumber*) slavesetup.wDefaultPort:=Slave_Port;(*Standartport *) SlaveSetup.xAdditionalPortActive:=FALSE;(*Port opened or closed*) SlaveSetup.xSecureMode:=FALSE;(*If TRUE only preset IPs are accepted*) SlaveSetup.tTimeout:=T#3m;(*Timeout if no communication with slave established*) SlaveSetup(xStrobe:=TRUE);(*Strobe starts function*) IF slavesetup.xBusy = FALSE THEN slavesetup(xstrobe := FALSE); step := 1 ; END_IF; 1:(**) SlavePoll(xStrobe:=TRUE);(*Searching for master commands*) IF NOT SlavePoll.xBusy THEN step:=2; SlavePoll(xStrobe:=FALSE); END_IF; 2:(**) step:= 1; CASE SlavePoll.bFunctionCode OF (*Connect accepted pollparameters with answerparameters*) 8:(**)(*Poll answers*) ; 15: slaveanswer.bFunctionCode:=slavepoll.bFunctionCode; slaveanswer.wCount:=slavepoll.wCount; slaveanswer.wOffset:=slavepoll.wOffset; slaveanswerwoffset_temp:=slaveanswer.woffset; slaveanswerwCount_temp:=slaveanswer.wCount; FOR i := 0 TO slaveanswer.wCount-1 BY 1 DO mind_bool[slaveanswer.woffset+i] := slavepoll.xarData[i];(*Write to Data-array*) END_FOR; slaveanswer.xarData:=slavepoll.xarData; Write_15:=TRUE; 16: slaveanswer.bFunctionCode:=slavepoll.bFunctionCode; slaveanswer.wCount:=slavepoll.wCount; slaveanswer.wOffset:=slavepoll.wOffset; slaveanswerwoffset_temp:=slaveanswer.woffset; slaveanswerwCount_temp:=slaveanswer.wCount; FOR i := 0 TO slaveanswer.wCount-1 BY 1 DO mind[slaveanswer.woffset+i] := slavepoll.warData[i];(*Write to Data-array*) END_FOR; slaveanswer.wardata := slavepoll.warData; Write_16:=TRUE; 1,2: slaveanswer.bFunctionCode:=slavepoll.bFunctionCode; slaveanswer.wCount:=slavepoll.wCount; slaveanswer.wOffset:=slavepoll.wOffset; FOR i:= 0 TO slavepoll.wcount-1 BY 1 DO slaveanswer.xarData[i]:=mind_bool[slavepoll.woffset+i]; (*Read from Data-array*) END_FOR 3,4: slaveanswer.bFunctionCode:=slavepoll.bFunctionCode; slaveanswer.wCount:=slavepoll.wCount; slaveanswer.wOffset:=slavepoll.wOffset; FOR i:= 0 TO slaveanswer.wCount-1 BY 1 DO slaveanswer.warData[i]:=mind[slavepoll.woffset+i];(*Read from Data-array*) END_FOR 5: slaveanswer.bFunctionCode:=slavepoll.bFunctionCode; mind_bool[slavepoll.woffset]:=slavepoll.xarData[0];(*Write to Data-array*) slaveanswer.wOffset:=slavepoll.wOffset; slaveanswer.wCount:=slavepoll.wCount; slaveanswer.xarData := slavepoll.xardata; slaveanswerwoffset_temp:=slaveanswer.woffset; slaveanswerwCount_temp:=slaveanswer.wCount; Write_5:=TRUE; 6: slaveanswer.bFunctionCode:= slavepoll.bFunctionCode; mind[slavepoll.woffset]:= slavepoll.warData[0];(*Write to Data-array*) slaveanswer.wOffset:= slavepoll.wOffset; slaveanswer.wCount:=slavepoll.wCount; slaveanswer.wardata := slavepoll.wardata; 23: slaveanswer.bFunctionCode:=slavepoll.bFunctionCode; slaveanswer.wOffset:=slavepoll.wOffset; slaveanswer.wCount:=slavepoll.wCount; FOR i:= 0 TO slavepoll.wCountAdd-1 BY 1 DO mind[slavepoll.woffsetadd+i] := slavepoll.warData[i];(*Write to Data-array*) END_FOR; FOR i := 0 TO slavepoll.wCount BY 1 DO slaveanswer.warData[i] := mind[1+slavepoll.woffset+i];(*Read from Data-array*) END_FOR; END_CASE; IF slavepoll.xAvailable = TRUE THEN slaveanswer();(*When Data ready, send answer*) END_IF END_CASE; END_PROGRAM (* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) FUNCTION Read_dWord : BOOL VAR_INPUT dVAR: DWORD; lo:INT; hi:INT; END_VAR VAR END_VAR (* @END_DECLARATION := '0' *) DWord_0:=dVar;mind[lo]:=Word_01;mind[hi]:=Word_23; END_FUNCTION (* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) FUNCTION Read_Real : BOOL VAR_INPUT rVAR: REAL; lo:INT; hi:INT; END_VAR VAR END_VAR (* @END_DECLARATION := '0' *) Real_0:=rVar;mind[lo]:=Word_01;mind[hi]:=Word_23; END_FUNCTION (* @PATH := '\/Modnet' *) (* @SYMFILEFLAGS := '2048' *) FUNCTION Read_String : BOOL VAR_INPUT sVar: STRING; start:INT; END_VAR VAR END_VAR (* @END_DECLARATION := '0' *) String_0:=LEFT (sVar,29); mind[start]:=wStr_0; mind[start+1]:=wStr_1; mind[start+2]:=wStr_2; mind[start+3]:=wStr_3; mind[start+4]:=wStr_4; mind[start+5]:=wStr_5; mind[start+6]:=wStr_6; mind[start+7]:=wStr_7; mind[start+8]:=wStr_8; mind[start+9]:=wStr_9; mind[start+10]:=wStr_10; mind[start+11]:=wStr_11; mind[start+12]:=wStr_12; mind[start+13]:=wStr_13; bStr_29:=0; mind[start+14]:=wStr_14; END_FUNCTION (* @GLOBAL_VARIABLE_LIST := 'Global_Variables_Modnet' *) (* @PATH := '' *) (* @SYMFILEFLAGS := '2048' *) VAR_GLOBAL (*delovno polje za modnet komunikacijo*) mind :ARRAY [0..9999] OF WORD; mind_bool :ARRAY [0..9999] OF BOOL; (*Buffer-Array*) (*Delovni markerji //*) Bit_0 AT %MX0.0 : BOOL; Byte_0 AT %MB0 : BYTE; Byte_1 AT %MB1 : BYTE; Byte_2 AT %MB2 : BYTE; Byte_3 AT %MB3 : BYTE; Real_0 AT %MR0:REAL; DWord_0 AT %MD0:DWORD; Word_01 AT %MW0:WORD; Word_23 AT %MW2:WORD; String_0 AT %MW10:STRING; wStr_0 AT %MW10:WORD; wStr_1 AT %MW12:WORD; wStr_2 AT %MW14:WORD; wStr_3 AT %MW16:WORD; wStr_4 AT %MW18:WORD; wStr_5 AT %MW20:WORD; wStr_6 AT %MW22:WORD; wStr_7 AT %MW24:WORD; wStr_8 AT %MW26:WORD; wStr_9 AT %MW28:WORD; wStr_10 AT %MW30:WORD; wStr_11 AT %MW32:WORD; wStr_12 AT %MW34:WORD; wStr_13 AT %MW36:WORD; wStr_14 AT %MW38:WORD; bStr_00 AT %MB10:BYTE; bStr_01 AT %MB11:BYTE; bStr_02 AT %MB12:BYTE; bStr_03 AT %MB13:BYTE; bStr_04 AT %MB14:BYTE; bStr_05 AT %MB15:BYTE; bStr_06 AT %MB16:BYTE; bStr_07 AT %MB17:BYTE; bStr_08 AT %MB18:BYTE; bStr_09 AT %MB19:BYTE; bStr_10 AT %MB20:BYTE; bStr_11 AT %MB21:BYTE; bStr_12 AT %MB22:BYTE; bStr_13 AT %MB23:BYTE; bStr_14 AT %MB24:BYTE; bStr_15 AT %MB25:BYTE; bStr_16 AT %MB26:BYTE; bStr_17 AT %MB27:BYTE; bStr_18 AT %MB28:BYTE; bStr_19 AT %MB29:BYTE; bStr_20 AT %MB30:BYTE; bStr_21 AT %MB31:BYTE; bStr_22 AT %MB32:BYTE; bStr_23 AT %MB33:BYTE; bStr_24 AT %MB34:BYTE; bStr_25 AT %MB35:BYTE; bStr_26 AT %MB36:BYTE; bStr_27 AT %MB37:BYTE; bStr_28 AT %MB38:BYTE; bStr_29 AT %MB39:BYTE; (********************************************) END_VAR (* @OBJECT_END := 'Global_Variables_Modnet' *) (* @CONNECTIONS := Global_Variables_Modnet FILENAME : '' FILETIME : 0 EXPORT : 0 NUMOFCONNECTIONS : 0 *)