Obsidean_VM/03-VM/9..... MASTER Transport/Standard Transport/FC551 FC FC Compute Machine...

175 lines
5.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

* 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
```