Hi Mikko, i am back working on the itron meter data reading. I created new forum post because i can't reply on the old one.
After trying out the update, the issue on reading Itron SL7000's load profile (0.0.99.1.0.255) still persists
- if i read capture objects first (index 3), it returns error 13 : DLMS_ERROR_CODE_ACCESS_VIOLATED
- if i read without it, it returns error 258 : DLMS_ERROR_CODE_INVALID_PARAMETER, but i can see some data in the traces, and i can use GXDLMSTranslator to translate and get the data
- i commented out the DLMS_USE_EPOCH_TIME in both gxIgnore and ArduinoIgnore, still no luck
- i tried imitating the ACE PILOT reading sequence for reading load profile, still no luck
how can i work around this issue? please assist me in reading it
if you don't mind me asking, have you done reading the Itron SL7000's load profile using C? how did you manage to do that?
by the way this is the current code:
////////////////////////////////////////////////////////////
// profile generic reading sequence for
// itron meters, imitating the ACE PILOT reading sequence
////////////////////////////////////////////////////////////
gxData dataItron1;
cosem_init(BASE(dataItron1), DLMS_OBJECT_TYPE_DATA, "0.0.136.0.1.255");
com_read((gxObject*)&dataItron1, 2);
obj_toString((gxObject*)&dataItron1, &data);
GXTRACE(GET_STR_FROM_EEPROM("dataItron1 >>"), data);
obj_clear((gxObject*)&dataItron1);
free(data);
gxData dataItron2;
cosem_init(BASE(dataItron2), DLMS_OBJECT_TYPE_DATA, "0.0.136.0.2.255");
com_read((gxObject*)&dataItron2, 2);
obj_toString((gxObject*)&dataItron2, &data);
GXTRACE(GET_STR_FROM_EEPROM("dataItron2 >>"), data);
obj_clear((gxObject*)&dataItron2);
free(data);
gxProfileGeneric dataItron3_profile;
cosem_init(BASE(dataItron3_profile), DLMS_OBJECT_TYPE_PROFILE_GENERIC, "0.0.99.128.1.255");
com_read((gxObject*)&dataItron3_profile, 2);
// com_readRowsByEntry(&dataItron3_profile, 1,1);
obj_toString((gxObject*)&dataItron3_profile, &data);
GXTRACE(GET_STR_FROM_EEPROM("dataItron3_profile >>"), data);
obj_clear((gxObject*)&dataItron3_profile);
free(data);
////////////////////////////////////////////////////////////
gxProfileGeneric pgLoadProfile;
cosem_init(BASE(pgLoadProfile), DLMS_OBJECT_TYPE_PROFILE_GENERIC, "0.0.99.1.0.255");
// com_read(BASE(pgLoadProfile), 3);
// GXTRACE(GET_STR_FROM_EEPROM("PG >> "), )
// com_getAssociationView();
// com_readProfileGenericColumns();
// com_readProfileGenerics();
gxtime start1, end1;
time_init(&start1 ,2025,3,25,-1,-1,-1,-1,-2);
time_init(&end1 ,2025,3,26,-1,-1,-1,-1,-2);
// com_readRowsByRange(&pgLoadProfile, &start1, &end1);
// com_readRowsByEntry(&pgLoadProfile, 1, 1);
int retPg;
if ((retPg = com_readRowsByRange(&pgLoadProfile, &start1, &end1)) != DLMS_ERROR_CODE_OK)
{
GXTRACE_INT(GET_STR_FROM_EEPROM("com_readRowsByRange failed."), retPg);
}
obj_toString(BASE(pgLoadProfile), &data);
// obj_toString(BASE(pgLoadProfile.captureObjects.data), &data);
GXTRACE(GET_STR_FROM_EEPROM("\nprofileGeneric >> "), data);Thank you
jack
Hi , There are some problems…
Hi ,
There are some problems with the profile generics of SL 7000.
You need to ask LogicalDevice_5.35_OBIS_SL761 from the meter vendor. This document explains the profile generic structure.
Make sure that your client and server addresses are correct. Try to read your meter with GXDLMSDirector.
BR,
Mikko
Hi Mikko, thank you for…
Hi Mikko, thank you for quick response.
I do have the document, and yes i have used GXDLMSDirector before writing the code to read the meter.
As i previously stated in this forum here:
https://gurux.fi/node/35131
i can connect and read the load profile data using GXDLMSDirector. After that i used ESP32 to connect, which was successful, but when i tried to read the profile i failed. i do refer to the manual to know the structure of the load profile. The problem is i can only get the capture objects, but not the data. If i only do readRowsbyRange, i don't get the data, but from the trace, i know there is data. After that i get and tried the latest version as you suggested, but i still didn't manage to get proper data. I'm willing to parse the data by hand, but before that i need to get the data stored a variable or somewhere so i can process it. Is there any workaround for this? Maybe you give hint how to look at and do the code? Please help me achieve this.
By the way using the previous code I get this:
Is it possible to accumulate the data blocks from RX frames, so it can be turned to a single big block of GetResponse? I used GXDLMSTranslator, checked "PDU Only" and "Complete PDU", and i get this (i only included the frames relevant to load profile):
If i combine these two blocks of response data and paste it to "Data to XML" in Gurux DLMS Translator, i can get data in XML (please refer to 1st post in the "Data To XML" part), which is easier to work with.
I intend to get this block and translate it so it can be little bit easier to parse. Is this doable? Please guide me in achieving this.
Thank you
jack
Hi, GXDLMSDirector doesn't…
Hi,
GXDLMSDirector doesn't use deviation and you are using -2.
Try to set
time_init(&start1 ,2025,3,25,-1,-1,-1,-1, 0x8000);
time_init(&end1 ,2025,3,26,-1,-1,-1,-1,0x8000);
BR,
Mikko
Hi, Mikko, I have modified…
Hi, Mikko, first I have modified the code so the generated date would be 0xFFFF (imitating the ACE PILOT's frame), my apologies.
I tried that in my previous attempt:
and also tried using skips, but i still can't get the data. How about getting the RX and combine it, then translate and put it in arrays or struct? What's the better approach?
In my attempt i also tried using python, and it worked. Is the implementation of profile reading in C is different than in python?
Hi, I just realized that the…
Hi,
I just realized that the time is not correct. You can't use the ignore time part.
Try something like this:
time_init(&start1 ,2025,3,25, 0,0,0,-1, 0x8000);
BR,
Mikko