2017-08-09 3 views
1

J'ai un système de mesure d'électricité Actaris existant et j'ai peu d'informations à ce sujet. Je dois écrire un nouveau programme pour remplacer le programme actuel qui lit les données du compteur. J'essaye d'écouter dans la communication courante par le port série et je vois que la demande SNRM est comme ceci: 7E A0 0A 00 22 00 CB 03 93 69 CE 7EGurux DLMS adresse de communication

J'ai détecté que l'adresse de client est 1, l'adresse de l'appareil logique est 17 et l'adresse physique du compteur est 101.

Je voudrais utiliser Gurux GXDLMSClient pour lire les données des compteurs, mais si je mets les paramètres comme ceci:

`GXDLMSClient client = new GXDLMSClient(); 
client.UseLogicalNameReferencing = true; 
client.InterfaceType = InterfaceType.HDLC; 
client.ClientAddress = 1; 
client.ServerAddress = GXDLMSClient.GetServerAddress(17, 101); 
client.ServerAddressSize = 4;` 

J'envoie la demande SNRM comme ceci: 7E A0 0A 00 00 22 CB 03 93 55 0E 7E

Pourquoi la valeur 22 de l'adresse du serveur 4 est-elle dans une position différente de celle de la communication actuelle? Quelle est la bonne façon de gérer ce problème?

HorCsa

Répondre

1

jamais utilisé les libs Gurux mais en regardant les sources @:

public static int GetServerAddress(int logicalAddress, 
            int physicalAddreess) 
{ 
    return GetServerAddress(logicalAddress, physicalAddress, 0); 
} 


public static int GetServerAddress(int logicalAddress, 
            int physicalAddreess, 
            int addressSize) 
{ 
/* ... packs it with less bytes as possible */ 
} 

Ainsi, dans votre cas crée une adresse de deux octets.

Plus tard, vous demandez à emballer comme une adresse de 4 octets. Ainsi, l'adresse de 2 octets que vous avez précédemment créée est supposée être l'adresse physique d'une adresse de quatre octets.

SC