打印到文件的值不正确.串口通信程序
Incorrect values are being printed to file. Serial Port communication program
这段代码应该向COM3发送命令,向文件发送响应-然后从COM5读取一定数量的字符并将其写入文件。奇怪的值正在打印。
我想我看代码的时间太长了。任何帮助都会很棒。
#include <Windows.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream myfile;
myfile.open ("example.txt", 'w');
HANDLE hSerial = CreateFile("COM3",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
HANDLE hSerial2 = CreateFile("COM5",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hSerial==INVALID_HANDLE_VALUE)
std::cout << "Insert error message";
DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams))
std::cout << "Insert error message";
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if (!SetCommState(hSerial,&dcbSerialParams))
std::cout << "Insert error message";
COMMTIMEOUTS timeouts={0};
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
if(!SetCommTimeouts(hSerial, &timeouts))
std::cout << "Insert error message";
int i = 0;
while(i < 10)
{
char szBuff[50+1] = {0};
char lzBuff[400] = {0};
char wzBuff[14] = {"AT+CSQr"};
DWORD dZBytesRead = 0;
DWORD dwBytesRead = 0;
if(!WriteFile(hSerial, wzBuff, 7, &dZBytesRead, NULL))
std::cout << "Write error";
if(!ReadFile(hSerial, szBuff, 50, &dwBytesRead, NULL))
std::cout << "Read Error";
if(!ReadFile(hSerial2, lzBuff, 400, &dZBytesRead, NULL))
std::cout << "Read Error";
std::string test2 = std::string(lzBuff).substr(300,10);
//std:: cout << szBuff;
if(dwBytesRead > 9)
{
std::string test = std::string(szBuff).substr(8,3);
myfile << test <<endl << endl << endl;
std::cout << test << endl;
}
if(dZBytesRead > 200)
{
std::string test2 = std::string(lzBuff).substr(1,10);
myfile << test2 << 'n' << 'n';
}
Sleep(500);
i++;
}
myfile.close();
return 0;
}
当我有COM端口吐出奇怪的字符时,通常是因为波特率不匹配。
您应该在hSerial2
上调用SetCommState
以确保它具有与hSerial
相同的波特率。
相关文章:
- C++ Boost::asio串行通信与Arduino无法写入
- 删除功能不适用于串行通信后多个循环中的多个实例
- 为什么我要从串口读取垃圾?
- 对传统串行端口通信进行逆向工程
- 串口读取功能的通信超时和线程不超时
- 串行通信 c++ 串行端口类
- 串口通信
- 基本串行端口通信Visual Studio C++(在浏览现有示例中时遇到问题)
- 串行端口通信
- 串行端口通信 - PuTTY 仿真
- 用于串行通信的 USB 端口名称
- Qt串行端口通信
- Com端口:Windows 8下的串口通信
- 重写串口通信从c++到c#
- 打印到文件的值不正确.串口通信程序
- 有没有人能给我推荐一个c++库,可以在x86和x86_64版本的操作系统上进行串口通信
- 增强串行通信,COM端口被拒绝并出现错误"open: access is denied"
- 串口通信c++ Linux
- 奇怪的行为 QT QSerialPort 在 Windows 7 上不会更改串行通信端口的设置
- 串口通信教程