DUTs ---- GVLs ---- GVL_COM ^^^^^^^ :: VAR_GLOBAL // Define COM Ports/Buffers incl. library Tc2_SerialCom SerialRXBuffer : ComBuffer; SerialTXBuffer : ComBuffer; // Serial Terminal fbSerialLineControl: SerialLineControl; //SERIAL IO {attribute 'TcLinkTo' := '.Status:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Status; .D[0]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 0; .D[1]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 1; .D[2]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 2; .D[3]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 3; .D[4]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 4; .D[5]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 5; .D[6]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 6; .D[7]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 7; .D[8]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 8; .D[9]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 9; .D[10]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 10; .D[11]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 11; .D[12]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 12; .D[13]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 13; .D[14]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 14; .D[15]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 15; .D[16]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 16; .D[17]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 17; .D[18]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 18; .D[19]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 19; .D[20]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 20; .D[21]:=TIIB[EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 21; '} stComIn AT %I* : EL6inData22B; {attribute 'TcLinkTo' := '.Ctrl:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Ctrl; .D[0]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 0; .D[1]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 1; .D[2]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 2; .D[3]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 3; .D[4]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 4; .D[5]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 5; .D[6]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 6; .D[7]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 7; .D[8]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 8; .D[9]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 9; .D[10]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 10; .D[11]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 11; .D[12]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 12; .D[13]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 13; .D[14]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 14; .D[15]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 15; .D[16]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 16; .D[17]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 17; .D[18]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 18; .D[19]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 19; .D[20]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 20; .D[21]:=TIIB[EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 21; '} stComOut AT %Q* : EL6outData22B; // Define COM Ports/Buffers incl. library Tc2_SerialCom E2_SerialRXBuffer : ComBuffer; E2_SerialTXBuffer : ComBuffer; // Serial Terminal E2_fbSerialLineControl: SerialLineControl; //SERIAL IO {attribute 'TcLinkTo' := '.Status:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Status; .D[0]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 0; .D[1]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 1; .D[2]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 2; .D[3]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 3; .D[4]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 4; .D[5]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 5; .D[6]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 6; .D[7]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 7; .D[8]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 8; .D[9]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 9; .D[10]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 10; .D[11]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 11; .D[12]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 12; .D[13]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 13; .D[14]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 14; .D[15]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 15; .D[16]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 16; .D[17]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 17; .D[18]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 18; .D[19]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 19; .D[20]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 20; .D[21]:=TIIB[EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 21; '} E2_stComIn AT %I* : EL6inData22B; {attribute 'TcLinkTo' := '.Ctrl:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Ctrl; .D[0]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 0; .D[1]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 1; .D[2]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 2; .D[3]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 3; .D[4]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 4; .D[5]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 5; .D[6]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 6; .D[7]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 7; .D[8]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 8; .D[9]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 9; .D[10]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 10; .D[11]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 11; .D[12]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 12; .D[13]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 13; .D[14]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 14; .D[15]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 15; .D[16]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 16; .D[17]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 17; .D[18]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 18; .D[19]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 19; .D[20]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 20; .D[21]:=TIIB[EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 21; '} E2_stComOut AT %Q* : EL6outData22B; END_VAR GVL_Devices ^^^^^^^^^^^ :: VAR_GLOBAL (*TD20*) {attribute 'pytmc' := ' pv: PTM:01 '} PTM_01 : FB_PTM_TurboDrive; // PLC IO Interface PTM_01_Serial : FB_Oerlikon_TD20_COM; //Serial Interface (*Pfeiffer*) {attribute 'pytmc' := ' pv: PTM:02 '} PTM_02 : FB_PTM_Pfeiffer; {attribute 'pytmc' := ' pv: PTM:03 '} PTM_03 : FB_PTM_Pfeiffer; // They share the same serial port st_Pfeiffer_CTRL : ARRAY[1..20] OF ST_PfeifferControl; st_Pfeiffer_RBK : ARRAY[1..20] OF ST_PfeifferStatus; fb_PfeifferCom : FB_PFEIFFER_COM; END_VAR POUs ---- MAIN ^^^^ :: PROGRAM MAIN VAR END_VAR PRG_COM(); // Leybold Turbo Drive (* Instanitate the Function block for Pump Control*) PTM_01(i_xExtILKOk:= TRUE , iq_stPtm=> ); (* Instanitate the Function block for serial communication with TD20 *) PTM_01_Serial(SerialRXBuffer := SerialRXBuffer, SerialTXBuffer:= SerialTXBuffer, astTD20Status=>); (* Copy Status Pv's into the PTM structure*) PTM_01.M_Serial_IO(PTM_01_Serial.astTD20Status); //Pfeiffer Turbo (* Instanitate the Function block for Pump Control*) PTM_02(i_xExtIlkOK:= TRUE , iq_stPTM=> ); PTM_03(i_xExtIlkOK:= TRUE , iq_stPTM=> ); (*Assign adresses to the pfeiffer controllers connected to this serial terminal*) st_Pfeiffer_CTRL[1].iSerialAddress :=1; st_Pfeiffer_CTRL[1].xEnableComm := TRUE; st_Pfeiffer_CTRL[2].iSerialAddress :=2; st_Pfeiffer_CTRL[2].xEnableComm := TRUE; (* Instanitate the Function block for serial communication with Pfeiffer*) fb_PfeifferCom(astPfeifferControl := st_Pfeiffer_CTRL, astPfeifferStatus:= st_Pfeiffer_RBK, SerialRXBuffer:= E2_SerialRXBuffer, SerialTXBuffer:= E2_SerialTXBuffer); (* Copy Status Pv's into the PTM structure*) PTM_02.M_Serial_IO(st_Pfeiffer_CTRL:=st_Pfeiffer_CTRL[1],st_Pfeiffer_RBK:=st_Pfeiffer_RBK[1]); PTM_03.M_Serial_IO(st_Pfeiffer_CTRL:=st_Pfeiffer_CTRL[2],st_Pfeiffer_RBK:=st_Pfeiffer_RBK[2]); END_PROGRAM PRG_COM ^^^^^^^ :: PROGRAM PRG_COM VAR END_VAR //needs to run on a seperate task //PTM_01 (*Instanitate Serial port com function *) fbSerialLineControl( Mode:= SERIALLINEMODE_EL6_22B, pComIn:= ADR(stComIn), pComOut:=ADR(stComOut), SizeComIn:= SIZEOF(stComIn), TxBuffer:= SerialTXBuffer, RxBuffer:= SerialRXBuffer, Error=> , ErrorID=> ); //PTM_02 and PTM_03 (*Instanitate Serial port com function *) E2_fbSerialLineControl( Mode:= SERIALLINEMODE_EL6_22B, pComIn:= ADR(E2_stComIn), pComOut:=ADR(E2_stComOut), SizeComIn:= SIZEOF(E2_stComIn), TxBuffer:= E2_SerialTXBuffer, RxBuffer:= E2_SerialRXBuffer, Error=> , ErrorID=> ); END_PROGRAM