用C++写一段代码读取串口数据,并在每行数据前添加一个时间戳
时间: 2024-09-20 16:01:27 浏览: 73
在C++中,要读取串口数据并添加时间戳,首先你需要安装一个用于串口通信的库,如`SerialPort`。这里我将提供一个基于`windows.h`和`conio.h`的基本示例,假设你已经成功连接到串口设备。请注意,实际应用中可能需要使用更专业的串口库,如`boost::asio`或`Poco::SerialPort`。
```cpp
#include <iostream>
#include <Windows.h> // 包含serialport相关函数
#include <chrono>
#include <ctime>
// 假设你有一个名为com_port的串口名
const char* com_port = "COM1";
void add_timestamp(const std::string& line) {
time_t now = time(0); // 获取当前时间
struct tm* timestamp = localtime(&now);
char buffer[64]; // 时间戳缓冲区
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timestamp);
std::string timestamp_str(buffer); // 转换为字符串
std::cout << "[" << timestamp_str << "] " << line << '\n'; // 输出时间戳后的数据
}
int main() {
HANDLE hCom = CreateFile(com_port,
GENERIC_READ | GENERIC_WRITE, // 读写权限
0, nullptr, OPEN_EXISTING, // 文件属性
NULL);
if (hCom == INVALID_HANDLE_VALUE) {
std::cerr << "Failed to open serial port!" << std::endl;
return -1;
}
DWORD baudRate = 9600; // 设置波特率,根据实际情况调整
DCB dcbSerialParams = { 0 };
GetCommState(hCom, &dcbSerialParams);
dcbSerialParams.BaudRate = baudRate;
SetCommState(hCom, &dcbSerialParams);
OVERLAPPED overlapped = {};
char data[256];
DWORD bytesRead;
while (true) {
ReadFile(hCom, data, sizeof(data), &bytesRead, &overlapped);
if (bytesRead > 0) {
std::string line(data, bytesRead);
add_timestamp(line); // 添加时间戳
}
else if (GetLastError() != ERROR_IO_PENDING) {
break; // 如果没有数据或发生错误,跳出循环
}
}
CloseHandle(hCom);
return 0;
}
```
阅读全文