diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 7d2fa76..f49500c 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -69,6 +69,10 @@ namespace CMS_CORE_Library.S7Net /// Oggetto PLC da ri-utilizzare... /// protected Plc currPLC; + /// + /// Lock per connessione PLC + /// + private readonly object connectLock = new object(); #endregion @@ -137,40 +141,42 @@ namespace CMS_CORE_Library.S7Net /// public override CmsError NC_Connect() { - // Try to get information - try + lock (connectLock) { - // Check if Siemens Environment is started - CmsError libraryError = CheckS7Ping(); - if (libraryError.IsError()) - return libraryError; - - // Check connection - currPLC = new Plc(tipoCpu, this.Ip, this.rack, this.slot); - currPLC.Open(); - if (currPLC.IsConnected) - Connected = true; - - // FARE TODO FIXME - // Setup the alarms (with DB bitmap) --> PlcMessages - - if (this.EnableAlarms) + // Try to get information + try { - // PlcMessages + // Check if Siemens Environment is started + CmsError libraryError = CheckS7Ping(); + if (libraryError.IsError()) + return libraryError; + + // Check connection + currPLC = new Plc(tipoCpu, this.Ip, this.rack, this.slot); + currPLC.Open(); + if (currPLC.IsConnected) + Connected = true; + + // FARE TODO FIXME + // Setup the alarms (with DB bitmap) --> PlcMessages + + if (this.EnableAlarms) + { + // PlcMessages #if false SiemensAlarms = new Alarm[] { }; SiemensAlmSvc = new AlarmSvc(ConvertToSTEPLanguage(SiemensLanguage).ThreeLetterISOLanguageName); SiemensAlmSvc.Subscribe(AlarmsChanged); Infrastructure.SubscribeLanguageChanged(NcLanguageChanged); #endif + } + + } + catch (Exception ex) + { + return ManageException(ex); } - } - catch (Exception ex) - { - return ManageException(ex); - } - return NO_ERROR; } ///