By 953313493@qq.com, 3 June, 2021 Forums Gurux.DLMS ``` int CGXDLMSProfileGeneric::GetData( CGXDLMSSettings& settings, CGXDLMSValueEventArg& e, std::vector< std::vector<CGXDLMSVariant> >& table, std::vector<std::pair<CGXDLMSObject*, CGXDLMSCaptureObject*> >& columns, CGXByteBuffer& data) { if (settings.GetIndex() == 0) { data.SetUInt8(DLMS_DATA_TYPE_ARRAY); if (e.GetRowEndIndex() != 0) { ------here------- GXHelpers::SetObjectCount(e.GetRowEndIndex() - e.GetRowBeginIndex(), data); } else { GXHelpers::SetObjectCount((unsigned long)table.size(), data); } } fix to for array length GXHelpers::SetObjectCount(e.GetRowEndIndex() - e.GetRowBeginIndex()+1, data); ``` +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ in PreRead count should be +1 to compare (*it)->GetRowToPdu() void CGXDLMSBase::PreRead(std::vector<CGXDLMSValueEventArg*>& args) { long count = (*it)->GetRowEndIndex() - (*it)->GetRowBeginIndex() + 1; // Read only rows that can fit to one PDU. ------fix //if ((*it)->GetRowEndIndex() - (*it)->GetRowBeginIndex() > (*it)->GetRowToPdu()) if (count > (*it)->GetRowToPdu()) { count = (*it)->GetRowToPdu(); } GetProfileGenericDataByEntry(p, (*it)->GetRowBeginIndex(), count); } Log in or register to post comments