Page 1 sur 1

Vijeo 6.3 - Comparaison de deux chaines

Posté : 06 févr. 2025, 10:21
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?

Re: Vijeo 6.3 - Comparaison de deux chaines

Posté : 06 févr. 2025, 11:37
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);

Re: Vijeo 6.3 - Comparaison de deux chaines

Posté : 06 févr. 2025, 11:58
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
  }

Re: Vijeo 6.3 - Comparaison de deux chaines

Posté : 06 févr. 2025, 13:36
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!

Re: Vijeo 6.3 - Comparaison de deux chaines

Posté : 08 févr. 2025, 16:26
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...

Re: Vijeo 6.3 - Comparaison de deux chaines

Posté : 08 févr. 2025, 17:30
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);