From 81f05f615f639fbb0ce218e790474006274f8654 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 23 Jun 2020 15:55:20 +0200 Subject: [PATCH 1/2] fix error type for memread --- CMS_CORE_Library/Models/DataStructures.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMS_CORE_Library/Models/DataStructures.cs b/CMS_CORE_Library/Models/DataStructures.cs index 21727d9..e58aa81 100644 --- a/CMS_CORE_Library/Models/DataStructures.cs +++ b/CMS_CORE_Library/Models/DataStructures.cs @@ -172,10 +172,10 @@ namespace CMS_CORE_Library.Models public static CmsError NO_ERROR = new CmsError(CMS_ERROR_CODES.OK, ""); public static CmsError NOT_CONNECTED_ERROR = new CmsError(CMS_ERROR_CODES.NOT_CONNECTED, "error_not_connected"); public static CmsError NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.INTERNAL_ERROR, "error_not_found"); - public static CmsError S7_PLC_EMPTY_READ = new CmsError(CMS_ERROR_CODES.INTERNAL_ERROR, "error_s7_empy_data"); - public static CmsError S7_PLC_WRONG_DATA = new CmsError(CMS_ERROR_CODES.INTERNAL_ERROR, "error_s7_wrong_data"); - public static CmsError S7_PLC_READ_ERROR = new CmsError(CMS_ERROR_CODES.INTERNAL_ERROR, "error_s7_read_error"); - public static CmsError S7_PLC_WRITE_ERROR = new CmsError(CMS_ERROR_CODES.INTERNAL_ERROR, "error_s7_write_error"); + public static CmsError S7_PLC_EMPTY_READ = new CmsError(CMS_ERROR_CODES.PLC_MEM_CONF_ERROR, "error_s7_empy_data"); + public static CmsError S7_PLC_WRONG_DATA = new CmsError(CMS_ERROR_CODES.PLC_MEM_CONF_ERROR, "error_s7_wrong_data"); + public static CmsError S7_PLC_READ_ERROR = new CmsError(CMS_ERROR_CODES.PLC_MEM_CONF_ERROR, "error_s7_read_error"); + public static CmsError S7_PLC_WRITE_ERROR = new CmsError(CMS_ERROR_CODES.PLC_MEM_CONF_ERROR, "error_s7_write_error"); public static CmsError PROC_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.FUNCTION_NOT_ALLOWED, "error_process_not_found"); public static CmsError FUNCTION_NOT_ALLOWED_ERROR = new CmsError(CMS_ERROR_CODES.FUNCTION_NOT_ALLOWED, "error_function_not_allowed"); public static CmsError BIT_NOT_IN_RANGE_ERROR = new CmsError(CMS_ERROR_CODES.BIT_NOT_IN_RANGE, "error_bit_not_in_range"); From 36a8ac2fd5df1d23ca4a167733e15c4ea88e2aba Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 23 Jun 2020 18:28:43 +0200 Subject: [PATCH 2/2] Added lock for avoid connect resource contention --- CMS_CORE_Library/S7Net/Nc_S7Net.cs | 54 +++++++++++++++++------------- 1 file changed, 30 insertions(+), 24 deletions(-) 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; } ///