1 VAL3 Ethernet - Sockets A partir VAL 3 Version 4.x

Preview:

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.

Recommended