100 likes | 424 Vues
VAL3 Ethernet - Sockets. A partir VAL 3 Version 4.x. Communications avec Sockets. Même type de communication que lignes Série excepté : Basée sur câble Ethernet Communication de type Client – Serveur : multiples machines sur le réseau. c. c. s. Ligne Série RS232 / RS422. s. Sockets
E N D
VAL3 Ethernet - Sockets A partir VAL 3 Version 4.x
Communications avec Sockets • Même type de communication que lignes Série excepté : • Basée sur câble Ethernet • Communication de type Client – Serveur : multiples machines sur le réseau c c s Ligne Série RS232 / RS422 s Sockets Ethernet
Spécifications CS8 • CS8 peut être client et/ou serveur • Possible de déclarer plusieurs clients ET plusieurs serveurs sur une même CS8 ==> 1 CS8 peut communiquer avec plusieurs systèmes • Chaque communication utilise 1 numéro de port • 1 CS8 Serveur peut seulement accepter 1 client ==> pour avoir 1 Serveur CS8 connecté à plusieurs clients nécessaire de définir plusieurs ports • Déclaration de clients et de serveurs est fait dans le tableau de bord
Déclaration de serveurs • Port doit être le même que celui du client • ! Des ports sont réservés pour des protocoles (modbus 502, ftp 21, …) • utilise numéro > 1000 , vérifier que numéro libre • Fin de chaîne : code ASCII du caractère ajouté à la chaîne (messages string) • Temps maxi : délai pour déterminer si la communication est OK Serveur est prêt à recevoir des connexions uniquement lorsque une application qui utilise le socket est en exécution
Déclaration de clients • Port doit être le même que celui du serveur • Adresse du serveur : adresse IP du serveur • Temps maxi : délai pour déterminer si la communication est OK Possible de tester connexion avec le serveur si: Config. ethernet OK + serveur démarré
Lire et écrire sur Sockets • Comme les lignes série • io:Srv1= "Ceci est un message" ou io:Clt1= " Ceci est message" écrit la chaîne sur le port (ajoute le délimiteur de chaîne à la fin du message) • message = io:Srv1 ou message = io:Clt1 lit une chaîne depuis le port (lit tous les caractères jusqu’au délimiteur ou jusqu’à 128 car.) • io:Clt1= 65 ou io:Srv1= 65 écrit 1 car. sur le port (code ASCII) • val=io:Clt1 ou val=io:Srv1 lit 1 car. sur le port • Une erreur d’exécution (60) est générée en cas de « temps maxi » (connexion ou lecture) ou erreur de communication (coupure de ligne, arrêt du socket, tampon de données plein, …)
Instructions SIO • Lire un tableau de num sur la SIO : (non bloquante) • nbcar = sioGet(io:Clt1, ligne) • num nbcar retourne nombre de car. lus sur le port • num ligne est le tableau des caractères lus • Stoppe quand le tableau est plein (dimension du tableau) ou quand le tampon est vide • retourne -1 si connexion a échouée • Écrire un tableau de num sur SIO : (non bloquante) • nbcar = sioSet(io:Clt1, ligne) • num nbcar retourne le nombre de car. écrit sur le port • num ligne est le tableau de caractères à écrire • retourne -1 si la connexion a échouée • Fermer la connexion : • nbcar = clearBuffer(io:Clt1) • Ferme la connexion et retourne le nb de car. supprimés dans nbcar (num)
Gestion du temps maxi • Erreur exécution (60) est générée après le temps maxi pour les instructions : • io:Srv1= "this is a message" ou io:Clt1= "this is a message" • message = io:Srv1 ou message = io:Clt1 • => nécessite une tâche pour gérer les erreurs de comm. • Test de la valeur retournée par instruction après temps maxi : • nbcar = sioGet(io:Clt1, line) -1 pas de connexion • nbcar = sioSet(io:Clt1, line) 0 connexion établie • => pas besoin d’une tâche de gestion • exemple : un client veut savoir quand le serveur est prêt • do • nStatut = sioSet(io:Clt1, nLigne) • until nStatut > -1
Nombre de Clients/serveurs par CS8 • CS8 accepte connexions multiples : 40 sockets • 1 client utilise 1 socket • 1 serveur utilise 1 socket pour lui même + 1 socket le client • 1 serveur peut communiquer avec plusieurs clients sur le même port • size(io:srv1) retourne le nombre de clients connectés • io:srv1[0]="ndjfjsdkjsdfjsfk" pour écrire sur le client 0 • io:srv1[1]="ndjfjsdkjsdfjsfk" pour écrire sur le client 1
Généralités • Sockets utilise une mémoire tampon d’entrées de 8 Ko • Quand pleine, l’envoyeur est notifié, une erreur générée et la connexion est fermée. • Le récepteur n’est pas notifié, peut lire toutes les données de la mémoire tampon, détecte ensuite que la connexion est fermée et une erreur est générée. • En cas d’erreur de connexion, bouton « Test » du tableau de bord peut retourné une erreur dans les 5 secondes sur vraie CS8. • MAIS sur émulateur erreur après 65 secondes • => Sur émulateur faire en premier commande « ping » par la ligne de commande Windows pour tester la connexion.