Update Ghidini (da provare) x OPC-UA

This commit is contained in:
Samuele Locatelli
2025-07-01 17:53:14 +02:00
parent 6bae8c5cea
commit f02cd79e79
7 changed files with 431 additions and 3 deletions
+34
View File
@@ -789,6 +789,40 @@ namespace IOB_UT_NEXT.Config
}
}
// cerco in OPTPAR la conf json del dizionario StepActionList
if (optParRead.ContainsKey("STEP_ACTION_CONF"))
{
string opcParamConf = optParRead["STEP_ACTION_CONF"];
if (!string.IsNullOrEmpty(opcParamConf))
{
string jsonStepActFileName = Path.Combine(dirPath, opcParamConf);
if (File.Exists(jsonStepActFileName))
{
newConfObj.lgInfo($"Apertura file {jsonStepActFileName}");
using (StreamReader reader = new StreamReader(jsonStepActFileName))
{
string jsonData = reader.ReadToEnd().Replace("\n", "").Replace("\r", "");
if (!string.IsNullOrEmpty(jsonData))
{
newConfObj.lgDebug($"File json composto da {jsonData.Length} caratteri");
if (newConfObj.Actions == null)
{
newConfObj.Actions = new ActionDto();
//newConfObj.Actions.StepActionList = new Dictionary<string, StepActionDto>();
try
{
newConfObj.Actions = JsonConvert.DeserializeObject<ActionDto>(jsonData);
}
catch (Exception exc)
{
newConfObj.lgError($"Eccezione in decodifica conf json STEP_ACTION_CONF{Environment.NewLine}{exc}");
}
}
}
}
}
}
}
// salvo eventuale memTrace...
if (!string.IsNullOrEmpty(fIni.ReadString("OPTPAR", "MEM_2_TRACE", "")))
+7
View File
@@ -15,5 +15,12 @@ namespace IOB_UT_NEXT.Config.Special
/// Configurazione speciale azioni in fase di setup
/// </summary>
public MachineSetupConf SetupConf { get; set; }
/// <summary>
/// Configurazione di un dizionario
/// chiave = action ricevuta
/// valore = elenco di step da eseguire in sequenza
/// </summary>
public Dictionary<string, List<StepActionDto>> StepActionList { get; set; }
}
}
@@ -0,0 +1,57 @@
using MapoSDK;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IOB_UT_NEXT.Config.Special
{
/// <summary>
/// Definizione di una step action (per effettuare una scrittura sul PLC con eventuale ritardo)
/// </summary>
public class StepActionDto
{
/// <summary>
/// Idx Azione (per ordinamento)
/// </summary>
public int IdxAct { get; set; } = 0;
/// <summary>
/// Nome azione
/// </summary>
public string Name { get; set; } = "";
/// <summary>
/// Valore composto (a partire da altri valori in mMap),da usare se != null
/// Sostituzione token espressi nel formato [[token]]
/// </summary>
public string CompoValMMap { get; set; } = null;
#if false
/// <summary>
/// Valore composto (a partire da altri valori in ProdData),da usare se != null
/// Sostituzione token espressi nel formato [[token]]
/// </summary>
public string CompoValProdData { get; set; } = null;
#endif
/// <summary>
/// Valore fix da inviare alla memoria se != null
/// </summary>
public string FixVal { get; set; } = null;
/// <summary>
/// Nome valore memoria da usare (OUT/Write)
/// </summary>
public string MMapWrite { get; set; } = "";
/// <summary>
/// Tempo di attesa prima dell'azione (se >0) in ms
/// </summary>
public int WaitTimeMs { get; set; } = 0;
}
}
+1
View File
@@ -76,6 +76,7 @@ DISABLE_SEND_WDST=TRUE
; conf parametri memoria READ/WRITE
OPC_PARAM_CONF=1042.json
;STEP_ACTION_CONF=1042.json
[BRANCH]
NAME=master
+1 -1
View File
@@ -278,7 +278,7 @@
"name": "OPC_SelProg",
"description": "Prog Selezionato",
"tipoMem": "Int",
"memAddr": "ns=4;s=ext_codice_lotto",
"memAddr": "ns=4;s=hmi_rcp_dmActive",
"index": 0,
"size": 50
}
+309
View File
@@ -0,0 +1,309 @@
{
"BrowseFullVal": "ns=4;s=NxController.GlobalVars",
"BrowseNSIndex": 4,
"BrowseValue": 5001,
"keyPartCount": "ext_prod_parziale_robot4",
"keyPartReq": "",
"keyPartId": "",
"keyProgName": "",
"keyRunMode": "",
"pingAsPowerOn": true,
"Identity": {},
"condWork": [
{
"keyName": "rele_ciclo_automatico",
"targetValue": "True"
}
],
"condPowerOn": {
},
"condReady": {
"checkMode": "AND",
"checkList": [
{
"keyName": "rele_automatico",
"targetValue": "True"
}
]
},
"condManual": {
"checkMode": "AND",
"checkList": [
{
"keyName": "rele_manuale",
"targetValue": "True"
}
]
},
"condEStop": {
"checkMode": "AND",
"negateValue": false,
"checkList": [
]
},
"condError": {
"checkMode": "AND",
"checkList": [
{
"keyName": "rele_emergenza",
"targetValue": "True"
}
]
},
"condCountEnabled": {
"checkMode": "AND",
"checkList": []
},
"condWarmUpCoolDown": {
"checkMode": "OR",
"negateValue": true,
"checkList": [
]
},
"fluxLogVeto": [
"L2p1CommonVariable"
],
"itemTranslation": {
"avail": "Machine Available",
"rstat": "Execution Mode",
"mode": "Controller Mode",
"ncprog": "Program Name",
"IO_150": "Qta Prodotta (metri)",
"lpremain": "Qta Richiesta",
"fdovrd": "PATH FEED OVERRIDE",
"rovrd": "PATH RAPID OVERRIDE"
},
"paramsEndThresh": {
"actFeedRateIpoOvr": 10,
"feedRateIpoOvr": 10
},
"paramsContainsThresh": {
},
"filterItemsNodeId": [
"ns=4;s=abilitazione_aspiratore",
"ns=4;s=abilitazione_man_aspiratore",
"ns=4;s=ailitazione_apre_cassetti",
"ns=4;s=all_barriere_Triplano",
"ns=4;s=all_batteria_PLC_scarica",
"ns=4;s=all_batteria_ROBOT2_scarica",
"ns=4;s=all_batteria_ROBOT3_scarica",
"ns=4;s=all_batteria_ROBOT4_scarica",
"ns=4;s=all_batteria_ROBOT_scarica",
"ns=4;s=all_blocco_inverter_mgazzion_ruote",
"ns=4;s=all_blocco_inverter_ruote",
"ns=4;s=all_blocco_inverter_ruote_10_11",
"ns=4;s=all_blocco_inverter_ruote_12_13",
"ns=4;s=all_blocco_inverter_ruote_14_15",
"ns=4;s=all_blocco_inverter_ruote_16_17",
"ns=4;s=all_blocco_inverter_ruote_18_1",
"ns=4;s=all_blocco_inverter_ruote_19_20",
"ns=4;s=all_blocco_inverter_ruote_2_3",
"ns=4;s=all_blocco_inverter_ruote_4_5",
"ns=4;s=all_blocco_inverter_ruote_6_7",
"ns=4;s=all_blocco_inverter_ruote_robot2",
"ns=4;s=all_codifica_ruote_errate",
"ns=4;s=all_com_robot",
"ns=4;s=all_com_robot2",
"ns=4;s=all_com_robot3",
"ns=4;s=all_com_robot4",
"ns=4;s=all_condizione_reset",
"ns=4;s=all_Ethernet",
"ns=4;s=all_extracorsa_av_manipolatore",
"ns=4;s=all_extracorsa_ind_manipolatore",
"ns=4;s=all_feedback_contac_su_tavola",
"ns=4;s=all_fine_ciclo_da_robot",
"ns=4;s=all_fine_ciclo_da_robot2",
"ns=4;s=all_fine_ciclo_da_robot3",
"ns=4;s=all_ftc_presenza_pezzo_sporca",
"ns=4;s=all_ftc_presenza_pezzo_sporca_robot2",
"ns=4;s=all_ftc_presenza_pezzo_sporca_robot3",
"ns=4;s=all_ftc_presenza_pezzo_sporca_robot4",
"ns=4;s=all_magazzino_pezzi_fuori_posizione",
"ns=4;s=all_magazzino_ruote_fuori_posizione",
"ns=4;s=all_man_fuor_pos_da_robot",
"ns=4;s=all_man_fuor_pos_da_robot2",
"ns=4;s=all_mancanza_pressione_aria",
"ns=4;s=all_modulo_24Vdc",
"ns=4;s=all_plc",
"ns=4;s=all_porta_cabina_aperta",
"ns=4;s=all_porta_quadro_aperta",
"ns=4;s=all_potenza_ausiliari",
"ns=4;s=all_pulsantiera_mobile_ON",
"ns=4;s=all_rete_ethercat",
"ns=4;s=all_robot2_in_emergenza",
"ns=4;s=all_robot4_in_emergenza",
"ns=4;s=all_robot_in_emergenza",
"ns=4;s=all_scatto_termico_aspiratore",
"ns=4;s=all_scatto_termico_magazzino_pezzi",
"ns=4;s=all_vuoto_da_robot",
"ns=4;s=all_vuoto_da_robot2",
"ns=4;s=all_vuoto_da_robot3",
"ns=4;s=all_vuoto_da_robot4",
"ns=4;s=BarCodeIn",
"ns=4;s=BarCodeOut",
"ns=4;s=Hmi_ListaStringheR17",
"ns=4;s=PM_ActiveEnergy",
"ns=4;s=PM_ActivePower",
"ns=4;s=PM_CorrenteI1",
"ns=4;s=PM_CorrenteI2",
"ns=4;s=PM_CorrenteI3",
"ns=4;s=PM_Frequency",
"ns=4;s=PM_PowerFactor",
"ns=4;s=PM_ReactivePower",
"ns=4;s=PM_TensioneV1",
"ns=4;s=PM_TensioneV1_V2",
"ns=4;s=PM_TensioneV1_V3",
"ns=4;s=PM_TensioneV2",
"ns=4;s=PM_TensioneV2_V3",
"ns=4;s=PM_TensioneV3",
"ns=4;s=produzione"
],
"subscribedItems": [
"ns=4;s=ext_codice_lotto",
"ns=4;s=ext_NumPezziora_robot1",
"ns=4;s=ext_NumPezziora_robot2",
"ns=4;s=ext_NumPezziora_robot3",
"ns=4;s=ext_NumPezziora_robot4",
"ns=4;s=ext_popup",
"ns=4;s=ext_prod_parziale_robot1",
"ns=4;s=ext_prod_parziale_robot2",
"ns=4;s=ext_prod_parziale_robot3",
"ns=4;s=ext_prod_parziale_robot4",
"ns=4;s=ext_prod_totale_robot1",
"ns=4;s=ext_prod_totale_robot2",
"ns=4;s=ext_prod_totale_robot3",
"ns=4;s=ext_prod_totale_robot4",
"ns=4;s=ext_R17_articolo_da_robot",
"ns=4;s=ext_reset_parziale",
"ns=4;s=ext_stringa1_popup",
"ns=4;s=ext_stringa2_popup",
"ns=4;s=ext_stringa3_popup",
"ns=4;s=Hmi_Rcp_DmActName",
"ns=4;s=InvRuote_10_11_IOut",
"ns=4;s=InvRuote_12_13_IOut",
"ns=4;s=InvRuote_14_15_IOut",
"ns=4;s=InvRuote_16_17_IOut",
"ns=4;s=invRuote_18_1_IOut",
"ns=4;s=InvRuote_19_20_IOut",
"ns=4;s=InvRuote_2_3_IOut",
"ns=4;s=InvRuote_4_5_IOut",
"ns=4;s=InvRuote_6_7_IOut",
"ns=4;s=InvRuote_8_9_IOut",
"ns=4;s=invTavola_IOut",
"ns=4;s=num_pressione_robot2_sv",
"ns=4;s=num_pressione_robot3_sv",
"ns=4;s=num_pressione_robot4_sv",
"ns=4;s=num_pressione_sv",
"ns=4;s=rele_automatico",
"ns=4;s=rele_ciclo_automatico",
"ns=4;s=rele_emergenza",
"ns=4;s=rele_inserzione_pm",
"ns=4;s=rele_manuale",
"ns=4;s=rele_reset_allarmi",
"ns=4;s=ruota_attiva_robot2_sv",
"ns=4;s=ruota_attiva_robot3_sv",
"ns=4;s=ruota_attiva_robot4_sv",
"ns=4;s=ruota_attiva_sv",
"ns=4;s=valore_pressione_robot2_sv",
"ns=4;s=valore_pressione_robot3_sv",
"ns=4;s=valore_pressione_robot4_sv",
"ns=4;s=valore_pressione_sv",
"ns=4;s=velocita_rot2_SV",
"ns=4;s=velocita_rot3_SV",
"ns=4;s=velocita_rot4_SV",
"ns=4;s=velocita_rot_SV"
],
"mMapWrite": {
"setComm": {
"name": "setComm",
"description": "Commessa",
"tipoMem": "String",
"memAddr": "ns=4;s=ext_stringa1_popup",
"index": 0,
"size": 20
},
"setArt": {
"name": "setArt",
"description": "Articolo",
"tipoMem": "String",
"memAddr": "ns=4;s=ext_stringa2_popup",
"index": 0,
"size": 20
},
"setPzComm": {
"name": "setPzComm",
"description": "Qty",
"tipoMem": "Int",
"memAddr": "ns=4;s=ext_stringa3_popup",
"index": 0,
"size": 4
},
"showPopup": {
"name": "showPopup",
"description": "Mostra POPUP",
"tipoMem": "Boolean",
"memAddr": "ns=4;s=ext_popup",
"index": 0,
"size": 1
},
"processOtherInfo": {
"name": "processOtherInfo",
"description": "Scrittura Commessa + Quantita + Articolo",
"tipoMem": "String",
"memAddr": "ns=4;s=ext_codice_lotto",
"ComposedVal": "[[setComm]] | [[setPzComm]] pz | [[setArt]]",
"index": 0,
"size": 50
},
"forceResetPzCount": {
"name": "forceResetPzCount",
"description": "Reset Contapezzi MES",
"tipoMem": "Boolean",
"memAddr": "ns=4;s=ext_reset_parziale",
"index": 0,
"size": 1
}
},
"mMapRead": {
"OPC_GTOT": {
"name": "OPC_GTOT",
"description": "Contapezzi globale",
"tipoMem": "Int",
"memAddr": "ns=4;s=ext_prod_totale_robot4",
"index": 0,
"size": 4
},
"OPC_SelProg": {
"name": "OPC_SelProg",
"description": "Prog Selezionato",
"tipoMem": "Int",
"memAddr": "ns=4;s=ext_codice_lotto",
"index": 0,
"size": 50
}
},
"mMapWriteLink": {
"setArt": "processOtherInfo",
"setComm": "processOtherInfo",
"setPzComm": "processOtherInfo"
},
"StepActionList": {
"processOtherInfo": [
{
"IdxAct": 1,
"Name": "Abilita Popup",
"FixVal": "True",
"MMapWrite": "showPopup",
"WaitTimeMs": 0
},
{
"IdxAct": 2,
"Name": "Disabilita Popup",
"FixVal": "False",
"MMapWrite": "showPopup",
"WaitTimeMs": 50
}
]
}
}
+22 -2
View File
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Threading;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace IOB_WIN_OPC_UA.IobOpc
@@ -89,11 +90,30 @@ namespace IOB_WIN_OPC_UA.IobOpc
reqValue = compoValue,
name = pKey
};
// aggiungo!
list2Write.Add(currData);
// aggiungo bit popup
currData = new objItem()
{
uid = "showPopup",
reqValue = "True",
name = "showPopup"
};
list2Write.Add(currData);
// scrivo!
plcWriteParams(ref list2Write);
// sctivo nuovo parametro x spegnere popup...
Thread.Sleep(500);
list2Write.Clear();
currData = new objItem()
{
uid = "showPopup",
reqValue = "False",
name = "showPopup"
};
list2Write.Add(currData);
// scrivo!
plcWriteParams(ref list2Write);
// valutare se scrivere il bit di show display?!?
}
}
return answ;