CLIENTE-SERVIDOR Necesidad No se precisa conocer los protocolos de comunicación en bajo nivel. Este nivel solo deben conocerlo los servidores. Permite conectar los datos de campo a una aplicación cliente mediante un servidor Una aplicación cliente puede conectarse con varios servidores simultáneamente Francisco Simón Muñiz 4.1 CLIENTE-SERVIDOR Protocolos utilizados DDE (Intercambio dinámicos de datos) Incorporado en los SO Gestionado por Microsoft Utilizado en las aplicaciones de ofimática OPC (OLE process control) Gestionado por OPCFoundation Estándar de hecho Precisa herramientas de desarrollo Francisco Simón Muñiz 4.2 DDE-1 Un cliente debe conocer la presencia del servidor y el nombre de la aplicación La comunicación establecida es de RW Las comunicaciones se hacen sin tipo de datos. Siempre como texto La conexión cliente-servidor consta de: Tópico (canal de comunicación) Items (datos a enlazar) Francisco Simón Muñiz 4.3 DDE-2 Se puede conectar un servidor a múltiples clientes Velocidad de intercambio de datos baja Los datos se pueden obtener por: Petición Suscripción Permite la ejecución remota de comandos Existe un API de programación gratuito DDEML con ejemplos en C++ Francisco Simón Muñiz 4.4 API DDE Francisco Simón Muñiz 4.5 DDE-SERVER API Francisco Simón Muñiz 4.6 DDE-CLIENTE API Francisco Simón Muñiz 4.7 DDE-MENSAJES-CONEXIÓN WM_DDE_INITIATE Inicia una conversación entre cliente y servidor WM_DDE_TERMINATE Termina una conversación iniciada entre cliente y servidor Francisco Simón Muñiz 4.8 DDE-MENSAJES-DATOS WM_DDE_REQUEST WM_DDE_DATA Realiza una petición de datos del cliente al servidor Realiza un envío de datos desde el servidor a los clientes WM_DDE_ACK Reconoce la recepción de un dato Francisco Simón Muñiz 4.9 DDE-MENSAJES-SUSCRIPCIÓN WM_DDE_ADVISE Realiza un enlace permanente de un dato entre el cliente y el servidor (Suscripción) WM_DDE_UNADVISE Termina la conexión de datos permanente entre cliente y servidor. Francisco Simón Muñiz 4.10 DDE-MENSAJES-ESCRITURA WM_DDE_POKE Realiza la escritura de un dato desde el cliente al servidor WM_DDE_EXECUTE Envía una cadena de caracteres desde el cliente al servidor que se debe entender como un comando del sistema. Francisco Simón Muñiz 4.11 DDE-SERVER EJEMPLO Francisco Simón Muñiz 4.12 DDE-SERVER CÓDIGO-1 Francisco Simón Muñiz 4.13 DDE-SERVER CÓDIGO-2 Francisco Simón Muñiz 4.14 DDE-SERVER CÓDIGO-4 Francisco Simón Muñiz 4.15 DDE-SERVER CÓDIGO-3 Francisco Simón Muñiz 4.16 DDE-SERVER CÓDIGO-5 Francisco Simón Muñiz 4.17 DDE-SERVER CÓDIGO-6 Francisco Simón Muñiz 4.18 DDE-CLIENTE EJEMPLO Francisco Simón Muñiz 4.19 DDE-CLIENTE CREACIÓN Francisco Simón Muñiz 4.20 DDE-CLIENTE CONVERSACIÓN Francisco Simón Muñiz 4.21 DDE-CLIENTE PETICIÓN Francisco Simón Muñiz 4.22 DDE-CLIENTE ESCRITURA Francisco Simón Muñiz 4.23 OPC OLE PROCESS CONTROL Creado por Microsoft Gestionado por OFCFoundation Se especifican varios cliente-servidor Acceso a Datos Alarmas y Eventos Históricos Permite comunicación en red Francisco Simón Muñiz 4.24 NECESIDAD DE OPC HMI Software Driver Francisco Simón Muñiz Históricos Software Driver Software Driver Informes Software Driver 4.25 SOLUCIÓN OPC HMI Históricos Informes OPC OPC OPC OPC Software Driver Francisco Simón Muñiz OPC Software Driver OPC Software Driver OPC Software Driver 4.26 OPC CARACTERÍSTICAS Basado en tecnología COM Es de tiempo real Suministra información de la conexión Detecta los servidores instalados Funciones de consulta de Items Permite datos con tipo Incorpora la fecha y calidad a los datos Un cliente lanza la ejecución del servidor Ampliamente aceptado Francisco Simón Muñiz 4.27 OPC MODELO DE OBJETOS OPC/COM Interfaces OPCServer OPCGroup OPCGroup OPCGroup(s) OPCItem(s) OPCItem(s) OPCItem(s) Francisco Simón Muñiz OPCItem(s) OPCItem(s) OPCItem(s) OPCItem(s) OPCItem(s) OPCItem(s) OPC DISEÑO DE UN SERVIDOR OPC/COM Interfaces Gestión de Grupos e Items OPC Optimización y Monitorización de Items Protocolo específico del dispositivo Gestión Hardware Francisco Simón Muñiz 4.29 OPC LIBRERÍAS Y PROGRAMAS Fabricantes: MATRICON ICONICS WINTECH Otros: Ver OPCFOUNDATION Programas: Utilidades de configuración y prueba Servidores para protocolos específicos Francisco Simón Muñiz 4.30 OPC WINTECH Librerías de bajo coste Cliente Servidor Programación en C++ Fáciles de aprender Documentación pobre Versión de evaluación (30 minutos) Francisco Simón Muñiz 4.31 OPC DEMOS Francisco Simón Muñiz 4.32 OPC DEMOS Francisco Simón Muñiz 4.33 OPC DEMOS Francisco Simón Muñiz 4.34 OPC DEMOS Francisco Simón Muñiz 4.35 OPC DEMOS Francisco Simón Muñiz 4.36 OPC DEMOS Francisco Simón Muñiz 4.37 OPC DEMOS Francisco Simón Muñiz 4.38 OPC DEMOS Francisco Simón Muñiz 4.39 OPC DEMOS Francisco Simón Muñiz 4.40 OPC DEMOS Francisco Simón Muñiz 4.41 OPC DEMOS Francisco Simón Muñiz 4.42 OPC SERVER Instalar núcleo redistribuible de OPC Copiar al directorio del proyecto: OPC Core Components Redistributable WtOPCSvr.dll WTOPCsvr.lib WTOPCsvrAPI.h WTOPCsvrEXTapi.h OpcError.h opc_ae.h opcaedef.h opcda.h Documentación: WTOPCSvr.doc Francisco Simón Muñiz 4.43 OPC SERVER Incluir en proyecto: WTOPCsvr.lib Los ficheros .h (en cada fichero .cpp) Obtener para la aplicación un CLSID único mediante GUIDGen.exe const GUID CLSID_OPCSimSvr = {0x99b8f471, 0xc027, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}}; Francisco Simón Muñiz 4.44 OPC SERVER FUNCIONES BOOL UpdateRegistry (BYTE *pCLSID_Svr, LPCSTR Name, LPCSTR Descr, LPCSTR ExePath); BOOL UnregisterServer (BYTE *pCLSID_Svr, LPCSTR Name); BOOL InitWTOPCsvr (BYTE *pCLSID_Svr, UINT ServerRate); Francisco Simón Muñiz 4.45 OPC SERVER FUNCIONES HANDLE CreateTag (LPCSTR Name, VARIANT Value, WORD InitialQuality, BOOL IsWriteable); BOOL UpdateTag (HANDLE TagHandle, VARIANT Value, WORD Quality); BOOL UpdateTagByName (LPCSTR Name, VARIANT Value, WORD Quality); Francisco Simón Muñiz 4.46 OPC SERVER FUNCIONES BOOL ReadTag (HANDLE TagHandle, VARIANT *pValue); BOOL ReadTagWithTimestamp (HANDLE TagHandle, VARIANT *pValue, WORD *pQuality, FILETIME *pTimestamp); BOOL RemoveTag (HANDLE TagHandle); Francisco Simón Muñiz 4.47 OPC SERVER FUNCIONES int NumbrClientConnections (); void RequestDisconnect (); UninitWTOPCsvr(); BOOL EnableWriteNotification (WRITENOTIFYPROC lpCallback, BOOL ConvertToNativeType); void CALLBACK EXPORT NotificationHandler (HANDLE handle,VARIANT *pNewValue, DWORD *pDeviceError) Francisco Simón Muñiz 4.48 OPC CLIENT Instalar núcleo redistribuible de OPC Copiar al directorio del proyecto: Wtclient.dll WTclient.lib WTclientAPI.h WTclientapiex.h OpcError.h opc_ae.h opcaedef.h opcda.h Documentación: WTclient.doc Incluir en proyecto Wtclient.lib y *.h Francisco Simón Muñiz 4.49 OPC CLIENT FUNCIONES WTclientCoInit (); int NumberOfOPCServers (BOOL UseOPCENUM, LPCSTR MachineName); BOOL GetServerName (int index, LPSTR Buffer, int BufSize); HANDLE ConnectOPC(LPCSTR MachineName, LPCSTR ServerName, BOOL EnableDLLBuffering); Francisco Simón Muñiz 4.50 OPC CLIENT FUNCIONES void DisconnectOPC(HANDLE hConnect); int NumberOfOPCItems(HANDLE hConnect); BOOL GetOPCItemName (HANDLE hConnect, int index, char *pBuf, int BufSize); Francisco Simón Muñiz 4.51 OPC CLIENT FUNCIONES HANDLE AddOPCGroup (HANDLE hConnect, LPCSTR Name, DWORD *pRate, float *pDeadBand); void RemoveOPCGroup (HANDLE hConnect, HANDLE hGroup); HANDLE AddOPCItem (HANDLE hConnect, HANDLE hGroup, LPCSTR ItemName); Francisco Simón Muñiz 4.52 OPC CLIENT FUNCIONES void RemoveOPCItem (HANDLE hConnect, HANDLE hGroup, HANDLE hItem); BOOL EnableOPCNotification (HANDLE hConnect, NOTIFYPROC lpCallback); void CALLBACK EXPORT OPCUpdateCallback (HANDLE hGroup, HANDLE hItem, VARIANT *pVar, FILETIME timestamp, DWORD quality) Francisco Simón Muñiz 4.53 OPC CLIENT FUNCIONES BOOL ReadOPCItem (HANDLE hConnect, HANDLE hGroup, HANDLE hItem, VARIANT *pVar, FILETIME *pTimeStamp, DWORD *pQuality); HRESULT ReadOPCItemFromDevice (HANDLE hConnect, HANDLE hGroup, HANDLE hItem, VARIANT *pVar, FILETIME *pTimeStamp, DWORD *pQuality); Francisco Simón Muñiz 4.54 DWORD WriteOPCItem (HANDLE hConnect, HANDLE hGroup, HANDLE hItem, VARIANT *pVar, BOOL DoAsync); BOOL EnableShutdownNotification (HANDLE hConnect, SHUTDOWNPROCAPI lpCallback); void CALLBACK EXPORT ShutdownCallback (HANDLE hConnect) Francisco Simón Muñiz 4.55