https://www.google.com/search?client=fi ... gQ76ug3jdM
Por ahora solo pude programar los procedimientos básicos (conectarse, testear la conexión y cerrar la conexión) en C# (sharp) pero la idea es pasarlo a Xailer.
Por lo que pude ver hay que programarlo con Wrappers? pero no tengo idea si lo estoy haciendo bien.
Con respecto a la estructura de datos para conectarse y abrir el puerto (función vpiOpenPort devuelve un entero, 0 o 11)
Código: Seleccionar todo
typedef struct COM_PARAMS{
LPSTR com; // Nombre del puerto. Ej.: "COM1", etc.
WORD baudRate; // Velocidad de transmisión: Ej.: 19200
WORD byteSize; // Largo del byte. Ej.: 7, 8
BYTE parity; // Paridad. Ej: 'N' ninguna, 'E' par, 'O' impar
WORD stopBits; // Bits de parada. Ej.: 1, 2
}comParams_t;
params: Parámetros de configuración del puerto serial
Retorna un entero. Si es 0 entonces se abrió el puerto, si es 11 no pudo abrirlo.
Este es un ejemplo sencillo en C sharp que pude programar, abre el puerto con la función vpiOpenPort
Código: Seleccionar todo
public struct comParams_t
{
[MarshalAs(UnmanagedType.LPStr)]
public string com;
public ushort baudRate;
public ushort byteSize;
public char parity;
public ushort stopBits;
}
[DllImport("VpiPc.dll", CallingConvention = CallingConvention.StdCall)] // Cargo la DLL
public static extern ushort vpiOpenPort(ref comParams_t portParams); // Declaro una función externa
// Declaro la variable paramsStruct de tipo comParams_t , y le paso los valores de conexión al puerto
comParams_t paramsStruct;
paramsStruct.com = "COM7";
paramsStruct.baudRate = 19200;
paramsStruct.byteSize = 8;
paramsStruct.parity = 'N';
paramsStruct.stopBits = 1;
ushort result = vpiOpenPort(ref paramsStruct); // Llamo a la funcion y devuelve un entero, que puede ser 0 si esta todo OK, o 11 si fallo la conexion
Console.WriteLine("Resultado de la configuración: " + result);
El siguiente código no se si va en un Archivo h o Archivo ch?
Código: Seleccionar todo
#define VPI_OK 0 // Operacion exitosa
#define VPI_FAIL 11 // El comando no pudo ser enviado
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
// No se si esta bien esto, en la parte de arriba la función recibe un parámetro de referencia con los 5 valores de conexión, aquí no tengo idea como se hace esa parte.
typedef __stdcall int (*AbrirPuerto)(LPTSTR cCOM, int nBaudRate, int nByteSize, LPTSTR cParity, int nStopBits);
static HINSTANCE hLib = NULL;
HB_FUNC( TEST )
{
int result ;
static AbrirPuerto pFunction = NULL;
result = -2000 ;
if( !hLib )
hLib = LoadLibrary( "VpiPc.dll" );
if( hLib )
{
if( !pFunction )
pFunction = (AbrirPuerto) GetProcAddress( hLib, "vpiOpenPort" );
}
if( pFunction )
result = (pFunction)( (LPSTR) hb_parni( 1 ), (WORD) hb_parni( 2 ), (WORD) hb_parni( 3 ), (LPSTR) hb_parni( 4 ), (WORD) hb_parni( 5 ) );
else
result = -2000;
hb_retni(result);
}
#pragma ENDDUMP
Código: Seleccionar todo
METHOD pruebaClick( oSender ) CLASS TMenuPrincipal
local nHandle
nHandle:=Test("COM4",19200, 8, 'N', 1)
RETURN Nil
Desde ya, gracias. Saludos