Bonjour à tous,
J'aimerais pour une application OPC convertir un FLOAT en VARIANT, est ce possible?
Merci beaucoup.
Bonjour à tous,
J'aimerais pour une application OPC convertir un FLOAT en VARIANT, est ce possible?
Merci beaucoup.
Oui, c'est possible.
ça depend de comment sont implementés tes VARIANTS.
Les VARIANTS, c'est juste une technique, différentes bibliothèques l'implémentent de différentes façons.
Il y a boost::variant dans Boost
Il y a QVariant dans Qt
Il y a ...
Salut,
OPC utilise les variables de type tagVARIANT
pour utiliser un float, il faut définir le type :ensuite, tu affectes la valeur dans le champ correspondant aux flottants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 tagVARIANT maVariableFlottante; maVariableFlottante.vt = VT_R4;Tu trouveras la définition de la structure tagVARIANT dans le fichier oaidl.h (dans les répertoires de visual studio normalement...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part maVariableFlottante.fltVal = 123.456;
Ok donc pour mon cas ca devrait donner ca ?
Ja' besoin de votre avis car je ne peux pas faire de run pour le moment, mais au build tout semble correct.
En fait non ca plante....
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // Python return a value which is a Python Object // To Send in OPC, we need a VARIANT tagVARIANT maVariableFlottante; maVariableFlottante.vt = VT_R4; // je fait la conversion pointervar de typen PyObject en "f" PyArg_Parse(pointervar, "f",&maVariableFlottante.vt); // Create the group // By default, the name of the group is Group_Opc COPCGroup* MyGroupOPC = GetGroup(opc, "Group_Opc"); // write to OPC the value of Python MyGroupOPC->addItem(NodePath, true)->writeSync(maVariableFlottante);
ça serait pas plutôt ça :
à moins que tu ais fait une erreur de recopie...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // Python return a value which is a Python Object // To Send in OPC, we need a VARIANT tagVARIANT maVariableFlottante; maVariableFlottante.vt = VT_R4; // je fait la conversion pointervar de typen PyObject en "f" PyArg_Parse(pointervar, "f",&maVariableFlottante.fltVal); // Create the group // By default, the name of the group is Group_Opc COPCGroup* MyGroupOPC = GetGroup(opc, "Group_Opc"); // write to OPC the value of Python MyGroupOPC->addItem(NodePath, true)->writeSync(maVariableFlottante);
Oui effectivement ca serait plutôt ce que tu dis, et le plantage venait de toute façon d'ailleurs.
Je vous retiens au courant sous peu,
En attendant merci
Julien
tagVariant c'est du microsoft pure et dur. (je connaissais pas). Donc niveau portabilité y'a mieux. (boost::variant comme cité plus haut).
D'ailleurs après recherche :
http://msdn.microsoft.com/fr-fr/library/tagvariant.aspxThis class supports the .NET Framework infrastructure and is not intended to be used directly from your code.
Partager