| |
Miembro registrado 106 mensajes |
|
| Publicado el 02,julio 2019 - 15:28 |
Bonjour a tous ,
Je possède ce morceau de code :
SI SocketEcrit(Nom_socket,MbusQuery)= Vrai ALORS Reponse_autom=SocketLit(Nom_socket,Faux) nNb_octet_reponse=Reponse_autom[[9]]
J'aimerai pouvoir sécuriser cette partie en cas de perte de connexion supérieur a un temps fixé ( 10 secondes actuellement ) j'ai lu que le socket tant qu'on le ferme pas il reste crée même si il ne retourne plus aucune information sauf qu'actuellement je ne sais pas gérer le cas ou j'ai cette perte de connexion. Il me faudrait une solution pour si mon socket est ouvert de vérifié sa disponibilité à savoir si il répond plus que je lance la fermeture du coups pour le re-crée .
Cordialement Maxime |
| |
| |
| | | |
|
| | |
| |
| Publicado el 02,julio 2019 - 18:29 |
Bonjour,
De mémoire je faisais une lecture pendant un temp défini, juste avant la lecture sur la socket je lancais un chrono et analysais ce temps juste après que SocketLit ait rendu la main. si il n'y a pas de Buffer lu et que le temps est bien inférieur à l'attente demandée à la fonction de lecture c'est que le lien est rompu
A tester...
sinon si tu développes les 2 applis qui communiquent ensemble alors il faut passer par les trames de vie |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 03,julio 2019 - 10:02 |
Bonjour ,
Je ne sais pas comment le traité l'erreur que j'ai lors d'une perte de connexion est : " un élément de type 'buffer' ne peut pas être converti vers le type 'entier sans signe sur 1 octet' et cette erreur fait planté le programme .
Je suis novice Windev Cordialement Maxime |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 261 mensajes |
|
| Publicado el 03,julio 2019 - 11:04 |
La fonction "SocketExiste()" retourne vrai tant que la Socket créée n`a pas été fermée par la fonction "SocketFerme()". En cas d`interruption de la communication, "SocketExiste()" peut retourner un résultat positif, bien que le dialogue soit arrête.
Pour tester la validité de la connexion, il faut utiliser la fonction "SocketClientInfo()".
-- Baptiste CLOART Freelance b.cloart@blv-tech.com 06.88.74.80.65 www.linkedin.com/in/cloart www.blv-tech.com |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 03,julio 2019 - 14:08 |
Bonjour ,
Ce cas ne marche pas pour moi car je passe par un socketconnecte et le socketclientinfo demande un crée ou accepte . Mon service va se connecté sur l'automate et l'automate me renvoie les informations demandées .
Cordialement Maxime |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 04,julio 2019 - 15:17 |
est-il egalement possible de vidé le contenu d'un buffer sur un protocole modbus tcp/ip ?
Cordialement Maxime |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 05,julio 2019 - 11:53 |
Bonjour ,
après plusieurs essaye non satisfaisant mon programme plante soit sur :
nNb_octet_reponse=Reponse_autom[[9]] Me renvoyant cette erraur : " un élément de type 'buffer' ne peut pas être converti vers le type 'entier sans signe sur 1 octet"
soit
SI SocketEcrit(Nom_socket,MbusQuery)= Vrai ALORS
Et la un coups j'ai eux le socket c'est bien fermé mais ne veux plus s'ouvrir soit "Connexion reinitialisée par l'autre partie ( WSAECONNRESET )"
Quelqu'un aurai une idée ?
Cordialement Maxime |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 08,julio 2019 - 12:16 |
Bonjour ,
J'ai trouvé ma solution qui semble être fonctionnelle.
Merci pour votre aide
Cordialement Maxime |
| |
| |
| | | |
|
| | |
| |
| Publicado el 16,octubre 2019 - 12:52 |
Bonjour,
J'essaye également la communication avec un automate en Modbus TCP et j'ai le même message d'erreur que toi Maxime, soit : nNb_octet_reponse=Reponse_autom[[9]]
Me renvoyant cette erraur : " un élément de type 'buffer' ne peut pas être converti vers le type 'entier sans signe sur 1 octet"
Pourrais-tu me dire comment tu as trouvé une solution ?
Merci d'avance, |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 16,octubre 2019 - 14:29 |
Bonjour Nathan ,
J'ai réglé mon problème assez facilement sans voir si le socket était présent ou non . Avant la lecture sur le socket je test ma connexion via des variables si mes variables renvoi le bon resultat alors je commence ma lecture sur le socket . Ensuite je test le " Reponse_autom[[9]] " si j'ai pas de réponse ou un message vide je lance ma procédure de fermeture du socket en inscrivant l'erreur et relance une connexion dessus afin de règle mes problèmes éventuelles de déconnexion.
SI Reponse_autom[[9]]="" ALORS HRAZ(HISTO_CONNEXION) HISTO_CONNEXION.DATE_HEURE_MAJ=DateHeureSys() HISTO_CONNEXION.INFO_CONNEXION="Erreur connexion : Socketlit vide" HAjoute(HISTO_CONNEXION)
SocketFerme(Nom_socket)
HLitPremier(ETAT_COMPTEUR_ATELIER,ID_POS_MACHINE) TANTQUE PAS HEnDehors ETAT_COMPTEUR_ATELIER.DATE_HEURE_MAJ=DateHeureSys() ETAT_COMPTEUR_ATELIER.ID_ETAT_MACHINE=10 HModifie(ETAT_COMPTEUR_ATELIER) HLitSuivant(ETAT_COMPTEUR_ATELIER,ID_POS_MACHINE) FIN
gbConnexionOK=Faux SI CONNEXION_AUTOMATE()= Vrai ALORS HRAZ(HISTO_CONNEXION) HISTO_CONNEXION.DATE_HEURE_MAJ=DateHeureSys() HISTO_CONNEXION.INFO_CONNEXION="Connexion automate OK" HAjoute(HISTO_CONNEXION) RETOUR FIN FIN
En espérant t'avoir éclairé ou aidé . |
| |
| |
| | | |
|
| | |