PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Windev socket pour dialogue OMRON protocole FINS
Windev socket pour dialogue OMRON protocole FINS
Débuté par Oertli, 27 mar. 2015 17:28 - 12 réponses
Posté le 27 mars 2015 - 17:28
Bonjours,
Je cherche à mettre en place un dialogue entre automate Omron et soft.
Pour cela j'utilise les sockets, j'utilise le logiciel Multiway d'omron comme exemple de tram ainsi que Wireshark pour snifer et comparer. En envoyant une commande par multiway je la snif et trouve bien en data udp (ds Wireshark):
800003009100007200030101820001000003 > format fins d'une question
La réponse suit dans le multiway:
C0000200720000910003010100000028BBBBCCCC
La réponse suit dans Wireshark:
0028BBBBCCCC Il s'agit des 3 mots lié à la question.
Lorsque je pose cette même question dans le soft je trouve des data incohérente via Wireshark, je pense que j'oublie un morçeau voir une couche capsule!

SI SocketCréeUDP("Api", 56257,"192.168.1.114") = Faux ALORS
Erreur("Erreur création " + ErreurInfo(errMessage))
FIN

Reponse_autom est une chaîne

//envoi de la demande d'écriture
SI SocketEcrit("Api","800003000000007200190101820001000003","192.168.1.145",9600)= Vrai ALORS
//Lecture de la réponse automate et traitement
Reponse_autom=SocketLit("Api",Faux)
Trace(Reponse_autom)
SINON
RENVOYER("erreur lors de la demande d'écriture ")
FIN

Merci d'avance pour votre aide
Posté le 27 mars 2015 - 19:00
Bonjour

j'ai l'impression que l'automatique attend du binaire alors que tu lui
envoie la représentation hexa dans une chaine du binaire en question, ce
qui bien sur est complètement différent

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

NOUVEAU: WXReplication, votre système de réplication open source est
disponible sur mon site web !!!
WXShowroom.com : Montrez vos projets !
Plus d'information sur http://fabriceharari.com


On 3/27/2015 11:28 AM, Oertli wrote:
Bonjours,
Je cherche à mettre en place un dialogue entre automate Omron et soft.
Pour cela j'utilise les sockets, j'utilise le logiciel Multiway d'omron
comme exemple de tram ainsi que Wireshark pour snifer et comparer. En
envoyant une commande par multiway je la snif et trouve bien en data udp
(ds Wireshark):
800003009100007200030101820001000003 > format fins d'une question
La réponse suit dans le multiway:
C0000200720000910003010100000028BBBBCCCC
La réponse suit dans Wireshark:
0028BBBBCCCC Il s'agit des 3 mots lié à la question.
Lorsque je pose cette même question dans le soft je trouve des data
incohérente via Wireshark, je pense que j'oublie un morçeau voir une
couche capsule!

SI SocketCréeUDP("Api", 56257,"192.168.1.114") = Faux ALORS
Erreur("Erreur création " + ErreurInfo(errMessage))
FIN

Reponse_autom est une chaîne
//envoi de la demande d'écriture
SI
SocketEcrit("Api","800003000000007200190101820001000003","192.168.1.145",9600)=
Vrai ALORS //Lecture de la réponse automate et traitement
Reponse_autom=SocketLit("Api",Faux)
Trace(Reponse_autom)
SINON
RENVOYER("erreur lors de la demande d'écriture ")
FIN

Merci d'avance pour votre aide
Posté le 30 mars 2015 - 11:50
Bonjour,

Essaye de passer ta valeur par un buffer et non une chaîne.
Passe ton buffer à la fonction socketecrit avec la taille exacte à écrire, du genre : monbuffer[[ à tailledubuffer]].

Tu peux essayer sans la taille mais par habitude, j'ai remarqué que c'est mieux digéré par l'hôte qui reçoit.
Posté le 30 mars 2015 - 17:10
Merci,
Dans cas comment formater ma commande ?
Reste que je comprends pas, car Wireshark voie en claire les data posé par le Multiway.
Chose qu'une commande socket écrit ne reproduit pas ?
Posté le 31 mars 2015 - 09:38
Le Buffer ne change rien, j’obtiens toujours une valeur incohérente=
x0000003000…‘
Membre enregistré
392 messages
Popularité : +12 (12 votes)
Posté le 31 mars 2015 - 12:36
Bonjour ... A mon sens la trame à envoyer doit être formatée en ASCII. La représentation que l'on voit correspond à de l'hexa...

Cordialement, Michel

--
If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT.
Membre enregistré
392 messages
Popularité : +12 (12 votes)
Posté le 31 mars 2015 - 12:39
Voir ci dessous, pour un problème similaire :

http://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/176654-envoi-code-ascii-avec-socketecrit-176658/read.awp

--
If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT.
Posté le 02 avril 2015 - 11:46
J'ai bien relu ton aide sur le site que tu m'a indiqué.
Pour moi il faut que je retrouve dans data de wireshark le même format car il s'agit du protocole fins. Je dois arriver à écrire la même chose qu'écrit le multiway d'omron.
Je ne vois pas comment formater ma chaine...
Merci pour ton aide
Membre enregistré
392 messages
Popularité : +12 (12 votes)
Posté le 02 avril 2015 - 13:36
Salut, Wireshark te montre une chaine en hexa... Tu dois envoyer les caractères en ascii, soit sous forme de chaine, soit sous forme de buffer.

sNotFormattedData est une chaîne = "800003009100007200030101820001000003"
nDataSize est un entier = Taille(sNotFormatted) /2
SChainToSend est une chaîne = ""

Pour i=1 a nDataSize pas 2
sChainTosend = sChainToSend + Caract(Val(Milieu(sNotFormattedData,i,2),"x") )
FIN

ET envoyer sChainToSend via le socket


A+

--
If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT.
Posté le 03 avril 2015 - 12:34
Merci pour ton aide mais les essais sont non concluant...
Posté le 03 avril 2015 - 15:50
et sans voir ton code, on aura du mal à t'aider à le corriger



On 4/3/2015 4:34 AM, Oertli wrote:
> Merci pour ton aide mais les essais sont non concluant...
Posté le 05 avril 2015 - 20:06
Bonjour,

C'est sur qu'avec ton code cela serait plus simple pour t'aider mais je persiste à t'orienter vers un buffer correctement initialisé avec la fonction hexaversbuffer, en tenant compte du nombre de mots.
Posté le 27 janvier 2016 - 11:33
Je relance le post. Voici le code:

SI SocketConnecte("Api",9600,"192.168.1.145") = Faux ALORS//
Erreur("erreur connexion " + ErreurInfo(errMessage))
SINON
Socket.Option = SocketNagleOff
SI SocketChangeModeTransmission("Api",SocketSansMarqueurFin)= Vrai ALORS
Trace("Connexion ok")
FIN
FIN

Reponse_autom est une chaîne
////envoi de la demande d'écriture
bufF1 est une chaîne="@00FAA80000300910000720002"
bufF2 est une chaîne="0101820001000003"
bufF3 est une chaîne="*s"
sFCS est une chaîne=Pl_CheckSum(bufF1+bufF2)

//SI SocketEcrit("Api",bufF1+bufF2+bufF3+FCS)= Vrai ALORS
SI SocketEcrit("Api",bufF1+bufF2+bufF3+"0A")= Vrai ALORS
//Lecture de la réponse automate et traitement
Reponse_autom=SocketLit("Api",Faux)
Trace(Reponse_autom)
SINON
RENVOYER("erreur lors de la demande d'écriture ")
FIN

SocketFerme("Api")

L'automate me répond FINS

Là doc utilisé
https://www.myomron.com/downloads/1.Manuals//Networks/W227E12_FINS_Commands_Reference_Manual.pdf