[PCVue] Excecution de script sur serveur redondant
- maxpeigne
- Dieu du process

- Messages : 771
- Enregistré le : 11 oct. 2015, 17:31
- Localisation : Nord pas de calais
[PCVue] Excecution de script sur serveur redondant
Bonjour à tous,
- J'ai 2 serveurs redondants sous PCVue 7.20D, donc un prod, j'en ais tout le temps un actif, et l'autre passif.
- Via un script que j'ai tapé, je viens lire un fichier texte (données de production) stocké sur un "serveur-data".
Mon problème: Les deux serveurs exécutent le script en même temps, ce qui fait que je me retrouve avec mes données de prod en double dans l'automate...
Pour résoudre ce problème, je dispose d'un bit sur chacun des serveurs qui me dit si celui ci est actif ou passif (SYSTEME.STATUT.1.10 pour le 1er et SYSTEME.STATUT.2.10 pour le second). Je l'utilise donc pour exécuter mon script uniquement sur le serveur actif.
Mais comme le noms de la variable "Serveur Actif" est différent pour les 2 serveurs, j'ai un souci lorsque je génère une nouvelle version de projet.
Le script du serveur 1 (celui sur lequel je développe) est recopié tel quel dans le serveur 2 (avec SYSTEME.STATUT.1.10 au lieu de SYSTEME.STATUT.2.10 pour savoir s'il est actif)... résultat j'ai mes deux serveurs qui envoient les données de prod lorsque le serveur 1 est actif, et qui ne font rien l'autre c'est le serveur 2 qui est actif.
Je suis donc obligé de modifier manuellement la variable du serveur actif en cours sur le pc serveur 2 à chaque nouvelle version (et mes responsables ont la bougeotte, ça veut dire nouvelle version toutes les 2 semaines...).
Avez vous une solution? J'ai pensé à spécifier à PCVue de ne pas recopier CE script lorsque je fais une nouvelle version, mais je ne sais pas si c'est possible.
Merci.
- J'ai 2 serveurs redondants sous PCVue 7.20D, donc un prod, j'en ais tout le temps un actif, et l'autre passif.
- Via un script que j'ai tapé, je viens lire un fichier texte (données de production) stocké sur un "serveur-data".
Mon problème: Les deux serveurs exécutent le script en même temps, ce qui fait que je me retrouve avec mes données de prod en double dans l'automate...
Pour résoudre ce problème, je dispose d'un bit sur chacun des serveurs qui me dit si celui ci est actif ou passif (SYSTEME.STATUT.1.10 pour le 1er et SYSTEME.STATUT.2.10 pour le second). Je l'utilise donc pour exécuter mon script uniquement sur le serveur actif.
Mais comme le noms de la variable "Serveur Actif" est différent pour les 2 serveurs, j'ai un souci lorsque je génère une nouvelle version de projet.
Le script du serveur 1 (celui sur lequel je développe) est recopié tel quel dans le serveur 2 (avec SYSTEME.STATUT.1.10 au lieu de SYSTEME.STATUT.2.10 pour savoir s'il est actif)... résultat j'ai mes deux serveurs qui envoient les données de prod lorsque le serveur 1 est actif, et qui ne font rien l'autre c'est le serveur 2 qui est actif.
Je suis donc obligé de modifier manuellement la variable du serveur actif en cours sur le pc serveur 2 à chaque nouvelle version (et mes responsables ont la bougeotte, ça veut dire nouvelle version toutes les 2 semaines...).
Avez vous une solution? J'ai pensé à spécifier à PCVue de ne pas recopier CE script lorsque je fais une nouvelle version, mais je ne sais pas si c'est possible.
Merci.
http://automacile.fr - Site et tutoriels sur l'arduino.
Re: [PCVue] Excecution de script sur serveur redondant
hello,
dans ton script, tu ne peux pas indexer la bonne variable en fonction d'une constante du PC (adresse IP par ex ou nom de la station ... --> il faut pouvoir accéder à l'API de Windows) ?
sinon il faut faire un MUTEX (Mutual Exclusion)
une variable unique qui est à 1 lorsqu'un script s'exécute (empêche l'autre de se dérouler en parallèle) et retombe à 0 lorsque le boulot est fini
mais s'il y a un décalage temporel (genre le deuxième script démarre 5 minutes après le premier), le boulot sera quand même fait 2 fois ... --> pour y remédier, met en place un TIMESTAMP (date de la dernière exécution) pour un blocage pendant 24 heures par exemple ... le hic c'est que tu ne seras pas lequel des deux aura fait le boulot (le premier qui a pris la main) ... bon ça devient compliqué là
sinon, peut être le plus simple à faire, c'est à l'automate de trancher et de rejeter les doublons (et éventuellement de vérifier la cohérence) ... ça me paraît plus logique
juste quelques idées
@+
dans ton script, tu ne peux pas indexer la bonne variable en fonction d'une constante du PC (adresse IP par ex ou nom de la station ... --> il faut pouvoir accéder à l'API de Windows) ?
sinon il faut faire un MUTEX (Mutual Exclusion)
une variable unique qui est à 1 lorsqu'un script s'exécute (empêche l'autre de se dérouler en parallèle) et retombe à 0 lorsque le boulot est fini
mais s'il y a un décalage temporel (genre le deuxième script démarre 5 minutes après le premier), le boulot sera quand même fait 2 fois ... --> pour y remédier, met en place un TIMESTAMP (date de la dernière exécution) pour un blocage pendant 24 heures par exemple ... le hic c'est que tu ne seras pas lequel des deux aura fait le boulot (le premier qui a pris la main) ... bon ça devient compliqué là
sinon, peut être le plus simple à faire, c'est à l'automate de trancher et de rejeter les doublons (et éventuellement de vérifier la cohérence) ... ça me paraît plus logique
juste quelques idées
@+
-
MiGaNuTs
- Mi homme - Mi automate

- Messages : 1573
- Enregistré le : 12 nov. 2015, 21:02
- Localisation : 45 - Loiret
- Contact :
Re: [PCVue] Excecution de script sur serveur redondant
Bonjour.
Il est en VB ou en scada basic ton script ?
Remarque ça change pas grand chose en fait.
Dans PCVue 10 il y'a la variable System.STATION_NUMBER qui te renvoi le numéro du poste. du coup tu peut t'en servir pour aller lire la bonne variable "jeton" t’indiquant le serveur actif.
Ça te permets de faire une truc du genre " Quel serveur suis-je -> Ai-je la main -> Je fait (ou pas) des trucs "
Je sait pas si elle existait dans PCVue 7. (Au passage, ça date de quelle année cette install ?)
Il est en VB ou en scada basic ton script ?
Remarque ça change pas grand chose en fait.
Dans PCVue 10 il y'a la variable System.STATION_NUMBER qui te renvoi le numéro du poste. du coup tu peut t'en servir pour aller lire la bonne variable "jeton" t’indiquant le serveur actif.
Ça te permets de faire une truc du genre " Quel serveur suis-je -> Ai-je la main -> Je fait (ou pas) des trucs "
Je sait pas si elle existait dans PCVue 7. (Au passage, ça date de quelle année cette install ?)
- maxpeigne
- Dieu du process

- Messages : 771
- Enregistré le : 11 oct. 2015, 17:31
- Localisation : Nord pas de calais
Re: [PCVue] Excecution de script sur serveur redondant
Merci pour vos réponses!
Je sais que changer uniquement une comparaison dans un script n'est pas une grosse modif, mais si le serveur crame dans 7 ans, je ne pense pas que beaucoup de monde se rappellera de cette modif...
PS: L'install date de 2002.
Bonne question, j'ai posé la question il y a 5 ans lors d'une formation PCVue mais ma version étant ancienne (7.20d), la formatrice n'a pas pu me repondre. Si j'arrive à contacter la hotline je poserai la question.steph68 a écrit :dans ton script, tu ne peux pas indexer la bonne variable en fonction d'une constante du PC (adresse IP par ex ou nom de la station ... --> il faut pouvoir accéder à l'API de Windows) ?
C'est une idée, mais ça risque de poser problème si j'ai (rellement) deux fois de suite les même paramètres à envoyersteph68 a écrit :sinon, peut être le plus simple à faire, c'est à l'automate de trancher et de rejeter les doublons (et éventuellement de vérifier la cohérence) ... ça me paraît plus logique
Le problème reste identique car dans le script du serveur 1, System.STATION_NUMBER devra etre egal à 1 et pour le serveur 2, System.STATION_NUMBER = 2.MiGaNuTs a écrit :Dans PCVue 10 il y'a la variable System.STATION_NUMBER qui te renvoi le numéro du poste. du coup tu peut t'en servir pour aller lire la bonne variable "jeton" t’indiquant le serveur actif.
Ça te permets de faire une truc du genre " Quel serveur suis-je -> Ai-je la main -> Je fait (ou pas) des trucs "
Je sais que changer uniquement une comparaison dans un script n'est pas une grosse modif, mais si le serveur crame dans 7 ans, je ne pense pas que beaucoup de monde se rappellera de cette modif...
PS: L'install date de 2002.
http://automacile.fr - Site et tutoriels sur l'arduino.
-
MiGaNuTs
- Mi homme - Mi automate

- Messages : 1573
- Enregistré le : 12 nov. 2015, 21:02
- Localisation : 45 - Loiret
- Contact :
Re: [PCVue] Excecution de script sur serveur redondant
Bah justement, grâce a cette variable tu peut écrire un script qui n'aura pas le même comportement sur les 2 machines, et donc avoir le même script partout.
-
Laurent
- Générateur de blocs fonctions

- Messages : 124
- Enregistré le : 20 oct. 2015, 11:16
- Localisation : Oise et Ile-de-France / France
Re: [PCVue] Excecution de script sur serveur redondant
Salut,
si la variable System.STATION_NUMBER n'existe pas sous PCVue 7.20, tu peux la bricoler :
- un fichier texte en dehors du répertoire de projet, contenant une chaine permettant de distinguer le serveur (C:\SERVEUR.TXT contenant "1" pour le premier, "2" pour l'autre);
- une variable initialisée au lancement de PCVue, dans laquelle tu recopie le contenu du fichier.
Reste à tester cette variable dans les scripts. Ca te parait honnète ?
si la variable System.STATION_NUMBER n'existe pas sous PCVue 7.20, tu peux la bricoler :
- un fichier texte en dehors du répertoire de projet, contenant une chaine permettant de distinguer le serveur (C:\SERVEUR.TXT contenant "1" pour le premier, "2" pour l'autre);
- une variable initialisée au lancement de PCVue, dans laquelle tu recopie le contenu du fichier.
Reste à tester cette variable dans les scripts. Ca te parait honnète ?
Laurent
- maxpeigne
- Dieu du process

- Messages : 771
- Enregistré le : 11 oct. 2015, 17:31
- Localisation : Nord pas de calais
Re: [PCVue] Excecution de script sur serveur redondant
La variable System.STATION_NUMBER existe sous PCVue 7.20D !
Je vais donc pouvoir la comparer au serveur actif (je testerai cela en fin de semaine).
Merci de votre aide !
Je vais donc pouvoir la comparer au serveur actif (je testerai cela en fin de semaine).
Merci de votre aide !
http://automacile.fr - Site et tutoriels sur l'arduino.
- maxpeigne
- Dieu du process

- Messages : 771
- Enregistré le : 11 oct. 2015, 17:31
- Localisation : Nord pas de calais
Re: [PCVue] Excecution de script sur serveur redondant
Pour conclure le sujet, voila la solution que j'ai adoptée:
Merci à tous pour le coup de main 
Code : Tout sélectionner
' Determination du serveur actif
if (SYSTEM.SERVER.2.10 == 1) then
iServeurActif = 2;
else
iServeurActif = 1;
end if
'On active le script uniquement si ce PC est le serveur actif
if (toi(SYSTEM.STATION_NUMBER) == iServeurActif) then
...http://automacile.fr - Site et tutoriels sur l'arduino.
