其他分享
首页 > 其他分享> > c – COM端口上的设备模拟

c – COM端口上的设备模拟

作者:互联网

我有一个设备将数据发送到COM端口.我想在没有插入时模拟这个设备.我认为这可以通过简单地将数据发送到特定的COM端口来实现:

int main() {
    char *port = "\\\\.\\COM40";

    HANDLE hCom = CreateFile(port, GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (hCom==INVALID_HANDLE_VALUE) return 0;

    DWORD writeBytes;
    int buffer = 0xDEADBEAF;
    BOOL success = WriteFile(hCom, &buffer, 4, &writeBytes, NULL);

    FlushFileBuffers(hCom);
    Sleep(1000);

    HANDLE hCom2 = CreateFile(port, GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (hCom2==INVALID_HANDLE_VALUE) return 0; // Exit. GetLastError() == 5

    DWORD readBytes;
    success = ReadFile(hCom2, &buffer, 4, &readBytes, NULL);

    CloseHandle(hCom);
    CloseHandle(hCom2);
    return 0;
}

不幸的是,这不起作用,第二个CreateFile()将最后一个错误设置为ERROR_ACCESS_DENIED.
我错过了什么?

解决方法:

对于模拟,请安装虚拟COM端口驱动程序,例如com0com.然后,您可以定义在驱动程序中链接在一起的2个COM端口.无需硬件.写入一个端口的任何内容都可以在另一个端口上读取.然后,您可以通过单独调用CreateFile()打开每个端口的句柄.

我自己使用这种技术,效果很好.当我需要编写与设备通信的应用程序时,我通常会编写一个单独的模拟
 为主应用程序生成数据以供阅读的应用程序,并使用主应用程序发送的数据.主应用程序不知道它没有与真实设备通信,因此您不必更改主应用程序中的任何代码以支持模拟
.

标签:createfile,c,winapi
来源: https://codeday.me/bug/20190902/1790208.html