Hello. I am working with new meter. So i tried to connect with the meter via GXDLMSDirector but got "Authentication failure" message. The manufacturer advised me to disable the invoke_id control in Director. Can you tell me is it possible to disable control of the parameter invoke_id in GXDLMSDirector?
Can you ask from the meter manufacturer what value they want to be used in invoke_id?
If you can get the hex trace from the application of the meter manufacturer I can also check this.
There is answer from manufacturer:
"The parameter itself appeared in later DLMS books. When developing meters based on early editions of books, this parameter could not be taken into account."
It looks like there is no way to manage invoke_id at all.
I also checked in code of .NET library. Exception appears in this method:
public void ConnectToMeter()
{
GXReplyData reply = new GXReplyData();
SNRMRequest();
foreach (byte[] it in SecureClient.AARQRequest())
{
reply.Clear();
ReadDataBlock(it, reply);
}
SecureClient.ParseAAREResponse(reply.Data);
reply.Clear();
if (SecureClient.IsAuthenticationRequired)
{
foreach (byte[] it in SecureClient.GetApplicationAssociationRequest())
{
reply.Clear();
ReadDataBlock(it, reply);
}
SecureClient.ParseApplicationAssociationResponse(reply.Data);
}
}
on this line
SecureClient.ParseAAREResponse(reply.Data);
there is data that throws the exception:
61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 01 A3 05 A1 03 02 01 0D BE 10 04 0E 08 00 06 5F 1F 04 00 00 1E 1D 04 28 00 07
Change Authentication to Low. Then change Logical address to 1 and the physical address to 0x3FFF. Then change the client address to 0x30.
You can also connect with Physical address 1 and Logical address 0.
Connect again.
Let me know if you can connect and the name of the meter manufacturer and default settings can be added to GXDLMSDirector so it's easier to connect the next time.
I'm glad that you solved this. There are lots of small differences between DLMS meters and how to establish the connection for the meter. If one of the parameters is wrong the meter doesn't reply.
Hi,
Hi,
Can you ask from the meter manufacturer what value they want to be used in invoke_id?
If you can get the hex trace from the application of the meter manufacturer I can also check this.
BR,
Mikko
There is answer from
There is answer from manufacturer:
"The parameter itself appeared in later DLMS books. When developing meters based on early editions of books, this parameter could not be taken into account."
It looks like there is no way to manage invoke_id at all.
I also checked in code of
I also checked in code of .NET library. Exception appears in this method:
public void ConnectToMeter()
{
GXReplyData reply = new GXReplyData();
SNRMRequest();
foreach (byte[] it in SecureClient.AARQRequest())
{
reply.Clear();
ReadDataBlock(it, reply);
}
SecureClient.ParseAAREResponse(reply.Data);
reply.Clear();
if (SecureClient.IsAuthenticationRequired)
{
foreach (byte[] it in SecureClient.GetApplicationAssociationRequest())
{
reply.Clear();
ReadDataBlock(it, reply);
}
SecureClient.ParseApplicationAssociationResponse(reply.Data);
}
}
on this line
SecureClient.ParseAAREResponse(reply.Data);
there is data that throws the exception:
61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 01 A3 05 A1 03 02 01 0D BE 10 04 0E 08 00 06 5F 1F 04 00 00 1E 1D 04 28 00 07
I found trace log from
I found trace log from manufacturer app.
This is the trace of initializing connection:
7E A0 0A 00 02 FE FF 61 93 BB C4 7E
7E A0 23 61 00 02 FE FF 73 93 AD 81 80 14 05 02 00 80 06 02 00 80 07 04 00 00 00 01 08 04 00 00 00 01 CE 6A 7E
7E A0 47 00 02 FE FF 61 10 61 9B E6 E6 00 60 36 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 30 30 30 30 30 30 30 30 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 00 7E 1F FF FF 00 D1 7E
7E A0 3A 61 00 02 FE FF 30 FC 29 E6 E7 00 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 BE 10 04 0E 08 00 06 5F 1F 04 00 00 5E 1D 04 28 00 07 C8 61 7E
Hi,
Hi,
This looks correct. Can you get a hex trace when you try to connect with GXDLMSDirector so I can check it?
BR,
Mikko
Log from Director:
Log from Director:
11:18:00 Initializing Network connection.
11:18:01 Send SNRM request.
7E A0 0A 02 02 02 03 61 93 65 05 7E
11:18:02
7E A0 23 61 02 02 02 03 73 24 47 81 80 14 05 02 00 80 06 02 00 80 07 04 00 00 00 01 08 04 00 00 00 01 CE 6A 7E
11:18:02 Parsing UA reply succeeded.
11:18:02 Send AARQ request.
7E A0 4F 02 02 02 03 61 10 53 84 E6 E6 00 60 3E A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 0B 12 21 4D 08 18 19 67 26 5B 1C 13 36 12 5A 10 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 62 1E 5D FF FF B6 3A 7E
11:18:02
7E A0 3A 61 02 02 02 03 30 4B C3 E6 E7 00 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 01 A3 05 A1 03 02 01 0D BE 10 04 0E 08 00 06 5F 1F 04 00 00 1E 1D 04 28 00 07 0A DA 7E
11:18:02 Disconnect request
11:18:02
7E A0 0A 61 02 02 02 03 73 9E 65 7E
Gurux.DLMS.GXDLMSException: Connection is permanently rejected. Authentication failure.
в GXDLMSDirector.GXDLMSCommunicator.InitializeConnection(Boolean force)
в GXDLMSDirector.GXDLMSDevice.InitializeConnection()
в GXDLMSDirector.MainForm.Connect(Object sender, GXAsyncWork work, Object[] parameters)
Hi,
Hi,
Change Authentication to Low. Then change Logical address to 1 and the physical address to 0x3FFF. Then change the client address to 0x30.
You can also connect with Physical address 1 and Logical address 0.
Connect again.
Let me know if you can connect and the name of the meter manufacturer and default settings can be added to GXDLMSDirector so it's easier to connect the next time.
BR,
Mikko
Sorry for the answer. I
Sorry for the long answer. I connected with low auth level. Then i started to read association and at some point exception has been thrown. But the good news is that I was able to manually add the clock object and successfully read it. This is the end of the log:
15:59:17 Get next frame.
15:59:17 Collecting objects
7E A0 0A 00 02 FE FF 61 91 A9 E7 7E
15:59:18
7E A8 8C 61 00 02 FE FF 18 90 A1 16 01 00 02 03 0F 02 16 01 00 01 00 02 04 12 00 01 11 00 09 06 00 00 80 03 08 FF 02 02 01 02 02 03 0F 01 16 01 00 02 03 0F 02 16 03 00 01 00 02 04 12 00 01 11 00 09 06 00 00 80 03 07 FF 02 02 01 02 02 03 0F 01 16 01 00 02 03 0F 02 16 03 00 01 00 02 04 12 00 01 11 00 09 06 00 00 80 03 00 FF 02 02 01 02 02 03 0F 01 16 01 00 02 03 0F 02 16 03 00 01 00 02 04 12 00 01 11 00 09 06 00 00 65 56 7E
15:59:18 Get next frame.
15:59:18 Collecting objects
7E A0 0A 00 02 FE FF 61 B1 AB C6 7E
15:59:18
7E A0 24 61 00 02 FE FF 1A 4C 94 80 03 01 FF 02 02 01 02 02 03 0F 01 16 01 00 02 03 0F 02 16 01 00 01 00 68 F5 7E
15:59:18 Get Next Data block.
15:59:18 Collecting objects
7E A0 16 00 02 FE FF 61 D0 77 B0 E6 E6 00 C0 02 C1 00 00 00 0E A6 46 7E
15:59:18
7E A0 3C 61 00 02 FE FF 3C 5D BB E6 E7 00 C4 02 81 01 00 00 00 0F 00 23 02 04 12 00 01 11 00 09 06 00 00 80 03 05 FF 02 02 01 02 02 03 0F 01 16 01 00 02 03 0F 02 16 01 00 01 00 5E 46 7E
System.ArgumentOutOfRangeException: Index was out of range.
Parameter name: access
в GXDLMSDirector.MainForm.RefreshDevice(GXDLMSMeter dev, Boolean bRefresh)
в GXDLMSDirector.MainForm.Refresh(Object sender, GXAsyncWork work, Object[] parameters)
Oh, I changed the
Oh, I changed the authentication level to high and was also able to connect. Strange thing. Thanks a lot for your help.
Hi,
Hi,
I'm glad that you solved this. There are lots of small differences between DLMS meters and how to establish the connection for the meter. If one of the parameters is wrong the meter doesn't reply.
BR,
Mikko