标题:关于Qt串口通信发送指令问题
作者:半根鸡爪
日期:2015-04-15 10:23
内容:
想做一个上位机,实现功能为:不断给MODBUS的电压(流)表发查询指令,实时监控表值。
目前已经实现基本通讯,能查询表值了。
问题:使用QTimer每隔1S询问一次表值,就会出现错误。如图:
网上没有找到相关错误,错误的意思是不是QByteArray溢出了呢?
部分代码如下:
//串口配置
void Charge::SerialPortInit()
{
MySerialPort = new QSerialPort;
//串口配置
QString PortNameStr;
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug() setBaudRate(9600);
MySerialPort->setDataBits(QSerialPort::Data8);
MySerialPort->setParity(QSerialPort::NoParity);
MySerialPort->setStopBits(QSerialPort::OneStop);
//每隔1s发送一次查询指令
timer1 = new QTimer(this);
connect(timer1,SIGNAL(timeout()), this,SLOT(Send()));
timer1->start(1000);
Send();
}
//发送函数
void Charge::Send()
{
//指令配置
QString SendStr;
SendStr.append(QChar(0x01));
SendStr.append(QChar(0x04));
SendStr.append(QChar(0x00));
SendStr.append(QChar(0x00));
SendStr.append(QChar(0x00));
SendStr.append(QChar(0x01));
SendStr.append(QChar(0x31));
SendStr.append ..
#1 [半根鸡爪 04-16 10:06]
自己顶一下,为什么没人回复呢。
本人新手,没怎么发过帖子,是我发的帖子有啥问题还是发错地方吗
#2 [hisixunil 04-17 14:54]
我是来领奖金的
#3 [kyle_2535 01-10 19:50]
不懂,支持。
#4 [cluckly 01-10 21:02]
问题应该在这几行:
ReceData = MySerialPort->readAll();
VmDataH = ReceData.at(3);
VmDataL = ReceData.at(4);
读回数据后没有检查数据长度, 很有可能读回的数据长度只有3个字符, 那么读位置3和4就超出了bytearray的范围, 导致了assert触发.
#5 [judesmorning 01-13 14:55]
看到: connect(timer1,SIGNAL(timeout()), this,SLOT(Send()));
就看不下去了,每一秒做一次Send函数,然后你在这里connect信号与槽,是什么意思?
你不知道信号与槽会重复绑定的吗