Vijeo 6.3 - Comparaison de deux chaines

Partie du forum pour tout ce qui concerne les interfaces homme machine ou IHM. Forum, conseil, astuce et entraide sur les interface homme machine ou IHM tels que les magelis, KEP, proface, XBT, .
Répondre
Tartuffe
Code sa première boucle
Code sa première boucle
Messages : 11
Enregistré le : 06 févr. 2025, 09:22

Vijeo 6.3 - Comparaison de deux chaines

Message par Tartuffe »

Bonjour,

J’ai deux IHM identiques sur deux armoires sous Vijeo 6.3 et j’utilise qu’une seule application pour les deux.
J'ai fait un script qui détermine s’il s’agit de l’armoire 1 ou 2 au démarrage de l'IHM en fonction de l’adresse IP.

Code : Tout sélectionner

String adrIP = "";

adrIP=(Sys.getInfoString(IP_ADDRESS_1));

IP_XBT.write(adrIP);  //Cette variable me sert à visualiser le contenu de la chaine de caractères sur une vue

// IHM Voie 1
if (adrIP == "10.38.26.11") 
{
	IHM_Voie_1.write(true); //booleen
}
// IHM Voie 2
if (adrIP == "10.38.26.12")
{
	IHM_Voie_2.write(true);//booleen
}
J'affiche sur une vue la variable String IP_XBT, ça affiche bien 10.38.26.11, mais le bool IHM_Voie_1 reste à false.


Quelle est la bonne méthode pour comparer deux chaines de caractères?

Ou à défaut, y a-t-il une autre solution pour faire un choix en fonction de l'adresse IP de la cible?
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 871
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Vijeo 6.3 - Comparaison de deux chaines

Message par Bruce33 »

Bonjour,

Les opérateurs de comparaison fonctionnent avec des valeurs numériques.
Regardez l'aide en ligne au chapitre 18.9.2.2 "Méthodes String".
Vous devez utiliser la méthode compareTo().
Par exemple :

Code : Tout sélectionner

String adrIP = Sys.getInfoString(IP_ADDRESS_1);
IHM_Voie_1.write(adrIP.compareTo("10.38.26.11") == 0);
IHM_Voie_2.write(adrIP.compareTo("10.38.26.12") == 0);
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1838
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Vijeo 6.3 - Comparaison de deux chaines

Message par Béryl »

Voilà ma méthode :

Code : Tout sélectionner

//Détection de l'IHM hébergeur
String Hmi_Ip=Sys.getInfoString(IP_ADDRESS_1);

if (Hmi_Ip.equals("192.168.0.24"))
  {
	Hmi_id.write(1); //Magélis 1
  }
if (Hmi_Ip.equals("192.168.0.25"))
  {
	Hmi_id.write(2); //Magelis 2
  }

if (Hmi_id.getIntValue()==0)
  {
  	Sys.login(Login,Password);  //Simulation
  }
Tartuffe
Code sa première boucle
Code sa première boucle
Messages : 11
Enregistré le : 06 févr. 2025, 09:22

Re: Vijeo 6.3 - Comparaison de deux chaines

Message par Tartuffe »

Merci pour vos réponses,

J'ai mis en place la méthode avec adrIP.compareTo(), ça fonctionne très bien.

Bonne journée!
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 871
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Vijeo 6.3 - Comparaison de deux chaines

Message par Bruce33 »

Tant mieux si vous êtes satisfait.
Mais la proposition de Béryl apporte deux suggestions :
  • la méthode equals() est plus pertinente que la méthode compareTo() même si on arrive au même résultat :

    Code : Tout sélectionner

    String adrIP = Sys.getInfoString(IP_ADDRESS_1);
    IHM_Voie_1.write(adrIP.equals("10.38.26.11"));
    IHM_Voie_2.write(adrIP.equals("10.38.26.12"));
  • l'utilisation d'une seule variable entière pour identifier l'afficheur plutôt que plusieurs variables booléennes est plus souple. Notamment à l'avenir si vous ajoutez un troisième afficheur...
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7612
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Vijeo 6.3 - Comparaison de deux chaines

Message par itasoft »

Pour info: Si adrIP est une variable globale interne ou externe
----------------------
adrIP.write(Sys.getInfoString(IP_ADDRESS_1));

IHM_Voie_1.write(adrIP.getStringValue().compareTo("10.38.26.11") == 0);
Automaticien privé (de tout)
itasoft@free.fr
Répondre