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

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

Embed Size (px)

Citation preview

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

1

VAL3 Ethernet - Sockets

A partir VAL 3 Version 4.x

Page 2: 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

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

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

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

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

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

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é

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

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, …)

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

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)

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

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

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

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

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

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.