175 lines
5.0 KiB
Markdown
175 lines
5.0 KiB
Markdown
|
||
* 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
|
||
```
|
||
|