使用WriteFile在C ++中通过串口进行不可打印的控制字符

时间:2018-03-29 18:38:53

标签: c++ serial-port control-characters

我正在尝试使用#20函数将控制字符( CTRL-T ,即ASCII表中的WriteFile())写入串口,但显然它不起作用。

当我使用putty并按 CTRL + T 时,我会通过串口接收响应,以便与我使用的ATI力传感器进行通信。以下是快照:

Putty Terminal

但是,当我在C ++中使用WriteFile()函数时,我没有得到传感器的响应,这表明 CTRL-T 命令没有写入串口。以下是代码段:

// set write character to CTRL-T (#20 = 0x14) 
char t = 0x14;
// write the character to the serial port
m_serialPort.Write(&t,1);
// read 14 bytes with 1000 ms timeout from the serial port
m_serialPort.Read_N(str_read,14,1000);

我测试过函数WriteRead_N,当我处理可打印字符时它们工作正常。

有没有人知道如何解决这个问题?

编辑:这是一个示例代码:

// SerialTest.cpp : main project file.

#include "stdafx.h"
#include"SerialCommHelper.h"
#include <windows.h>  
#include <iostream>
using namespace System;

CSerialCommHelper m_serialPort;

int main()
{
    std::string comPort = "COM1";
    std::string str_read;
    // Open the serial Port
    m_serialPort.Init(comPort,9600,0,1,8);
    m_serialPort.Start();
    m_serialPort.Purge();

    // set write character to CTRL-T (#20 = 0x14) 
    char t = 0x14;
    // write the character to the serial port
    m_serialPort.Write(&t,1);
    // read 14 bytes with 1000 ms timeout from the serial port
    m_serialPort.Read_N(str_read,14,1000);
    std::cout << str_read;
    system("pause");
    m_serialPort.Stop();
    m_serialPort.UnInit();
    return 0;
}

0 个答案:

没有答案