8.7 KiB
The PLC supervisor waits for a request from Q2 to Q4 for permission to change the format. If there are no requests at that time, the permission is granted to the first Qx system that requests it. Subsequently, if more Qx systems request this permission, they are granted in order from TL21 to TL27, from Q2 to Q4. These permissions are sent through the Q1 systems, which then transmit the information from PLC Q2 to Q4. In the HMI of each Qx system, once the new format has been loaded (as is always done), a popup message will appear indicating that permission for the EMD format change has been requested and detailing which line has been granted permission in case another line is undergoing a format change at that moment. This popup message allows, with a TEC password, to bypass and start the format change without having to wait for permission from the PLC supervisor.
PLC | Read | Write |
---|---|---|
Q2 | "FromQ1_D".STW_Q1.X12/X13/X14/X15 | ->Q1 : "ToQ1_D".STW.QE.X16 |
Q3 | "FromQ1_D".STW_Q1.X12/X13/X14/X15 | ->Q1 : "ToQ1_D".STW.QE.X16 |
Q4 | "FromQ1_D".STW_Q1.X12/X13/X14/X15 | ->Q1 : "ToQ1_D".STW.QE.X16 |
SV | "TL23_ReadData_D".FromQ1.ToSV.STW.QE2.X16 | "TL23_WriteData_D".ToQ1.FromSV.STW.X06 / X07 / X08 / X09 the Line that is Changing |
"TL23_ReadData_D".FromQ1.ToSV.STW.QE3.X16 | ||
"TL23_ReadData_D".FromQ1.ToSV.STW.QE4.X16 | ||
Q1 | SV->"ComSV".TL23_ReadFromSv.FromSV.STW.X06 / X07 / X08 / X09 | "ToQ2_D".STW_Q1.X12 / X13 / X14 / X15 |
Line | Bits Communication Q1-Qx |
---|---|
TL21 | X13-X16 |
TL22 | ==X12-X15== |
TL23 | X13-X16 |
TL25 | X13-X16 |
TL26 | ==X12-X15== |
TL27 | X13-X16 |
The logic will be like this:
- The SV will wait until one of the TL_2x_ReadData...QEx is set this indicates that this Q want to change Format
- If the SV has no other Q changing at this moment then it will set the binary number of this Q on the X06,X07,X08,X09
- Every Q1 will copy the bits from the SV to every Qx : X06 -> X12 , X07 -> X13 , X08 -> X14 , X09 -> X15
- When a Qx wants to start the change it will set the bit "ToQ1_D".STW.QE.X16 then will wait until the combination of X12/X13/X14/X15 match to this Q when it match it will start the change if for any reason this number changes the change will be paused.
- When the Qx finish it will reset the "ToQ1_D".STW.QE.X16 .
- Every Q1 after some time will reset the "ToQ1_D".STW.QE.X16 bit
- The SV after some timeout will ignore the TL_2x_ReadData...QEx and change to the next waiting
- Every Qx will have a popup telling the status:
- Actual change format is granted to: XX
- Pushbutton to bypass and to start the change.
On the Supervisor PLC
Was created the FC1104 / DB1104
To monitor and administer the accepted line that can start the changeover
//
//If at the moment there are not EMD changeing in progress
// We check all lines that are requesting to start changeing
// if we found one this Line is assigned to the "DB_Monitoring_Interlock"."Q Line Acepted"
// This enable this line to start the changeover
//
IF "DB_Monitoring_Interlock"."Q Line Acepted" = #No_EMD_Change_Active THEN
IF "DB_Monitoring_Interlock".EMD_Request["DB_Monitoring_Interlock"."Q Line Turn"] THEN
// Check if this request is not in timeout
IF NOT "DB_Monitoring_Interlock".TimeOut_EMD_Request["DB_Monitoring_Interlock"."Q Line Turn"] THEN
// The Slot_Actual can start the changeover
"DB_Monitoring_Interlock"."Q Line Acepted" := "DB_Monitoring_Interlock"."Q Line Turn";
END_IF;
ELSE
// Clear timeouts after the Request goes to false
"DB_Monitoring_Interlock".TimeOut_EMD_Request["DB_Monitoring_Interlock"."Q Line Turn"] := FALSE;
END_IF;
ELSE
IF NOT "DB_Monitoring_Interlock".EMD_Request["DB_Monitoring_Interlock"."Q Line Turn"] OR "DB_Monitoring_Interlock".TimeOut_EMD_Request["DB_Monitoring_Interlock"."Q Line Turn"] THEN
"DB_Monitoring_Interlock"."Q Line Acepted" := #No_EMD_Change_Active;
END_IF;
END_IF;
IF "DB_Monitoring_Interlock".Timers[0].Q THEN
"DB_Monitoring_Interlock"."Q Line Acepted" := #No_EMD_Change_Active;
END_IF;
After made the selection we pass the accepted line to all lines:
"TL21_WriteData_D".ToQ1.FromSV.STW.X06 := "DB_Monitoring_Interlock"."Q Line Acepted".%X0;
"TL21_WriteData_D".ToQ1.FromSV.STW.X07 := "DB_Monitoring_Interlock"."Q Line Acepted".%X1;
"TL21_WriteData_D".ToQ1.FromSV.STW.X08 := "DB_Monitoring_Interlock"."Q Line Acepted".%X2;
"TL21_WriteData_D".ToQ1.FromSV.STW.X09 := "DB_Monitoring_Interlock"."Q Line Acepted".%X3;
"TL22_WriteData_D".ToQ1.FromSV.STW.X06 := "DB_Monitoring_Interlock"."Q Line Acepted".%X0;
"TL22_WriteData_D".ToQ1.FromSV.STW.X07 := "DB_Monitoring_Interlock"."Q Line Acepted".%X1;
"TL22_WriteData_D".ToQ1.FromSV.STW.X08 := "DB_Monitoring_Interlock"."Q Line Acepted".%X2;
"TL22_WriteData_D".ToQ1.FromSV.STW.X09 := "DB_Monitoring_Interlock"."Q Line Acepted".%X3;
"TL23_WriteData_D".ToQ1.FromSV.STW.X06 := "DB_Monitoring_Interlock"."Q Line Acepted".%X0;
"TL23_WriteData_D".ToQ1.FromSV.STW.X07 := "DB_Monitoring_Interlock"."Q Line Acepted".%X1;
"TL23_WriteData_D".ToQ1.FromSV.STW.X08 := "DB_Monitoring_Interlock"."Q Line Acepted".%X2;
"TL23_WriteData_D".ToQ1.FromSV.STW.X09 := "DB_Monitoring_Interlock"."Q Line Acepted".%X3;
"TL25_WriteData_D".ToQ1.FromSV.STW.X06 := "DB_Monitoring_Interlock"."Q Line Acepted".%X0;
"TL25_WriteData_D".ToQ1.FromSV.STW.X07 := "DB_Monitoring_Interlock"."Q Line Acepted".%X1;
"TL25_WriteData_D".ToQ1.FromSV.STW.X08 := "DB_Monitoring_Interlock"."Q Line Acepted".%X2;
"TL25_WriteData_D".ToQ1.FromSV.STW.X09 := "DB_Monitoring_Interlock"."Q Line Acepted".%X3;
"TL26_WriteData_D".ToQ1.FromSV.STW.X06 := "DB_Monitoring_Interlock"."Q Line Acepted".%X0;
"TL26_WriteData_D".ToQ1.FromSV.STW.X07 := "DB_Monitoring_Interlock"."Q Line Acepted".%X1;
"TL26_WriteData_D".ToQ1.FromSV.STW.X08 := "DB_Monitoring_Interlock"."Q Line Acepted".%X2;
"TL26_WriteData_D".ToQ1.FromSV.STW.X09 := "DB_Monitoring_Interlock"."Q Line Acepted".%X3;
"TL27_WriteData_D".ToQ1.FromSV.STW.X06 := "DB_Monitoring_Interlock"."Q Line Acepted".%X0;
"TL27_WriteData_D".ToQ1.FromSV.STW.X07 := "DB_Monitoring_Interlock"."Q Line Acepted".%X1;
"TL27_WriteData_D".ToQ1.FromSV.STW.X08 := "DB_Monitoring_Interlock"."Q Line Acepted".%X2;
"TL27_WriteData_D".ToQ1.FromSV.STW.X09 := "DB_Monitoring_Interlock"."Q Line Acepted".%X3;
Every Q1:
On FC380 we need to pass the actual line acepted:
"ToQ2_D".STW_Q1.X12 := "ComSV".TL21_ReadFromSv.FromSV.STW.X06;
"ToQ2_D".STW_Q1.X13 := "ComSV".TL21_ReadFromSv.FromSV.STW.X07;
"ToQ2_D".STW_Q1.X14 := "ComSV".TL21_ReadFromSv.FromSV.STW.X08;
"ToQ2_D".STW_Q1.X15 := "ComSV".TL21_ReadFromSv.FromSV.STW.X09;
"ToQ3_D".STW_Q1.X12 := "ComSV".TL21_ReadFromSv.FromSV.STW.X06;
"ToQ3_D".STW_Q1.X13 := "ComSV".TL21_ReadFromSv.FromSV.STW.X07;
"ToQ3_D".STW_Q1.X14 := "ComSV".TL21_ReadFromSv.FromSV.STW.X08;
"ToQ3_D".STW_Q1.X15 := "ComSV".TL21_ReadFromSv.FromSV.STW.X09;
"ToQ4_D".STW_Q1.X12 := "ComSV".TL21_ReadFromSv.FromSV.STW.X06;
"ToQ4_D".STW_Q1.X13 := "ComSV".TL21_ReadFromSv.FromSV.STW.X07;
"ToQ4_D".STW_Q1.X14 := "ComSV".TL21_ReadFromSv.FromSV.STW.X08;
"ToQ4_D".STW_Q1.X15 := "ComSV".TL21_ReadFromSv.FromSV.STW.X09;
On Q2/Q3/Q4:
- Created FB EMD Interlock to manage the Request and the habilitation con change the EMD guides
FB222 / FB223 / FB224
On HMI Q2/Q3/Q4 :
New List text: !Pasted image 20240328134059.png
New PopUp:
New Button: