#include "OPC_Client.h" // ******************************************************** // Constructeur // ******************************************************** COPC_Client::COPC_Client(void) { CoInitialize(NULL); this->mClientOPC.CreateInstance(__uuidof(EasyDAClient)); // Instanciation du groupe OPC // Affectation des valeurs par défaut des attributs : this->miRequestedUpdateRate = 1000; this->msMachineName = ""; this->msServerClass = "OPCLabs.KitServer.2"; } // ******************************************************** // Destructeur // ******************************************************** COPC_Client::~COPC_Client(void) { CoUninitialize(); this->mClientOPC = NULL; } // ******************************************************************************* // - Méthode StartOPC // - Connexion au serveur OPC désigné par sServerClass sur la machine sMachineName // - Paramètres : - sMachineName : machine où se trouve le serveur OPC // - sServerClass : nom du serveur OPC // - iPeriodRefresh : période de raffraichissement du serveur // ******************************************************************************* void COPC_Client::StartOPC(std::string sMachineName, std::string sServerClass, int iPeriodRefresh) { //DPRINTF("Start OPC...\n"); this->msMachineName = sMachineName.c_str(); this->msServerClass = sServerClass.c_str(); this->miRequestedUpdateRate = iPeriodRefresh; //this->mClientOPC->ItemChanged.connect(boost::bind(&COPC_Client::OnItemChange, this)); //DPRINTF("OPC OK !!!\n\n"); } // ******************************************************** // - Méthode AddItem // - Ajoute un item désigné par sItemId au Serveur OPC // - Paramètre : ID de l'item // ******************************************************** void COPC_Client::AddItem(std::string sItemId) { //DPRINTF("Ajout d'un item...\n"); CComVariant ItemID = sItemId.c_str(); this->mClientOPC->SubscribeItem(this->msMachineName, this->msServerClass, ItemID, 500); //DPRINTF("Item ajouté.\n\n"); } // *********************************************************************** // - Méthode ReadItem // - Lit la valeur de l'item désigné par sItemId // - Paramètre : ID de l'item // - Paramètre de retour : Caractéristique de l'item de type DAVtq // VTQ abbrévations pour Value, timestamp, Quality // *********************************************************************** IDAVtqPtr COPC_Client::ReadItem(std::string sItemId) { IDAVtqPtr ItemResult; CComVariant ItemID = sItemId.c_str(); ItemResult = this->mClientOPC->ReadItem(this->msMachineName, this->msServerClass, ItemID); return (ItemResult); } // *********************************************************************** // - Méthode ReadVQItem // - Lit la valeur de l'item désigné par sItemId // - Paramètre : ID de l'item // - Paramètre de retour : Type structuré TResultItem contenant la qualité // et la valeur de l'item // *********************************************************************** TResultItem COPC_Client::ReadVQItem(std::string sItemId){ IDAVtqPtr ItemResult; int iQuality; TResultItem enrResultItem; ItemResult = this->ReadItem(sItemId); iQuality = ItemResult->Quality; if(iQuality >= 192){ enrResultItem.m_bQuality = true; } else{ enrResultItem.m_bQuality = false; } enrResultItem.m_Value = ItemResult->Value; return enrResultItem; } void COPC_Client::OnItemChange(void){ //if(!this->ItemChanged.empty()){ // Si souscription effectué (au moins un slot est connecté à ce signal): // this->ItemChanged(); // Les méthodes abonnées à cet évenement sont appelées //} }