* The call of the FC551 ==must be after the reset of the DBMW94== because inside is set the DBX94.1 #### Example of use for Analogic *** ```pascal CALL "FC Compute Machine Speed" Machine_DB :="DB Signal Blower" Infeed_Signal_type :=#"Type_4-20ma" Infeed_Signal_PEW :="EW1000":P Infeed_Signal_Ethernet_IN :=0 Discharge_Signal_type :=#"Type_4-20ma" Discharge_Signal_PEW :="EW1002" Discharge_Signal_Ethernet_IN :=0 ``` #### If Ethernet signals are needed it can be called like this: *** ```pascal CALL "FC Compute Machine Speed" Machine_DB :="DB Signal Blower" Infeed_Signal_type :=#Type_Ethernet_Bph Infeed_Signal_PEW :=0 Infeed_Signal_Ethernet_IN :=DBxxx.Speed_By_Ethernet_Infeed Discharge_Signal_type :=#Type_Ethernet_Bph Discharge_Signal_PEW :=0 Discharge_Signal_Ethernet_IN :=DBxxx.Speed_By_Ethernet_Outlet ``` #### The types of communications to be adapted can be: *** This uses xxxx_Signal_PEW *************************** * Type_0_10v * Type_4-20ma * Type 0-20ma This uses xxxx_Signal_Ethernet *************************** * Type_Ethernet_Bph * Type_Ethernet_Bpm * Type_Ethernet_% ##### Infeed Data used on the DB exchange *** * IN_CPM_Max DBW30 * IN_Diammeter DBW34 * IN_Adjustement_% DBW40 * IN_Minimun_% DBW42 - OUT_ACT_Speed% DBW60 - OUT_ACT_CPM DBW64 - OUT_ACT_Use DBW62 - OUT_PEW DBW68 - OUT_ACT_mm_sec DBW66 ##### Discharge Data used on the DB exchange *** * IN_CPM_Max DBW46 * IN_Adjustement_% DBW50 * IN_Minimun_% DBW52 * IN_Step DBW48 * OUT_ACT_Speed% DBW70 * OUT_ACT_CPM DBW74 * OUT_ACT_mm_sec DBW76 * OUT_ACT_Use DBW72 * OUT_PEW DBW78 ```pascal // READ Recipe/HMI Data #Ch.IN_CPM_Max := #"IN HMI-Recipe Data"[1]; #Ch.IN_Diammeter_Step := #"IN HMI-Recipe Data"[2]; #Ch."IN_Adjustement_%" :=#"IN HMI-Recipe Data"[3]; #Ch."IN_Minimun_%" := #"IN HMI-Recipe Data"[4]; // Calcolate Infeed_PEW IF #Signal_type <> #Type_Disabled THEN CASE #Signal_type OF #Type_Ethernet_Bph: // Signal from Ethernet - Bottle per Hour #Ch."OUT_ACT_Speed%" := (DINT_TO_REAL(#Signal_Ethernet_IN) * 1000.0 / 60.0) / #Ch.IN_CPM_Max; #Machine_DB.Analogic.Input[#Channel] := #Signal_Ethernet_IN * 10; #Type_Ethernet_Bpm: // Signal from Ethernet - Bottle per Minute #Ch."OUT_ACT_Speed%" := DINT_TO_REAL(#Signal_Ethernet_IN) * 1000.0 / #Ch.IN_CPM_Max; #Machine_DB.Analogic.Input[#Channel] := #Signal_Ethernet_IN * 10; #"Type_Ethernet_%": // Signal from Ethernet - % 0 - 100 #Ch."OUT_ACT_Speed%" := (DINT_TO_REAL(#Signal_Ethernet_IN) * 1000.0) / 100.0; #Machine_DB.Analogic.Input[#Channel] := #Signal_Ethernet_IN * 10; ELSE // Signal from Analogic IF DINT_TO_REAL(#Signal_PEW) <= 32511 THEN #Ch."OUT_ACT_Speed%" := (DINT_TO_REAL(#Signal_PEW) * 1000.0) / 27648.0; ELSE #Ch."OUT_ACT_Speed%" := 0; END_IF; #Machine_DB.Analogic.Input[#Channel] := #Signal_PEW; END_CASE; // Speed CPM #Ch.OUT_ACT_CPM := #Ch."OUT_ACT_Speed%" * #Ch.IN_CPM_Max / 1000.0; // Speed mm/sec #Ch.OUT_ACT_mm_sec := #Ch.OUT_ACT_CPM / 60.0 * (#Ch.IN_Diammeter_Step * 10.0); // Speed Perc Use #Ch.OUT_ACT_Use := #Ch."OUT_ACT_Speed%" * (#Ch."IN_Adjustement_%" + 1000.0) / 1000.0; IF #Ch.OUT_ACT_Use < #Ch."IN_Minimun_%" THEN #Ch.OUT_ACT_Use := #Ch."IN_Minimun_%"; END_IF; CASE #Signal_type OF #Type_0_10v: #Ch.OUT_PEW := #Ch."OUT_ACT_Speed%" / 10.0; #"Type_4-20ma": #Ch.OUT_PEW := (#Ch."OUT_ACT_Speed%" / 1000.0) * 160.0 + 40.0; #"Type 0-20ma": #Ch.OUT_PEW := (#Ch."OUT_ACT_Speed%" / 1000.0) * 200.0; END_CASE; ELSE #Ch.OUT_PEW := 0; END_IF; // WRITE #Machine_DB #"OUT Analog Processed"[1] := ROUND_INT(#Ch."OUT_ACT_Speed%"); #"OUT Analog Processed"[2] := ROUND_INT(#Ch.OUT_ACT_Use); #"OUT Analog Processed"[3] := ROUND_INT(#Ch.OUT_ACT_CPM); #"OUT Analog Processed"[4] := ROUND_INT(#Ch.OUT_ACT_mm_sec); #"OUT Analog Processed"[5] := ROUND_INT(#Ch.OUT_PEW); #Machine_DB.Configuration.Analogic.Input_Type[#Channel] := #Signal_type; #"Actual Speed" := ROUND_DINT(#Ch.OUT_ACT_CPM * 60.0); ``` ### On the old FC551 the max values can be check by: *** Add this 2 networks: ```pascal Network 2: // Check Analog Overflow IN L DINT#0 L %DBW4 //Speed Infeed L DINT#32511 <=D SPB IsOkIn // Value is under maximun L 0 // Value is over max value T %DBW4 IsOkIn : NOP 0 Network 10: // Check Analog Overflow OUT L DINT#0 L %DBW6 //Speed Infeed L DINT#32511 <=D SPB IsOkOut // Value is under maximun L 0 // Value is over max value T %DBW6 IsOkOut : NOP 0 ```