想做一个上位机,实现功能为:不断给MODBUS的电压(流)表发查询指令,实时监控表值。
目前已经实现基本通讯,能查询表值了。
问题:使用
QTimer每隔1S询问一次表值,就会出现
错误。如图:
网上
没有找到相关错误,错误的意思是不是QByteArray溢出了呢?
部分代码如下:
//串口配置
void Charge::SerialPortInit()
{
MySerialPort = new QSerialPort;
//串口配置
QString PortNameStr;
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug() << "Name:" <<info.portName();
PortNameStr = info.portName();
}
MySerialPort->setPortName(PortNameStr);
MySerialPort->open(QIODevice::ReadWrite);
MySerialPort->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(QChar(0xCA));
MySerialPort->write(SendStr.toLatin1());
connect(MySerialPort,SIGNAL(readyRead()), this,SLOT(Rece()));
}
//接收函数
void Charge::Rece()
{
unsigned char VmDataH;
unsigned char VmDataL;
float VmData;
ReceData = MySerialPort->readAll();
VmDataH = ReceData.at(3);
VmDataL = ReceData.at(4);
VmData = float(VmDataH*256+VmDataL)/10;
QString VmDataStr =
QString("%1").arg(VmData);
if(!ReceData.isEmpty())
{
ui->VmLEdit_1->setText(VmDataStr);
}
ReceData.clear();
}
本人初学,谢谢各位大大指点,分也没有多少,真是不好意思。谢过各位大神!!!