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 |