#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QSerialPortInfo>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
sysTimer=new QTimer(this);
connect(sysTimer,SIGNAL(timeout()),this,SLOT(onSysTimerSlots()));
sysTimer->start(1000);
myserial=new MSerialPort(this);
connect(this,SIGNAL(modbusData(QByteArray)),myserial,SLOT(onSendHandle(QByteArray)));
connect(myserial,SIGNAL(serialData(QByteArray)),this,SLOT(onDevtoAppHandle(QByteArray)));
QList<QSerialPortInfo> list=QSerialPortInfo::availablePorts(); //获取串口 链表名称
if(list.isEmpty()) {
ui->comboBox->addItem("no");
}
for(int i=0;i<list.length();i++){
ui->comboBox->addItem(list.at(i).portName());
}
QList<QHostAddress> addrList=QNetworkInterface::allAddresses();
foreach(QHostAddress address,addrList){
if(address.protocol()==QAbstractSocket::IPv4Protocol){
ui->addrComboBox->addItem(address.toString());
}
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onSysTimerSlots()
{
ui->statusBar->showMessage(QDateTime::currentDateTime().toString("系统时间:yyyy-MM-dd hh:mm:ss AP ddd"));
}
void MainWindow::onDevtoAppHandle(QByteArray frame)
{
qDebug()<<"serial"<<frame.toHex();
if(frame.isEmpty()) return;
devhard=new DevProtocol(this);
apphard=new AppProtocol(this);
DevProtocol devhard2=devhard->fromModbus(frame);
qDebug()<<"special1"<<devhard2.getCmd();
qDebug()<<"special2"<<devhard2.getSlaveID();
qDebug()<<"special3"<<devhard2.getLength();
qDebug()<<"temperature_test"<<devhard2.getData();
qDebug()<<"temperature_test2"<<devhard2.getData().toHex();
if(devhard2.getCmd()==03){
int value;
QByteArray v_arr;
switch (devhard2.getChecknum()) {
case 0x0010:
apphard->setDevice(17);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x0015:
apphard->setDevice(18);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x5000:
apphard->setDevice(19);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x0700:
apphard->setDevice(20);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x0200:
apphard->setDevice(21);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x0450:
apphard->setDevice(22);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x0400:
apphard->setDevice(23);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x0350:
apphard->setDevice(24);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
case 0x0300:
apphard->setDevice(25);
apphard->setCmd(0);
v_arr = devhard2.getData();
value = v_arr[0]<<8|v_arr[1];
apphard->setData(value);
break;
default:
break;
}
}
QByteArray temphard=apphard->toXmlFormat();
server->sendMessage(temphard);
}
void MainWindow::onApptoDevHandle(QByteArray frame)
{
QByteArray d1;
QByteArray d2;
int data_int;
qDebug()<<"rec"<<frame;
appsoft=new AppProtocol(this);
devsoft=new DevProtocol(this);
AppProtocol appsoft2=appsoft->fromXmlFormat(frame);
switch (appsoft2.getDevice()) {
case 1:
devsoft->setSlaveID(0x08);
devsoft->setCmd(0x10);
devsoft->setSensorID(0x0850);
devsoft->setCounter(0x0001);
devsoft->setLength(0x02);
if(appsoft2.getData()==1){
d1[0] = 0x00;
d1[1] = 0x01;
devsoft->setData(d1);
}else{
QByteArray d1;
d1[0] = 0x00;
d1[1] = 0x00;
devsoft->setData(d1);
}
break;
case 2:
devsoft->setSlaveID(0x07);
devsoft->setCmd(0x10);
devsoft->setSensorID(0x6010);
devsoft->setCounter(0x0001);
devsoft->setLength(0x02);
if(appsoft2.getData()==1){
d1[0] = 0x00;
d1[1] = 0x01;
devsoft->setData(d1);
}else{
d1[0] = 0x00;
d1[1] = 0x00;
devsoft->setData(d1);
}
break;
case 3:
devsoft->setSlaveID(0x07);
devsoft->setCmd(0x10);
devsoft->setSensorID(0x0F00);
devsoft->setCounter(0x0001);
devsoft->setLength(0x02);
if(appsoft2.getData()==0){
d1[0] = 0x00;
d1[1] = 0x00;
devsoft->setData(d1);
}else if(appsoft2.getData()==1){
d1[0] = 0x00;
d1[1] = 0x01;
devsoft->setData(d1);
}else if(appsoft2.getData()==2){
d1[0] = 0x00;
d1[1] = 0x02;
devsoft->setData(d1);
}else if(appsoft2.getData()==3){
d1[0] = 0x00;
d1[1] = 0x03;
devsoft->setData(d1);
}else if(appsoft2.getData()==4){
d1[0] = 0x00;
d1[1] = 0x04;
devsoft->setData(d1);
}else if(appsoft2.getData()==5){
d1[0] = 0x00;
d1[1] = 0x05;
devsoft->setData(d1);
}else if(appsoft2.getData()==6){
d1[0] = 0x00;
d1[1] = 0x06;
devsoft->setData(d1);
}else if(appsoft2.getData()==7){
d1[0] = 0x00;
d1[1] = 0x07;
devsoft->setData(d1);
}
break;
case 4:
devsoft->setSlaveID(0x01);
devsoft->setCmd(0x10);
devsoft->setSensorID(0x0650);
devsoft->setCounter(0x0001);
devsoft->setLength(0x02);
if(appsoft2.getData()==1){
d2[0] = 0x00;
d2[1] = 0x01;
devsoft->setData(d2);
}else{
d2[0] = 0x00;
d2[1] = 0x00;
devsoft->setData(d2);
}
break;
case 5:
devsoft->setSlaveID(0x01);
devsoft->setCmd(0x10);
devsoft->setSensorID(0x0660);
devsoft->setCounter(0x0001);
devsoft->setLength(0x02);
if(appsoft2.getData()==1){
d2[0] = 0;
d2[1] = 0x01;
devsoft->setData(d2);
}else{
d2[0] = 0;
d2[1] = 0;
devsoft->setData(d2);
}
break;
case 6:
devsoft->setSlaveID(0x01);
devsoft->setCmd(0x10);
devsoft->setSensorID(0x0670);
devsoft->setCounter(0x0001);
devsoft->setLength(0x02);
if(appsoft2.getData()==0){
d2[0] = 0;
d2[1] = 0;
devsoft->setData(d2);
}else if(appsoft2.getData()==1){
d