#include "localcommunicationhandler.h"
#include "addcrc.h"
#include "databasemanager.h"
#include <QTimer>
#include <QtSerialPort/QSerialPort>
#include <QDebug>
LocalCommunicationHandler::LocalCommunicationHandler(QObject *parent) :
QObject(parent)
{
manager = new DatabaseManager(this);
serial = new QSerialPort(this);
serial->setPortName("COM1");
serial->setBaudRate(QSerialPort::Baud115200);
serial->setDataBits(QSerialPort::Data8);
serial->setFlowControl(QSerialPort::NoFlowControl);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
timer = new QTimer(this);
timer->setInterval(60000);
connect(timer, SIGNAL(timeout()), this, SLOT(slotTimeoutHandler()));
}
void LocalCommunicationHandler::init()
{
if (!serial->open(QIODevice::ReadWrite)) {
qDebug() << QString("Can't open %1, error code %2")
.arg(serial->portName()).arg(serial->error());
return;
}
timer->start();
}
void LocalCommunicationHandler::setPortName(QString str)
{
serial->close();
serial->setPortName(str);
if (!serial->open(QIODevice::ReadWrite)) {
qDebug() << QString("Can't open %1, error code %2")
.arg(serial->portName()).arg(serial->error());
return;
}
}
void LocalCommunicationHandler::setInterval(QString str)
{
//30s,60s,90s
str = str.remove("s");
timer->setInterval(str.toInt() * 1000);
qDebug() << str.toInt();
timer->start();
}
void LocalCommunicationHandler::setBaudRate(QString str)
{
serial->close();
//4800,9600,19200,38400,57600,115200
if ( str == "4800" )
serial->setBaudRate(QSerialPort::Baud4800);
else if ( str == "9600" )
serial->setBaudRate(QSerialPort::Baud9600);
else if ( str == "19200" )
serial->setBaudRate(QSerialPort::Baud19200);
else if ( str == "38400" )
serial->setBaudRate(QSerialPort::Baud38400);
else if ( str == "57600" )
serial->setBaudRate(QSerialPort::Baud57600);
else if ( str == "115200" )
serial->setBaudRate(QSerialPort::Baud115200);
if (!serial->open(QIODevice::ReadWrite)) {
qDebug() << QString("Can't open %1, error code %2")
.arg(serial->portName()).arg(serial->error());
return;
}
}
void LocalCommunicationHandler::setDataBits(QString str)
{
serial->close();
// 5,6,7,8
if ( str == "5" )
serial->setDataBits(QSerialPort::Data5);
else if ( str == "6" )
serial->setDataBits(QSerialPort::Data6);
else if ( str == "7" )
serial->setDataBits(QSerialPort::Data7);
else if ( str == "8" )
serial->setDataBits(QSerialPort::Data8);
if (!serial->open(QIODevice::ReadWrite)) {
qDebug() << QString("Can't open %1, error code %2")
.arg(serial->portName()).arg(serial->error());
return;
}
}
void LocalCommunicationHandler::setParity(QString str)
{
serial->close();
// 无校验,偶校验,奇校验
if ( str == "无校验" )
serial->setParity(QSerialPort::NoParity);
else if ( str == "偶校验" )
serial->setParity(QSerialPort::EvenParity);
else if ( str == "奇校验" )
serial->setParity(QSerialPort::OddParity);
if (!serial->open(QIODevice::ReadWrite)) {
qDebug() << QString("Can't open %1, error code %2")
.arg(serial->portName()).arg(serial->error());
return;
}
}
void LocalCommunicationHandler::setFlowControl(QString str)
{
serial->close();
//无流控,硬流控,软流控
if ( str == "无流控" )
serial->setFlowControl(QSerialPort::NoFlowControl);
else if ( str == "硬流控" )
serial->setFlowControl(QSerialPort::HardwareControl);
else if ( str == "软流控" )
serial->setFlowControl(QSerialPort::SoftwareControl);
if (!serial->open(QIODevice::ReadWrite)) {
qDebug() << QString("Can't open %1, error code %2")
.arg(serial->portName()).arg(serial->error());
return;
}
}
void LocalCommunicationHandler::setStopBits(QString str)
{
serial->close();
//1,1.5,2
if ( str == "1" )
serial->setStopBits(QSerialPort::OneStop);
else if ( str == "1.5" )
serial->setStopBits(QSerialPort::OneAndHalfStop);
else if ( str == "2" )
serial->setStopBits(QSerialPort::TwoStop);
if (!serial->open(QIODevice::ReadWrite)) {
qDebug() << QString("Can't open %1, error code %2")
.arg(serial->portName()).arg(serial->error());
return;
}
}
void LocalCommunicationHandler::newDataArrived(QByteArray& datagram)
{
qDebug() << "收到的数据帧是: " << datagram.toHex();
// 将接收数据写入属性值
QString str = datagram.toHex().toUpper();
for ( int i = 2; i < str.length(); i += 3 )
{
str = str.insert(i, " ");
}
setNewReceiveData(str);
QByteArray fixedHead;
fixedHead.append(0xEB);
fixedHead.append(0x19);
if( !datagram.startsWith(fixedHead) )
{
qDebug() << "帧头不合法!";
return;
}
unsigned int crc8 = datagram.at(datagram.length() - 3);
crc8 &= 0x000000FF;
datagram[datagram.length() - 3] = 0x00;
if ( crc8 != CRC8_Tab((unsigned char*)datagram.data(), datagram.at(5) + 9))
{
qDebug() << "CRC校验不匹配! 应该是 " << CRC8_Tab((unsigned char*)datagram.data(), datagram.at(5) + 9)
<< "提取到的CRC8为 " << crc8;
return;
}
if( datagram.at(4) == 0X51 )
{
qDebug() << "闸门数据返回 " << datagram.toHex();
if ( datagram.length() != 15 )
return;
// 0xeb 0x19 目标站编号 源站编号 0x51 0x06 闸门上限 闸门下限 闸门开度 校验码 0x03 0x0d
QStringList list;
list.append(QString::number((unsigned char)datagram.at(6) + (unsigned char)datagram.at(7)*0.01));
list.append(QString::number((unsigned char)datagram.at(8) + (unsigned char)datagram.at(9)*0.01));
list.append(QString::number((unsigned char)datagram.at(10) + (unsigned char)datagram.at(11)*0.01));
manager->updateSluiceData((unsigned char)datagram.at(2), list);
newestUpperlimit = list.at(0);
newestLowerlimit = list.at(1);
}
if( datagram.at(4) == 0X52 )
{
qDebug() << "闸门传感器状态返回 " << datagram.toHex();
if ( datagram.length() != 12 )
return;
// 0xeb 0x19 目标站编号 源站编号 0x52 0x03 上限传感器状态 下限传感器状态 开度传感器状态 校验码 0x03 0x0d
QList<int> list;
list.append((unsigned char)datagram.at(6));
list.append((unsigned char)datagram.at(7));
list.append((unsigned char)datagram.at(8));
manager->updateSluiceSensor((unsigned char)datagram.at(2), list);
}
if( datagram.at(4) == 0X53 )
{
qDebug() << "环境数据返回 " << datagram.toHex();
if ( datagram.length() != 19 )
return;
// 0xeb 0x19 目标站编号 源站编号 0x53 0x0a 上游水位 下游水位 流量 雨量 风向 校验码 0x03 0x0d
QStringList list;
list.append(QString::number((unsigned char)datagram.at(6) + (unsigned char)datagram.at(7)*0.01));
list.append(QString::number((unsigned char)datagram.at(8) + (unsigned char)datagram.at(9)*0.01));
list.append(QString::number((unsigned char)datagram.at(10) + (unsigned char)datagram.at(11)*0.01));
list.append(QString::number((unsigned char)datagram.at(12) + (unsigned char)datagram.at(13)*0.01));
list.append(QString::number((unsigned char)datagram.at(14) + (unsigned char)datagram.
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于QML的水闸测控系统开源代码及运行Demo (473个子文件)
localcommunicationhandler.cpp 14KB
communicationmanager.cpp 9KB
databasemanager.cpp 6KB
userinterface.cpp 4KB
main.cpp 819B
arc.cpp 709B
remotecommunicationhandler.cpp 587B
sluice.db 21KB
icudt52.dll 22.45MB
qtquickcontrolsplugind.dll 11.42MB
dialogplugind.dll 8.49MB
declarative_multimediad.dll 5.99MB
Qt5Widgets.dll 5.61MB
widgetsplugind.dll 5.55MB
qml_winextrasd.dll 4.9MB
Qt5Core.dll 4.56MB
declarative_positioningd.dll 4.46MB
Qt5Gui.dll 4.38MB
Qt5Qml.dll 3.74MB
qquicklayoutsplugind.dll 3.27MB
Qt5Quick.dll 3.24MB
icuin52.dll 3.19MB
icuuc52.dll 1.9MB
qmlxmllistmodelplugind.dll 1.73MB
dialogsprivateplugind.dll 1.54MB
Qt5Network.dll 1.35MB
qwindows.dll 1.22MB
libstdc++-6.dll 948KB
qtquickcontrolsplugin.dll 816KB
qtquickcontrolsplugin.dll 812KB
qmllocalstorageplugind.dll 789KB
Qt5Multimedia.dll 751KB
qsqlite.dll 732KB
Qt5QuickParticles.dll 552KB
qoffscreen.dll 543KB
qjp2.dll 498KB
qtiff.dll 414KB
qmng.dll 355KB
qwebp.dll 334KB
Qt5OpenGL.dll 316KB
Qt5Svg.dll 293KB
qjpeg.dll 237KB
Qt5Sql.dll 232KB
particlesplugind.dll 219KB
windowplugind.dll 218KB
qtquick2plugind.dll 218KB
modelsplugind.dll 218KB
declarative_multimedia.dll 209KB
declarative_multimedia.dll 209KB
Qt5WinExtras.dll 208KB
dsengine.dll 207KB
Qt5Test.dll 197KB
dialogplugin.dll 194KB
dialogplugin.dll 194KB
qtaccessiblewidgets.dll 174KB
declarative_positioning.dll 142KB
widgetsplugin.dll 115KB
libgcc_s_dw2-1.dll 115KB
widgetsplugin.dll 115KB
Qt5MultimediaWidgets.dll 105KB
qml_winextras.dll 104KB
qml_winextras.dll 104KB
qsqlodbc.dll 103KB
Qt5SerialPort.dll 95KB
qquicklayoutsplugin.dll 89KB
qmlxmllistmodelplugin.dll 89KB
qquicklayoutsplugin.dll 89KB
qmldbg_qtquick2.dll 84KB
Qt5MultimediaQuick_p.dll 80KB
qsqlpsql.dll 77KB
qtaudio_windows.dll 75KB
qsqlmysql.dll 66KB
qtmedia_audioengine.dll 62KB
qmlfolderlistmodelplugin.dll 62KB
qnativewifibearer.dll 57KB
qmllocalstorageplugin.dll 54KB
qgenericbearer.dll 53KB
qdds.dll 50KB
dialogsprivateplugin.dll 50KB
dialogsprivateplugin.dll 50KB
libwinpthread-1.dll 48KB
qtaccessiblequick.dll 45KB
qicns.dll 42KB
qsvgicon.dll 39KB
qmltestplugin.dll 34KB
qmldbg_tcp.dll 34KB
qico.dll 33KB
qgif.dll 31KB
qmlsettingsplugin.dll 30KB
qminimal.dll 30KB
qtmultimedia_m3u.dll 28KB
qtga.dll 27KB
qsvg.dll 27KB
qwbmp.dll 26KB
modelsplugin.dll 19KB
qtquick2plugin.dll 19KB
windowplugin.dll 19KB
particlesplugin.dll 19KB
windowplugin.dll 19KB
qtquick2plugin.dll 19KB
共 473 条
- 1
- 2
- 3
- 4
- 5
Cloud_Castle
- 粉丝: 1025
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页