PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile (précédentes versions) → WindevMobile 18 - Buffer - Problème avec le simulateur
WindevMobile 18 - Buffer - Problème avec le simulateur
Débuté par Sam, 09 sep. 2014 09:40 - Aucune réponse
Posté le 09 septembre 2014 - 09:40
Bonjour,

j'utilise un code pour lire un buffer dans mon automate cela fonctionne bien sous android lorsque je suis en mode test mais lorsque j'utilise l'émulateur téléphone android ou un téléphone android je n'ai pas de remonté de donnée.

Je ne comprend pas pourquoi car je n'ai pas de message d'erreur et d'alarme.
Y-t-il des autres éléments à installer ?

Voici mon code:
Tout d'abord j'utilise un bouton pour me connecter en TCP/IP à mon automate :
----------------------------------------------------------------------------------------------------
MoiMême..Libellé=(MoiMême..Enfoncé? "ON" SINON "OFF")
SI SocketConnecte("api_test",502,"192.168.5.115",5000) = Faux ALORS//
Erreur("erreur connexion " + ErreurInfo(errMessage))
SINON
Socket.Option = SocketNagleOff
SI SocketChangeModeTransmission("api_test",SocketSansMarqueurFin)= Vrai ALORS
Info("ok")
FIN
FIN
-------------------------------------------------------------------------------------------------------

Ensuite j'utilise un bouton pour lire dans l'automate:
-----------------------------------------------------------------------------------------------------------
//déclaration des paramètres
Nom_socket est une chaîne
Debut_registre est un entier
Nb_mots est un entier

//affectation registre
Nom_socket = "api_test"
Debut_registre = 100
Nb_mots = 2

//déclaration des variables utiliser en interne de la procedure
i est un entier
Tailleréponse est un entier
Valeur est un entier


Valeur1 , Valeur2 sont des entier
//nNb_octet_reponse est un entier sans signe sur 1 octet
Nb_octet_reponse est un entier
StartLow est un entier
StartHigh est un entier
LengthLow est un entier
LengthHigh est un entier
Reponseautomate est une chaîne
Reponse_autom est un Buffer
MbusQuery est un Buffer sur 12 octet
//calcul des valeur par rapport au numéro de mots et a son nombre a affecter
StartLow = modulo(Debut_registre ,256) //Modulo 256 retourne le reste de la division entière de deux nombres
StartHigh = Debut_registre / 256
LengthLow =modulo( Nb_mots, 256)
LengthHigh = Nb_mots / 256
//confection de la trame
MbusQuery[[1]] = 0 //|
MbusQuery[[2]] = 0 //| Identification du demandeur
MbusQuery[[3]] = 0 //|
MbusQuery[[4]] = 0 //| 0 protocole modbus
MbusQuery[[5]] = 0 //|
MbusQuery[[6]] = 6 //|` Longueur du message qui suit 6 octets
MbusQuery[[7]] = 1 //|
MbusQuery[[8]] = 3 //|` Code de la demande, 03 lecture seule, 16 écriture seule, 23 lecture écriture
MbusQuery[[9]] = StartHigh
MbusQuery[[10]] = StartLow
MbusQuery[[11]] = LengthHigh
MbusQuery[[12]] = LengthLow
//Envoi de la demande de lecture

SI SocketEcrit(Nom_socket,MbusQuery)= Vrai ALORS
//Lecture de la réponse automate et traitement
//bufSam est un buffer
//bufSam = SocketLit("api_test",Faux)
//Erreur(MbusQuery)
//Erreur(bufSam)

Reponse_autom=SocketLit(Nom_socket,Faux)
Tailleréponse=Taille(Reponse_autom)

Info(NumériqueVersChaîne(Asc(Reponse_autom[[9]]),"02x"))
Info(BufferVersHexa(Reponse_autom))
Info(HexaVersEntier(BufferVersHexa(Reponse_autom[[9]],1,1)))
Nb_octet_reponse= HexaVersEntier(BufferVersHexa(Reponse_autom[[9]],1,1))
POUR i=10 A Nb_octet_reponse +9 PAS 2
Valeur1=HexaVersEntier(BufferVersHexa(Reponse_autom[[i]],1,1))
Valeur2=HexaVersEntier(BufferVersHexa(Reponse_autom[[i+1]],1,1))
Valeur=(Valeur1*256) + Valeur2
Reponseautomate=Reponseautomate+NumériqueVersChaîne(Valeur)+RC
FIN
Erreur(Reponseautomate)
SINON
Erreur("erreur lors de la demande de lecture ")
FIN
----------------------------------------------------------------------------------------------------

Si vous avez d'autres questions n'hésitez pas.
Je continue à chercher mais je n'arrive toujours pas à trouver.

Merci.

Samuel