From f0bb12d5499a01ed463a3f10f235b6da1dd4e3d1 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 6 Jul 2020 16:47:22 +0200 Subject: [PATCH] review write method recipe (single if < 30) --- CMS_CORE_Library/S7Net/Nc_S7Net.cs | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 1f75c03..59c1ef7 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -2080,6 +2080,8 @@ namespace CMS_CORE_Library.S7Net int memIndex = 0; int packSize = 20; + bool writeSingle = newParameters.Count < 30; + // leggo da PLC a array di byte di appoggio... libraryError = MEM_RWByteList(R, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, PARAMETER_DATA.SubAddress, 0, PARAMETER_DATA.Size, ref currMem); if (libraryError.IsError()) @@ -2104,18 +2106,32 @@ namespace CMS_CORE_Library.S7Net if (currParam.Id != (short)item.Key) currParam.Id = (short)item.Key; currParam.SetpointHMI = (int)item.Value; + // scrivo 1:1 se pochi dati SOLO i singoli valori HMI + if (writeSingle) + { + newMem = S7.Net.Types.DInt.ToByteArray(currParam.SetpointHMI).ToList();// currParam.convertToByte().ToList(); + libraryError = MEM_RWByteList(W, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, PARAMETER_DATA.SubAddress + packSize * (currParam.Id - 1) + 2, 0, 4, ref newMem); + if (libraryError.IsError()) + return libraryError; + } + else + { + // accodo su memoria generale + Buffer.BlockCopy(currParam.convertToByte(), 0, memArray, memIndex, packSize); + } } - // riconverto in byte e sostituisco... - Buffer.BlockCopy(currParam.convertToByte(), 0, memArray, memIndex, packSize); } // converto nuova memoria newMem = memArray.ToList(); memIndex = 0; - // SCRIVO in blocco! - libraryError = MEM_RWByteList(W, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, PARAMETER_DATA.SubAddress, 0, PARAMETER_DATA.Size, ref newMem); - if (libraryError.IsError()) - return libraryError; + if (!writeSingle) + { + // SCRIVO in blocco! + libraryError = MEM_RWByteList(W, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, PARAMETER_DATA.SubAddress, 0, PARAMETER_DATA.Size, ref newMem); + if (libraryError.IsError()) + return libraryError; + } } return NO_ERROR;