Hi, am trying to read meter that supports compact array for load profile reading. I have following observation with Compact array.
- Whenever I read few entries that fit in single window, all works fine.
- Whenever I try reading more entries that triggers block transfer, director throws exception
"System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
at GXDLMSDirector.GXDLMSCommunicator.Read(Object sender, GXDLMSObject obj, Boolean forceRead)
at GXDLMSDirector.MainForm.Read(Object sender, GXAsyncWork work, Object[] parameters)"
I tried to dig further to understand if its meter issue or GXDLMS. Following is the data that comes out of meter.
: compact array
13
: Array description
02 0F 091717171717171717171717171717
: Array Length (3243)
820CAB
: Array contents
0C07EA0911FF001E00FF8000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0C07EA0911FF010000FF8000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0C07EA0911FF011E00FF8000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0C07EA0911FF020000FF8000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0C07EA0911FF021E00FF8000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
As mentioned above, meter is gonna send data in multiple blocks and in first block, 5 entries are sent out. But in total expected number of bytes are 3243.
In function 'internal static object GetCompactArray(GXDLMSSettings settings, GXByteBuffer buff, GXDataInfo info, bool onlyDataTypes)', i came across this line
while (buff.Position - start < len)
{
}
i see htat buff.Length = ~350, is having data only for 1st block, but len here is 3243. And subsequently throw error because buff do not have enough data.
Can you pls confirm, is my understanding, right? what should be the solution for this?