
As portas seriais virtuais são essenciais quando os programas de software herdados precisam se conectar aos dispositivos da porta COM que não podem ser conectados ao computador com o software devido à falta de portas seriais físicas. O dispositivo também pode enviar dados seriais para o aplicativo pela Internet ou LAN através de conexão TCP/IP, independentemente de quão distantes estejam um do outro.
Neste artigo, você encontrará um breve tutorial sobre emulador de porta serial virtual que mostrará como criar interfaces seriais virtuais no seu computador com a ajuda de um software de driver de porta virtual simples, mas eficiente. E espero que as informações fornecidas neste artigo o coloquem à frente das formas mais tradicionais de teste e depuração de aplicativos seriais.

Conteúdo:
- Usando o VSPD com linguagens de programação
- VSPD com C/C++
- VSPD com Visual Basic
- VSPD com Delphi
- As vantagens do Virtual Serial Port por Eltima
- Perguntas frequentes sobre comunicação serial
Usando o VSPD com linguagens de programação
Atualmente, o método de teste e diagnóstico de software usando dispositivos virtuais tornou-se amplamente aceito pelos desenvolvedores do software para sistemas de comunicação. Um dispositivo virtual simula o comportamento de um dispositivo real no nível do software, permitindo ao programador testar e depurar um aplicativo na fase de desenvolvimento.
O método de emulação de porta serial é amplamente aplicado no desenvolvimento dos sistemas de comunicação mais complexos, incluindo dispositivos com interfaces RS232 e RS485. Atualmente, há uma ampla variedade de ferramentas de software que permitem a criação de várias portas seriais virtuais em sistemas operacionais (predominantemente Windows OS).
O sistema operacional Windows é o principal alvo de aplicativos devido à sua enorme popularidade. A programação do Windows RS232 lida com as portas COM do sistema operacional, através das quais todos os dados entram e saem do computador. Muitas linguagens podem ser usadas, mas C é uma das principais linguagens usadas para esse tipo de programação. Você será solicitado a usar a API do WIN32 e, dependendo do seu aplicativo, talvez seja necessário se aprofundar na interface de telefonia TAPI do Windows.
O Linux é outro sistema operacional muito popular, com muitas variações em implementações específicas. Suas portas seriais são nomeadas diferentemente no Linux, com nomes como / dev / ttys0 e / dev / ttyUSB0; portanto, imediatamente existem diferenças na maneira como você aborda a programação serial do Linux. C novamente é uma opção popular de linguagem para programação serial e você estará interagindo com dispositivos que o Linux trata como arquivos. Você usará uma API como termios para se comunicar entre seu aplicativo e as portas seriais.
A natureza especializada da programação de portas seriais pode estar fora do escopo da experiência da sua equipe, e os problemas na comunicação entre o aplicativo e os dispositivos de destino pretendidos podem levar a um atraso incapacitante no seu projeto de desenvolvimento. Problemas como texto inesperadamente corrompido ou problemas de conectividade podem ser difíceis de diagnosticar para programadores sem ampla experiência em porta serial.
Com a ajuda de portas COM virtuais adicionais, os desenvolvedores podem testar a troca de dados entre as interfaces RS232 e RS485. Quando se trata de funcionalidade avançada e facilidade de uso, o Virtual Serial Port Emulator desenvolvido pela Eltima Software parece ser o programa mais poderoso disponível atualmente. A solução é totalmente compatível com várias versões do sistema operacional Windows. Acima disso, o emulador de porta serial para Windows 10 é assinado digitalmente com WHQL, o que garante seu desempenho e estabilidade.

VSPD com C/C++
Para usar a funcionalidade do emulador de porta virtual em C e C++, é necessário carregar dinamicamente o arquivo DLL, selecionar as funções necessárias e chamá-las. Aqui está um exemplo de como você pode fazer isso no Visual C++:
Você também pode ver um ótimo exemplo de como programar uma porta COM virtual usando o Visual Basic e o Visual C ++ para comunicação entre o AVR e o PC usando o driver de porta serial virtual.
typedef bool (stdcall *CreatePairFn)(char *Port1, char *Port2);
typedef bool (stdcall *DeletePairFn)(char *Port);
typedef bool (stdcall *DeleteAllFn)(void);
typedef bool (stdcall *SetStrictBaudrateFn) (char *Port, bool StrictBaudrate);
typedef bool (stdcall *SetBreakFn) (char *Port, bool bBreak);
typedef bool (stdcall *QueryBusFn) (void* InBuffer, long sizeInBuffer, void* OutBuffer, long sizeOutBuffer);
typedef bool (stdcall *SetWiringFn) (char *Port, void *Buffer, long sizeBuffer);
typedef bool (stdcall *SetAccessListFn) (char *Port, void *Buffer, long sizeBuffer);
typedef bool (stdcall *CreatePairExFn)(char *Port1, char *Port2, char * UserSession);
typedef bool (stdcall *CreatePairWFn)(WCHAR *Port1, WCHAR *Port2);
typedef bool (stdcall *CreatePairExWFn)(WCHAR *Port1, WCHAR *Port2, WCHAR * UserSession);
typedef bool (stdcall *DeletePairWFn)(WCHAR *Port);
typedef bool (stdcall *SetStrictBaudrateWFn) (WCHAR *Port, bool StrictBaudrate);
typedef bool (stdcall *SetBreakWFn) (WCHAR *Port, bool bBreak);
typedef bool (stdcall *SetWiringWFn) (WCHAR *Port, void *Buffer, long sizeBuffer);
typedef bool (stdcall *SetAccessListWFn) (WCHAR *Port, void *Buffer, long sizeBuffer);
typedef bool (stdcall *DeletePairExFn)(char *Port, char * UserSession);
typedef bool (stdcall *DeletePairExWFn)(WCHAR *Port, WCHAR * UserSession);
typedef bool (stdcall *GetUserSessionFn)(char *Session, int &iSize);
typedef bool (stdcall *GetUserSessionWFn)(WCHAR *Session, int &iSize);
typedef bool (stdcall *SetStrictBaudrateExWFn) (WCHAR *Port, WCHAR * UserSession, bool StrictBaudrate);
typedef bool (stdcall *SetStrictBaudrateExFn) (char *Port, char * UserSession, bool StrictBaudrate);
typedef bool (stdcall *SetBreakExWFn) (WCHAR *Port, WCHAR * UserSession, bool bBreak);
typedef bool (stdcall *SetBreakExFn) (char *Port, char * UserSession, bool bBreak); typedef bool (stdcall *SetAccessListExWFn) (WCHAR *Port, WCHAR * WCHAR, void *Buffer, long sizeBuffer);
typedef bool (stdcall *SetAccessListExFn) (char *Port, char * WCHAR, void *Buffer, long sizeBuffer);
Exemplo de código:
bool CreateVSPair(char *Port1, char *Port2) {
OSVERSIONINFO VersionInfo;
HINSTANCE libInst;
libInst = LoadLibrary(VSPDCTL.DLL);
if (!libInst)
return false; /* Couldn't load library */
/* Substitute the typedefs above for functions other than CreatePairFn */
CreatePairFn CreatePair=(CreatePairFn)GetProcAddress(libInst, CreatePair);
if (CreatePair==0) return false; /* Couldn`t find function */
returnvalue=CreatePair(Port1, Port2); /* For example, Port1 = COM5 and Port2 = COM6 */
FreeLibrary(libInst);
return returnvalue;
};
VSPD com Visual Basic
A instalação das funções do VSPD é muito mais fácil para os usuários do Visual Basic. Tudo o que você precisa fazer é colar as seguintes linhas no arquivo de origem do Visual Basic:
Declare Function CreatePair Lib "VSPDCTL.DLL" (ByVal Port1$, ByVal Port2$) As Boolean
Declare Function DeletePair Lib "VSPDCTL.DLL" (ByVal Port$) As Boolean
Declare Function DeleteAll Lib "VSPDCTL.DLL" () As Boolean
Declare Function SetStrictBaudrateName Lib "VSPDCTL.DLL" (ByVal Port$, ByVal StrictBaudrate As Boolean) As Boolean
Declare Function SetStrictBaudrateHandle Lib "VSPDCTL.DLL" (ByVal Handle As Long, ByVal StrictBaudrate As Boolean) As Boolean
Declare Function CreatePair Lib "VSPDCTL.DLL" (ByVal Port1$, ByVal Port2$) As Boolean
Declare Function DeletePair Lib "VSPDCTL.DLL" (ByVal Port$) As Boolean
Declare Function DeleteAll Lib "VSPDCTL.DLL" () As Boolean
Declare Function SetStrictBaudrate Lib "VSPDCTL.DLL" (ByVal Port$, ByVal StrictBaudrate As Boolean) As Boolean
Declare Function SetBreak Lib "VSPDCTL.DLL" (ByVal Port$, ByVal bBreak As Boolean) As Boolean
Declare Function QueryBus Lib "VSPDCTL.DLL" (ByVal InBuffer As String, sizeInBuffer As Long, ByVal OutBuffer As String, sizeOutBuffer As Long) As Boolean
Declare Function SetWiring Lib "VSPDCTL.DLL" (ByVal Port1$, ByVal Buffer As String, sizeBuffer As Long) As Boolean
Coloque VSPDCTL.DLL no diretório do seu programa. Agora a função pode ser chamada diretamente.
VSPD com Delphi
Aqui estão as declarações de função para Delphi:
Function CreatePair(Port1, Port2 : PChar) : Boolean; stdcall; external "VSPDCTL.DLL";
Function DeletePair(Port : PChar) : Boolean; stdcall; external "VSPDCTL.DLL";
Function DeleteAll : Boolean; stdcall; external "VSPDCTL.DLL";
Function SetStrictBaudrateName(Port: PChar, StrictBaudrate: Boolean) : Boolean; stdcall; external "VSPDCTL.DLL";
Function SetStrictBaudrateHandle(hPort: THandle, StrictBaudrate: Boolean) : Boolean; stdcall; external "VSPDCTL.DLL";
Function CreatePair(Port1, Port2 : PChar) : Boolean; stdcall; external "VSPDCTL.DLL";
Function DeletePair(Port : PChar) : Boolean; stdcall; external "VSPDCTL.DLL";
Function DeleteAll : Boolean; stdcall; external "VSPDCTL.DLL";
Function SetStrictBaudrate(Port: PChar, StrictBaudrate: Boolean) : Boolean; stdcall; external "VSPDCTL.DLL";
Function SetBreak (Port: PChar, bBreak: Boolean) : Boolean; stdcall; external "VSPDCTL.DLL";
Function QueryBus (InBuffer: Pointer, sizeInBuffer: Integer, OutBuffer: Pointer, sizeOutBuffer: Integer) : Boolean;
stdcall; external "VSPDCTL.DLL";
Function SetWiring (Port: PChar Buffer: Pointer, sizeBuffer: Integer) : Boolean; stdcall; external "VSPDCTL.DLL";
O Delphi pode carregar o ArmAccess dinamicamente ou estaticamente. Aqui está um código de amostra para carregamento dinâmico:
Function CreatePairFn(PortName1, PortName2 : String) : Boolean;
Type TCreatePair = function(Port1, Port2 : PChar) : Boolean; stdcall;
Var Handle : THandle;
CreatePair : TCreatePair;
Begin
CreatePairFn := False;
Handle := LoadLibrary("VSPDCTL.DLL");
If (Handle <> 0) Then
Begin
@CreatePair:=GetProcAddress(Handle, "CreatePair");
If (CreatePair <> Nil) Then
CreatePairFn := CreatePair(PChar(PortName1), PChar(PortName2));
FreeLibrary(Handle);
End;
End;

As vantagens do Virtual Serial Port by Eltima
Virtual Serial Port Driver demonstra a profundidade do conhecimento e a capacidade técnica dos programadores da Eltima. Veja alguns dos recursos e funções que a equipe trouxe para esses aplicativos e pense no que eles podem fazer pelo seu projeto.
Este aplicativo de software permite criar pares virtuais de portas seriais e transferir dados através de modems nulos virtuais. As portas virtuais aparecem no seu sistema como se fossem portas físicas, e o programa permite uma configuração fácil das suas portas virtuais.
Os principais benefícios são:
- Com um driver de porta serial virtual, você deve adicionar um número ilimitado de pares de portas COM virtuais vinculadas por um cabo de modem nulo virtual. Além disso, o software permite remover todos os pares criados em um clique.
- Uma vez criadas e configuradas, as portas seriais virtuais serão recriadas automaticamente na reinicialização do sistema antes do login do usuário. Além disso, você não precisará fechar as portas se precisar alterar as configurações de par virtual ou excluir completamente um par..
- O aplicativo possibilita não apenas criar portas COM virtuais, mas fornecer os nomes desejados, incluindo aqueles já usados pelas portas físicas existentes. Os usuários poderão encontrar facilmente uma interface virtual necessária no grupo "Portas" do Gerenciador de dispositivos.
- Os drivers de software foram aprovados nos testes do Microsoft Windows Hardware Quality Labs (WHQL) e são assinados digitalmente pela Microsoft. Isso significa que você não receberá nenhum aviso ao criar portas COM virtuais no Windows 10, Windows Server 16, Windows XP, etc.
- O driver da porta serial virtual suporta totalmente linhas de sinal de hardware padrão, incluindo DTR/DSR/CTS/RTS/DCD/RI, etc. e controle de fluxo de software (Xon/Xoff).
- A emulação de modem nulo é outra vantagem que você obtém com este utilitário. O driver da porta serial virtual permite emular uma conexão de linha serial virtual e sua interrupção. Além disso, o software oferece vários esquemas virtuais de modem nulo, que podem ser salvos como modelo.
- Além disso, o Driver da porta serial virtual vem com o vspdctl.dll, que permite controlar sua funcionalidade diretamente do seu próprio aplicativo. Ao usar esta biblioteca de links dinâmicos, você poderá criar e excluir pares de portas COM virtuais rapidamente, sem precisar confiar no utilitário de configuração padrão e em sua GUI.
