Upload
gilebert-boutin
View
107
Download
6
Embed Size (px)
Citation preview
1
VAL3 Ethernet - Sockets
A partir VAL 3 Version 4.x
2
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 s
s
c
Ligne Série RS232 / RS422
SocketsEthernet
3
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
4
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
5
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 avecle serveur si:Config. ethernet OK + serveur démarré
6
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, …)
7
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)
8
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
9
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
10
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.