PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Liaison avec une balance Precia Molen via une DLL
Liaison avec une balance Precia Molen via une DLL
Débuté par Christophe, 06 oct. 2016 17:56 - 6 réponses
Membre enregistré
9 messages
Posté le 06 octobre 2016 - 17:56
Bonjour à tous,

Je dois faire une liaison avec une balance Precia Molen (Modèle I700).

Le constructeur met à disposition une DLL pour interroger la balance.
J’ai besoin d’utiliser 3 fonctions pour faire mes premiers tests.

fonction SYS_Open (SYS_t_IpAddr ip, DINT port)
Connexion à la mesure du I700
Attend : Ip L’adresse IP du serveur mesure et Port Le numéro du port du serveur mesure (5000),
En retour de l’appel Le compte-rendu d’exécution de la fonction
1 Ok , 0 Pb

ex : d'appel de la fonction SYS_Open en C#
UInt32 ip;
Int32 port;
ip = 0;

IPAddress test = IPAddress.Parse("127.0.0.1");
ip = Convert.ToUInt32(test.Address);
port = 5000;
if (InterfaceDLL.SYS_Open(ip, port) != 0)
{
}

La structure SYS_t_IpAddr
Definition de la structure de definition de l’adresse IP
typedef ULONG SYS_t_IpAddr Definition du type adresse IP.

La fonction WEIGHT_Get (BYTE N_Voie, WEIGHT_t_Mes * Mes)
Récupération de la mesure
Attend : N_Voie Le numéro de la voie concernée
Rend : Mes La structure contenant la valeur lue.
En retour de l’appel Le compte-rendu d’exécution de la fonction

public struct WEIGHT_t_Mes
{
public Int32 StatusMesure;
public Int32 Brut;
public Int32 Tare;
public Int32 Net;
public Int32 Brut_HR;
public Int32 Tare_HR;
public Int32 Net_HR;
public Byte posVirgBrut;
public Byte posVirgTare;
public Byte posVirgNet;
public Byte posVirgHR;
public Int32 N_DSD_Der;
public Int32 Prix_Unit;
public Int32 Prix_Calc;
public float Debit;
};

La fonction SYS_Close ()
Déconnexion de la mesure du I700
En retour de l’appel Le compte-rendu d’exécution de la fonction


J’ai utilisé AppelDLL32 sans succès.
DLLname est une chaîne = "c:\PRECIA\APP_mesure\C_App_Mesure.dll"
hInst est un entier
hInst = ChargeDLL(DLLname)
SI hInst = 0 ALORS
Erreur("Erreur lors du chargement")
SINON

// 127.0.0.1 --> 2130706432
nIp_adress est un entier sans signe sur 4 octets = 2130706432
nPort est un entier sur 4 octets = 5000

sEntier est un entier
sEntier = AppelDLL32("C_App_Mesure.dll" , "SYS_Open", nIp_adress, nPort)
Trace(Maintenant + " Retour SYS_Open V2 : " + sEntier)


La trace retourne 0 alors que l'exemple en C# ci-dessus retourne 1

Merci d'avance,

Christophe.
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 07 octobre 2016 - 02:46
hello,
es-tu sûr de ta valeur 2130706432 ?
Parce qu'en ajoutant l'assemblage System.Net à un projet windev et en faisant ceci :
test est une IPAddress dynamique = IPAddress.Parse("127.0.0.1")
ip est un entier = Convert.ToUInt32(test.Address)
Trace(ip)


j'obtiens comme valeur pour ip : 16777343

--
Ami calmant, J.P
Membre enregistré
9 messages
Posté le 07 octobre 2016 - 09:22
Merci J.P,

effectivement cela fonctionne bien mieux avec 16777343.

127.0.0.1 = 7F 00 00 01 en Hexa ==> 0100007F si on inverse soit 16777343 en décimal

cela répond à l'appel de mes fonctions SYS_Open et SYS_Close

je cherche pour la fonction WEIGHT_Get à reproduire la structure WEIGHT_t_Mes et lire le résultat. (je suis novice en windev)

un grand merci.

Christophe.
Posté le 07 octobre 2016 - 09:53
Bonjour,

quand j'ajoute l'assemblage System.net, je n'ai pas de classe IPAddress ... ni Convert d'ailleurs
Membre enregistré
9 messages
Posté le 07 octobre 2016 - 11:33
Bonjour,

Il faut ajouter l'assemblage system et non system.net

Cordialement.
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 07 octobre 2016 - 12:54
:o tu as raison Ipaddress fait bien parti de l'assemblage System.dll. System.net c'est son espace de nom. Comme j'avais déjà l'assemblage system inclus dans mon projet je n'ai pas fait attention.

--
Ami calmant, J.P
Posté le 10 octobre 2016 - 08:05
OK merci de l'info ;)