Red de conocimiento informático - Material del sitio web - Cómo desarrollar un servidor OPC

Cómo desarrollar un servidor OPC

I. Preparación:

Descargue la biblioteca de enlaces dinámicos del agente OPC desde opc Foundation y luego siga las instrucciones para instalarla. Estas bibliotecas de enlaces dinámicos son necesarias para ejecutar programas opc.

1. Copie los siguientes archivos al directorio SYSTEM32 de la computadora para ejecutar el servidor OPC y el cliente OPC

Copie opcproxy.dll C:\WINDOWS\system32

Copiar opccomn_ps.dll C:\WINDOWS\system32

Copiar opc_aeps.dll C:\WINDOWS\system32

Copiar opchda_ps.dll C:\WINDOWS\system32

Copiar aprxdist.exe C:\WINDOWS\system32

Copiar opcenum.exe C:\WINDOWS\system32

2. Registre estos archivos dll

REGSVR32 opcproxy.dll

REGSVR32 opccomn_ps.dll

REGSVR32 opc_aeps.dll

REGSVR32 opchda_ps.dll

3. no existe en Windows (\WINDOWS \system32), ejecute aprxdist.exe

4. Instale opcenum.exe

opcenum /regserver

Desarrollo de Two.opcserver

1. Cree un nuevo proyecto vc. Por ejemplo, cree un proyecto de consola. Incluya los siguientes archivos de encabezado en el proyecto

#include "opcda.h"

#include "opc_ae.h"

#include "WTOPCsvrAPI.h"

#include "WtOPCsvrEXTapi.h"

Los archivos de encabezado anteriores se encuentran en el programa de muestra, cópielos en su propio proyecto.

WTOPCsvrAPI.h es el archivo de función exportado proporcionado por la biblioteca de vínculos dinámicos del kit de desarrollo. Cada función tiene instrucciones específicas, así que verifique las instrucciones al llamarla.

2. Defina GUID en .cpp. Este GUID es una identificación única que se utiliza para identificar el servidor operativo. Puede ser generado por las herramientas del sistema operativo o puede crearlo usted mismo. El formato es el siguiente.

GUID constante

CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}};

3. Agregar una referencia a la conexión de la biblioteca de enlaces dinámicos WtOPCSvr.

Los archivos de la biblioteca WTOPCsvr se pueden encontrar en el paquete de ejemplo anterior.

WTOPCsvr.lib WTOPCsvr.dll es la lib y dll correspondiente

4. Inicialización

(1) Llame a la función UpdateRegistry() para completar el registro.

El siguiente es el código de muestra de referencia de llamada

BOOL COPCSimSvrApp::Initstance()

{

TCHAR szTokens[] = _T("-/");

p>

CString HelpPath;

CString SvrName, SvrDescrip;

int i;

HelpPath = AfxGetApp()-gt; ;

i = HelpPath.ReverseFind('\\');

HelpPath = HelpPath.Left(i 1);

HelpPath = "OPCSIMSVR.EXE ";

p>

//

// Código de autorregistro

//(Busque la opción cmdline para registrar y cancelar el registro del servidor)

//

SvrName = "WinTECH.OPCServer";

SvrDescrip = "WinTECH Software OPC Server Simulator";

CString tempCmdLine (m_lpCmdLine);

LPTSTR lpszToken = _tcstok(tempCmdLine.GetBuffer(1), szTokens);

mientras ( lpszToken != NULL)

{

if (_tcsicmp(lpszToken, _T("UnregServer"))==0)

{

UnregisterServer ((BYTE *)amp; CLSID_OPCSimSvr, SvrName);

Devuelve (FALSE );

}

else if (_tcsicmp(lpszToken, _T("RegServer"))==0)

{

UpdateRegistry ((BYTE *) & CLSID_OPCSimSvr & CLSID_OPCSimSvr,

SvrName,

SvrDescrip,

HelpPath <); /p>

Devolución (FALSO);

}

lpszToken = _tcstok(NULL, szTokens)

}

(2) Llame a InitWTOPCsvr para completar el desarrollo. Inicialización del dll del kit de herramientas.

Los dos pasos anteriores no se pueden revertir.

5. Crear proyectos

Los proyectos aquí son todos los proyectos del servidor y se pueden explorar a través de la biblioteca opc. La función que crea elementos es CreateTag().

Opc tiene dos formas de espacio de direcciones: estructura plana y estructura multicapa.

Por ejemplo, los puntos creados al llamar a CreateTag() son elemento1, elemento2 y elemento3. Esta estructura es una estructura plana. Estos puntos son similares a los archivos en un sistema de archivos.

Por ejemplo, si la llamada crea puntos como test.item1, test.item2 y test.item3, el paquete formará automáticamente una estructura de puntos de varios niveles.

La estructura plana y de múltiples capas se refleja en la vista que tiene el cliente de los nombres de los puntos.

De forma predeterminada, los nombres de puntos en estructuras multicapa están separados por "." Para simplificar, podemos diseñar opserver utilizando una estructura plana.

Al crear un punto se devuelve un identificador que identifica el punto. Nuestro programa necesita establecer una correspondencia entre este identificador y el valor en tiempo real del dispositivo almacenado en la base de datos. Para esto puede consultar el código de muestra.

6. Cree un temporizador para recopilar datos del dispositivo

Obtenga el valor del elemento correspondiente a cada identificador de la base de datos a intervalos regulares. Luego compare el valor de cada elemento con el último valor leído para ver si hay algún cambio. Si hay un cambio, llame a UpdateTagToList para ingresar a la cola correspondiente. El paquete de desarrollo enviará automáticamente el valor modificado al cliente.

El proceso general es el siguiente

(1) Recopile los valores en tiempo real de todos los puntos a la vez de la base de datos.

(2) Llame a StartUpdateTags()

(3) Bucle para leer los datos de cada elemento en la base de datos y compararlos con los últimos datos leídos. Si hay cambios, llame a UpdateTagToList()

(4) En la mayoría de los casos, llame a EndUpdateTags() para completar la actualización de todos los elementos.

7. Control del cliente

Cuando el cliente escribe el valor de la etiqueta, el servidor de operaciones responderá a través de la función de devolución de llamada.

En el lado del servidor, debe llamar a EnableWriteNotification() para especificar la función de devolución de llamada para escribir el valor. El formato de la función de devolución de llamada es:

typedef VOID (CALLBACK* WRITENOTIFYPROC)(HANDLE, VARIANT*, DWORD*);

La escritura desde la etiqueta especificada por HANDLE corresponde al específico dispositivo de control El proceso de variables se implementará en la función de devolución de llamada.

8. Otras funciones de uso común

RequestDisconnect() generalmente se llama cuando el servidor de operaciones se apaga para notificar al cliente que el servidor de operaciones se apagará solo.

NumbrClientConnections() se utiliza para calcular el número de clientes actualmente conectados a opcserver

UninitWTOPCsvr() se borra cuando el programa sale

SetVendorInfo() establece el Información del proveedor

Prueba del cliente 3.opc

A continuación se toma el opcquickclient.exe local como ejemplo para ilustrar la relación entre el servidor y las aplicaciones cliente.

1. Ejecute opcquickclient.exe

2. Haga clic en editar-gt;menú de nueva conexión al servidor. Aparece el cuadro de diálogo de propiedades del servidor. Expanda la versión 2.0 del servidor de acceso a datos opc. Seleccione el servidor op que desarrollamos y haga clic en Aceptar. Complete la conexión al servidor

3. Haga clic en editar-gt;nuevo grupo para agregar el grupo con los valores predeterminados.

4. Haga clic en editar-gt; nuevo elemento y aparecerá el siguiente cuadro de diálogo. (La siguiente imagen es un ejemplo de un espacio de direcciones de varias capas. Una sola capa sería más simple). Seleccione uno de los nodos principales a la izquierda y los marcadores secundarios aparecerán a la derecha. Seleccione la etiqueta para consultar el servidor opcs, haga clic en Agregar hoja y luego haga clic en Aceptar

5. Puede ver la etiqueta que desea consultar en la pantalla de inicio del cliente. Seguirá automáticamente los cambios en los datos en el lado del servidor operativo.

6. Haga clic derecho en la etiqueta que desea controlar y seleccione escritura sincrónica o escritura asincrónica en el menú (generalmente se recomienda la escritura asincrónica para evitar bloquear el funcionamiento normal del cliente). Escriba el valor a escribir. Verifique si la operación está en el dispositivo. Desde aquí puedes verificar que opserver se escribió correctamente.