代码拉取完成,页面将自动刷新
#include "mdbdevunit.h"
#include "qdebug.h"
#include "qsettings.h"
//#include "qmessagebox.h"
#include "const_def.h"
#include "qsettings.h"
#include "qapplication.h"
#include "util.h"
MdbDevUnit::MdbDevUnit(int id,QObject *parent) : QObject{parent}
{
moduleInfo.id=id;
my_thread = new QThread();
this->moveToThread(my_thread);
connect(my_thread,SIGNAL(started()),this,SLOT(my_thread_start()));
my_thread->start();
//my_thread = new QThread();
// port = new QSerialPort();
//// QString configPath=QDir::currentPath()+SOFT_CONFIG;
//// QSettings tmpSets(configPath,QSettings::IniFormat);
//// QString serialNo=tmpSets.value("/SerialPort/MdbDevUnit1").toString();
// unitObj=Util::get_json_root_obj(get_config_by_id(id));
// QString serialNo=QString("com%1").arg(unitObj.value("com").toString());
// qDebug()<<__FUNCTION__<<serialNo;
// serialNumber=serialNo; // "/dev/ttyS0"; //"/dev/ttyUSB0"; //default serialNo
// init_port();
// load_config();
//// start(); //取消自动获取数据,用户自行查询
//// this->moveToThread(my_thread);
//// port->moveToThread(my_thread);
// my_thread->start();//开启多线程
// init_params(id);
// qDebug() << "serial_init...";
}
void MdbDevUnit::init_params(int idNo)
{
int id=moduleInfo.id;
qDebug()<<__FUNCTION__<<id;
QString tmpStr;
QJsonObject tmpObj;
if(id==1){
tmpStr=QDir::currentPath()+MDBUNIT1;
}
else if(id==2){
tmpStr=QDir::currentPath()+MDBUNIT2;
}
else if(id==3){
tmpStr=QDir::currentPath()+MDBUNIT3;
}
else if(id==4){
tmpStr=QDir::currentPath()+MDBUNIT4;
}
tmpObj=Util::get_json_root_obj(tmpStr);
devContainer.clear();
int maxDevIndex=0;
int counter=0;
dev_with_temper_index=0;
for(int i=0;i<tmpObj.count();i++){
if(tmpObj.keys().at(i).contains("dev")){
devContainer.append(new Dev(tmpObj.value(tmpObj.keys().at(i)).toString().toInt())) ;
counter++;
if(maxDevIndex<=tmpObj.value(tmpObj.keys().at(i)).toString().toInt()){
maxDevIndex=tmpObj.value(tmpObj.keys().at(i)).toString().toInt();
dev_with_temper_index=counter;
}
}
}
}
void MdbDevUnit::init_port()
{
//qDebug()<<__FUNCTION__;
// qRegisterMetaType<QSerialPort::SerialPortError>("CRunThread");
connect(port, &QSerialPort::errorOccurred,this, &MdbDevUnit::handleSerialError);
if(port->isOpen())
{
port->close();
qDebug() << "Port close operate is finish";
}
port->setPortName(serialNumber);
port->setBaudRate(unitObj.value("baud").toString().toInt());
//qDebug()<<__FUNCTION__<<unitObj.value("baud").toString().toInt();
if("8"==unitObj.value("bits").toString()){
port->setDataBits(QSerialPort::Data8);
}
else if("5"==unitObj.value("bits").toString()){
port->setDataBits(QSerialPort::Data5);
}
else if("6"==unitObj.value("bits").toString()){
port->setDataBits(QSerialPort::Data6);
}
else if("7"==unitObj.value("bits").toString()){
port->setDataBits(QSerialPort::Data7);
}
if("NONE"==unitObj.value("justbit").toString()){
port->setParity(QSerialPort::NoParity);
}
else if("odd"==unitObj.value("justbit").toString()){
port->setParity(QSerialPort::OddParity);
}
else if("even"==unitObj.value("justbit").toString()){
port->setParity(QSerialPort::EvenParity);
}
if("1"==unitObj.value("stop").toString()){
port->setStopBits(QSerialPort::OneStop);
}
else if("1.5"==unitObj.value("stop").toString()){
port->setStopBits(QSerialPort::OneAndHalfStop);
}
else if("2"==unitObj.value("stop").toString()){
port->setStopBits(QSerialPort::TwoStop);
}
port->setFlowControl(QSerialPort::NoFlowControl);
if(port->open(QIODevice::ReadWrite))
{
qDebug() <<__func__<<"Port have been opened"<<moduleInfo.id;
}
else
{
qDebug() << __func__<<"open it failed"<<port->error();
}
}
void MdbDevUnit::handleSerialError(QSerialPort::SerialPortError error)
{
qDebug()<<__FUNCTION__<<error;
if(port->error() == QSerialPort::ResourceError && port->isOpen())
{
qDebug()<<__FUNCTION__<<"serial port error";
}
}
void MdbDevUnit::my_thread_start(void)
{
port = new QSerialPort();
// QString configPath=QDir::currentPath()+SOFT_CONFIG;
// QSettings tmpSets(configPath,QSettings::IniFormat);
// QString serialNo=tmpSets.value("/SerialPort/MdbDevUnit1").toString();
unitObj=Util::get_json_root_obj(get_config_by_id(moduleInfo.id));
QString serialNo=QString("com%1").arg(unitObj.value("com").toString());
qDebug()<<__FUNCTION__<<serialNo;
serialNumber=serialNo; // "/dev/ttyS0"; //"/dev/ttyUSB0"; //default serialNo
init_port();
load_config();
// my_thread->start();//开启多线程
init_params(1);
cmdExecute=new QTimer();
cmdExecute->setTimerType(Qt::PreciseTimer);
cmdsList.clear();
connect(cmdExecute,&QTimer::timeout,this,&MdbDevUnit::on_cmd_time_out);
// cmdExecute->start(10);
// cmdExecute.moveToThread(my_thread);
// qDebug() << "serial_init...";
}
void MdbDevUnit::write_data()
{
qDebug() << "write_id is:" << QThread::currentThreadId();
port->write("data123",5);
}
void MdbDevUnit::close_port(void)
{
port->close();
}
void MdbDevUnit::port_reboot(void)
{
delete port;
port=new QSerialPort();
unitObj=Util::get_json_root_obj(get_config_by_id(moduleInfo.id));
QString serialNo=QString("com%1").arg(unitObj.value("com").toString());
qDebug()<<__FUNCTION__<<serialNo;
serialNumber=serialNo; // "/dev/ttyS0"; //"/dev/ttyUSB0"; //default serialNo
init_port();
}
void MdbDevUnit::change_port_no(QString portNo)
{
port->close();
serialNumber=portNo;
port->setPortName(serialNumber);
port->open(QIODevice::ReadWrite);
QString configPath=QDir::currentPath()+SOFT_CONFIG;
QSettings tmpSets(configPath,QSettings::IniFormat);
tmpSets.setValue("/SerialPort/portparticle",serialNumber);
qDebug()<<__FUNCTION__<<serialNumber;
}
/*
* 开始检测
void MdbDevUnit::start()
{
if ( !port || !port->isOpen() )
{
qDebug() << "dust particle count: start failed, device not connected.";
return;
}
qDebug()<<__FUNCTION__<<"TEST1";
if(m_update_timer==nullptr){
m_update_timer = std::unique_ptr< QTimer >( new QTimer( this ) );
connect( m_update_timer.get(), &QTimer::timeout, this, &MdbDevUnit::on_update_data );
}
m_update_timer->start( MELT_DATA_UPDATE_INTERVAL );
}
*/
void MdbDevUnit::init_serialNumber(QString serialNo)
{
serialNumber=serialNo;
init_port();
}
void MdbDevUnit::slot_cmd_send(QByteArray cmdBytes)
{
qDebug()<<__FUNCTION__<<cmdBytes;
port->write(cmdBytes,cmdBytes.size());
}
QString MdbDevUnit::get_config_by_id(qint8 id)
{
qDebug()<<__FUNCTION__<<id;
QString tmpStr=QDir::currentPath();
switch (id) {
case 1:
tmpStr+=MDBUNIT1;
break;
case 2:
tmpStr+=MDBUNIT2;
break;
case 3:
tmpStr+=MDBUNIT3;
break;
case 4:
tmpStr+=MDBUNIT4;
break;
}
return tmpStr;
}
bool MdbDevUnit::load_config()
{
// QString path = QDir::currentPath();
// QFile jsonfile( path + "/"+MELT_UNIT_CONFIG_FILE );
// if ( !jsonfile.open( QFile::ReadOnly ) )
// {
// qDebug() << __FUNCTION__ << " open config file failed! " << path + MELT_UNIT_CONFIG_FILE;
// return false;
// }
// QByteArray data = jsonfile.readAll();
// jsonfile.close();
// QJsonParseError err;
// QJsonDocument doc = QJsonDocument::fromJson( data, &err );
// if ( doc.isNull() || !doc.isObject() )
// {
// qDebug() << "dust particle count: parse json file " << jsonfile << " failed, " << "err=" << err.errorString();
// return false;
// }
// m_config = doc.object();
// QJsonValue addr = m_config.value( "addr" );
// m_addr = addr.toInt();
return true;
}
/*
* 启动功能,参考设备MODBUS通信文档
*/
bool MdbDevUnit::write_modbus_register_longtime(qint16 addr, int reg_addr, quint16 val )
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
data.append( 0x06 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
data.append( val >> 8 );
data.append( val & 0xff );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
// qDebug()<<__FUNCTION__<<data.toHex();
port->readAll();
int written = port->write( data );
qDebug()<<__FUNCTION__<<112;
if ( -1 == written )
{
qDebug() << " send start count cmd failed1.";
return false;
}
QByteArray array;
int timeout = 3;
while( ( timeout-- ) > 0 )
{
Util::sleep( 5 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
// qDebug()<<__FUNCTION__<<111;
if ( array.length() < 8 ){
// qDebug()<<__FUNCTION__<<array.toHex();
continue;
}
// qDebug()<<__FUNCTION__<<array.toHex();
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2 ) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << " check modbus reply crc failed. " << array.toHex();
return false;
}
return true;
}
return true;
}
/*
* 启动功能,参考设备MODBUS通信文档
*/
bool MdbDevUnit::write_modbus_register(qint16 addr, int reg_addr, quint16 val )
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
data.append( 0x06 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
data.append( val >> 8 );
data.append( val & 0xff );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
qDebug()<<__FUNCTION__<<data.toHex();
port->readAll();
int written = port->write( data );
if ( -1 == written )
{
qDebug() << "dust particle count: send start count cmd failed1.";
return false;
}
QByteArray array;
int timeout = 2;
while( ( timeout-- ) > 0 )
{
Util::sleep( 10 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
// qDebug()<<__FUNCTION__<<111;
if ( array.length() < 8 ){
// qDebug()<<__FUNCTION__<<array.toHex();
continue;
}
// qDebug()<<__FUNCTION__<<array.toHex();
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2 ) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << " check modbus reply crc failed. " << array.toHex();
return false;
}
return true;
}
return true;
}
/*
* 启动功能,参考设备MODBUS通信文档
*/
bool MdbDevUnit::write_modbus_register_without_wait(qint16 addr, int reg_addr, quint16 val )
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
data.append( 0x06 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
data.append( val >> 8 );
data.append( val & 0xff );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
// qDebug()<<__FUNCTION__<<data.toHex();
port->readAll();
int written = port->write( data );
if ( -1 == written )
{
qDebug() << " send start count cmd failed1.";
return false;
}
QByteArray array;
int timeout = 1;
while( ( timeout-- ) > 0 )
{
Util::sleep( 5 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
// qDebug()<<__FUNCTION__<<111;
// if ( array.length() < 8 ){
// qDebug()<<__FUNCTION__<<array.toHex();
continue;
// }
// qDebug()<<__FUNCTION__<<array.toHex();
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2 ) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << __FUNCTION__<<" check modbus reply crc failed. " << array.toHex();
return false;
}
return true;
}
return true;
}
bool MdbDevUnit::write_modbus_register_cmd10(qint16 addr, int reg_addr, quint16 val )
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
data.append( 0x10 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
data.append( (char)0 );
data.append( 0x01 );
data.append( 0x02 );
data.append( val >> 8 );
data.append( val & 0xff );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
//qDebug()<<__FUNCTION__<<data.toHex();
port->readAll();
int written = port->write( data );
if ( -1 == written )
{
qDebug() << " send start count cmd failed1.";
return false;
}
QByteArray array;
int timeout = 6;
while( ( timeout-- ) > 0 )
{
Util::sleep( 5 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
if ( array.length() < 8 ){
// qDebug()<<__FUNCTION__;
continue;
}
// qDebug()<<__FUNCTION__<<array;
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2 ) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << " check modbus reply crc failed. " << array.toHex();
return false;
}
return true;
}
return true;
}
/*
* 初始化检测设备设置
*/
//bool MdbDevUnit::init_device_param()
//{
// if ( m_config.isEmpty() )
// {
// qDebug() << "dust particle count: init device param failed, invalid config param.";
// return false;
// }
// /*
// "sample-period": 60,
// "cleanliness ":300,
// "particle-diameter":2
// "particle-threshold":3520
// "channel":2
// */
// /*
// * 设置计数周期 2-6000秒,寄存器地址:5, 默认采样周期60秒
// */
// int period = 60;
// if ( m_config.find( "sample-period" ) != m_config.end() )
// {
// QJsonValue sample_period = m_config.value( "sample-period" );
// period = sample_period.toInt();
// }
// addressChoose=0;
// if ( !write_modbus_register( 5, period ) )
// {
// qDebug() << "dust particle count: init device param failed, write period param failed.";
// return false;
// }
// return true;
//}
bool MdbDevUnit::read_data(qint16 addr,qint16 reg_addr)
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
// fun = 0x03
data.append( 0x03 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
// num registers = 1
data.append( ( char )0x00 );
data.append( (char) 0x01 );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
//qDebug()<<__FUNCTION__<<data.toHex();
port->readAll();
int written = port->write( data );
if ( -1 == written )
{
qDebug() << "modbus: send temperature cmd failed.module id="<<moduleInfo.id;
return false;
}
QByteArray array;
int timeout = 10;
while( ( timeout-- ) > 0 )
{
Util::sleep( 5 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
if ( array.length() < 7 ){
// qDebug()<<__FUNCTION__<<"in loop";
continue;
}
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << "modbus: get temperature data failed.module id="<<moduleInfo.id << array.toHex();
return false;
}
readRes = (array.at(3)&0xff)<<8|(array.at(4)&0xff);
qDebug()<<__FUNCTION__<<readRes<<array.toHex();
return true;
}
return false;
}
bool MdbDevUnit::read_data_cmd04(qint16 addr,qint16 reg_addr)
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
// fun = 0x03
data.append( 0x04 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
// num registers = 1
data.append( ( char )0x00 );
data.append( (char) 0x01 );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
//qDebug()<<__FUNCTION__<<data.toHex();
port->readAll();
int written = port->write( data );
if ( -1 == written )
{
qDebug() << "modbus: send temperature cmd failed.module id="<<moduleInfo.id;
return false;
}
QByteArray array;
int timeout = 1000;
while( ( timeout-- ) > 0 )
{
Util::sleep( 20 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
if ( array.length() < 7 ){
// qDebug()<<__FUNCTION__;
continue;
}
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << "modbus: get temperature data failed.module id="<<moduleInfo.id << array.toHex();
return false;
}
readRes = (array.at(3)&0xff)<<8|(array.at(4)&0xff);
qDebug()<<__FUNCTION__<<readRes;
return true;
}
return false;
}
bool MdbDevUnit::read_n_data_cmd04(qint16 addr,qint16 reg_addr,qint16 data_len,qint16 res_len)
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
// fun = 0x03
data.append( 0x03 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
// num registers = data_len
data.append( data_len>>8 );
data.append( data_len & 0xff );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
port->readAll();
int written = port->write( data );
if ( -1 == written )
{
qDebug() << "modbus: send temperature cmd failed.module id="<<moduleInfo.id;
return false;
}
QByteArray array;
int timeout = 1000;
while( ( timeout-- ) > 0 )
{
Util::sleep( 20 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
if ( array.length() < res_len ){
// qDebug()<<__FUNCTION__;
continue;
}
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << "modbus: get temperature data failed.module id="<<moduleInfo.id << array.toHex();
return false;
}
resArray.clear();
for(int i=0;i<array.count();i++)resArray.append(array.at(i));
// readRes = (array.at(3)&0xff)<<8|(array.at(4)&0xff);
qDebug()<<__FUNCTION__<<resArray.toHex('-');
return true;
}
return false;
}
bool MdbDevUnit::read_n_data(qint16 addr,qint16 reg_addr,qint16 data_len,qint16 res_len)
{
Q_ASSERT( port );
QByteArray data;
data.append( addr );
// fun = 0x03
data.append( 0x03 );
data.append( reg_addr >> 8 );
data.append( reg_addr & 0xff );
// num registers = data_len
data.append( data_len>>8 );
data.append( data_len & 0xff );
uint16_t crcval = Util::modbus_crc16( data );
data.append( crcval & 0xff );
data.append( crcval >> 8 );
port->readAll();
int written = port->write( data );
if ( -1 == written )
{
qDebug() << "modbus: send temperature cmd failed.module id="<<moduleInfo.id;
return false;
}
QByteArray array;
int timeout = 50;
while( ( timeout-- ) > 0 )
{
Util::sleep( 1 );
array.append( port->readAll() );
/*
* 根据文档,此处应答应该8个字节
*/
qDebug()<<__FUNCTION__<<1<<moduleInfo.id;
if ( array.length() < res_len ){
qDebug()<<__FUNCTION__<<moduleInfo.id;
continue;
}
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( array.left( array.length() - 2) );
if ( (( unsigned char ) array.at( array.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )array.at( array.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() << "modbus: get data failed.module id="<<moduleInfo.id << array.toHex();
return false;
}
resArray.clear();
for(int i=0;i<array.count();i++)resArray.append(array.at(i));
// readRes = (array.at(3)&0xff)<<8|(array.at(4)&0xff);
qDebug()<<__FUNCTION__<<resArray.toHex('-');
return true;
}
return false;
}
/***
void MdbDevUnit::on_update_data()
{
qDebug()<<__FUNCTION__;
if( !read_temperature_data( 1001 ) )
{
qDebug() << "melt unit: read temperature data failed.";
return;
}
emit count( melt_data );
}
***/
bool MdbDevUnit::crc16_check(QByteArray cmdBytes, int byte_num)
{
/*
* 根据文档,此处应答应该8个字节
*/
if ( cmdBytes.length() < byte_num )
return false;
/*
* 对比CRC16数据校验
*/
uint16_t crc= Util::modbus_crc16( cmdBytes.left( cmdBytes.length() - 2 ) );
if ( (( unsigned char ) cmdBytes.at( cmdBytes.length() - 2 ) != ( crc & 0xFF ) ) || ( ( unsigned char )cmdBytes.at( cmdBytes.length() - 1 ) != ( ( crc >> 8 ) & 0xFF ) ) )
{
qDebug() <<__FUNCTION__<< " check modbus reply crc failed. " << cmdBytes.toHex();
return false;
}
return true;
}
/*
* 停止检测
*/
//void MdbDevUnit::on_stop()
//{
// qDebug()<<__FUNCTION__;
// /*
// * 停止计数: 1 ,结束计数:0, 控制寄存器地址 3
// */
// addressChoose=0;
// if ( !write_modbus_register( 3, 0 ) )
// {
// qDebug() << " start failed, write device register failed.";
// return ;
// }
// if(m_update_timer->isActive())m_update_timer->stop();
//}
void MdbDevUnit::on_cmds(int cmdNo)
{
switch(cmdNo){
case 1:
// on_stop();
break;
case 2:
// start();
break;
default:
break;
}
}
//void MdbDevUnit::send_temper_setting(int tmpVal)
//{
// qDebug()<<__FUNCTION__<<tmpVal;
// addressChoose=0;
// write_modbus_register( 1000, tmpVal );
// write_modbus_register(1000,tmpVal);
// addressChoose=1;
// write_modbus_register( 1000, tmpVal );
// write_modbus_register(1000,tmpVal);
//}
//dev1 operate
void MdbDevUnit::dev_choose(int index)
{
qDebug()<<__FUNCTION__<<"dev index is:"<<index;
for(int i=0;i<devContainer.count();i++){
if(devContainer.at(i)->id==index)
devx=devContainer.at(i);
}
// switch (index) {
// case 1:
// devx=dev1;
// break;
// case 2:
// devx=dev2;
// break;
// case 3:
// devx=dev3;
// break;
// case 4:
// devx=dev4;
// break;
// default:
// devx=dev1;
// break;
// }
}
//devx operate
void MdbDevUnit::devx_operate_relay(qint8 devIndex,qint16 channelNo,qint16 openOrClose)
{
qDebug()<<__FUNCTION__<<channelNo<<openOrClose;
dev_choose(devIndex);
write_modbus_register(devx->getRelayAddr(),channelNo,openOrClose);
}
//devx operate
void MdbDevUnit::devx_operate_set_relay_addr(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__<<newVal;
dev_choose(devIndex);
write_modbus_register(devx->getRelayAddr(),0x0032,newVal);
}
//devx operate
void MdbDevUnit::devx_operate_set_relay_baud(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__<<newVal;
dev_choose(devIndex);
write_modbus_register(devx->getRelayAddr(),0x0033,newVal);
}
//devx operate
void MdbDevUnit::devx_operate_output_together(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__<<newVal;
dev_choose(devIndex);
write_modbus_register(devx->getRelayAddr(),0x000c,newVal);
}
//devx operate
void MdbDevUnit::devx_operate_output_by_bits(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__<<newVal;
dev_choose(devIndex);
write_modbus_register(devx->getRelayAddr(),0x0035,newVal);
}
//devx operate
void MdbDevUnit::on_sig_unit_dev_operate(QObject *sender,QStringList paramList)
{
cmdExecuteFlag=false;
qDebug()<<__FUNCTION__<<paramList;
QStringList resStr;
if(paramList.isEmpty()){
return ;
}
if(paramList.at(0)=="openRelay"){ //单个阀门开闭
devx_operate_relay(paramList.at(1).toInt(),paramList.at(2).toInt(),paramList.at(3).toInt());
}
else if(paramList.at(0)=="openRelayhandle"){ //获取温度
devx_operate_relay(paramList.at(1).toInt(),paramList.at(2).toInt(),paramList.at(3).toInt());
}
else if(paramList.at(0)=="Temper"){ //获取温度
float temperVal = devx_operate_get_temp(paramList.at(1).toInt());
resStr<<"Temper"<<QString::number(temperVal);
emit sig_return_res_temper(resStr);
}
else if(paramList.at(0)=="RainSnow"){ //获取雨雪
int rainSnow = devx_operate_get_rain_snow(paramList.at(1).toInt());
resStr<<"RainSnow"<<QString::number(rainSnow);
emit sig_return_res(sender,resStr);
}
else if(paramList.at(0)=="Pressure"){ //获取压力
QList<float> tmpVals;
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
qSort(tmpVals.begin(),tmpVals.end());
qDebug()<<__FUNCTION__<<"pValres"<<tmpVals.at(2);
float finalVal=tmpVals.at(2);
resStr<<"Pressure"<<QString::number(finalVal);
emit sig_return_res(sender,resStr);
}
else if(paramList.at(0)=="readPressure"){ //获取压力
QList<float> tmpVals;
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
tmpVals.append(devx_operate_get_pressure_val(paramList.at(1).toInt()));
qSort(tmpVals.begin(),tmpVals.end());
qDebug()<<__FUNCTION__<<"pValres"<<tmpVals.at(2);
float finalVal=tmpVals.at(2);
resStr<<"readPressure"<<QString::number(finalVal);
emit sig_return_res(sender,resStr);
}
else if(paramList.at(0)=="relay_baud"){ //获取压力
devx_operate_set_relay_baud(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="relay_addr"){ //获取压力
devx_operate_set_relay_addr(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="pressure_baud"){ //获取压力
devx_operate_set_pressure_baud(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="pressure_addr"){ //获取压力
devx_operate_set_pressure_addr(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="temper_addr"){ //获取压力
devx_operate_set_temper_addr(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="temper_baud"){ //获取压力
devx_operate_set_temper_baudrate(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="rain_snow_baud"){ //获取压力
devx_operate_set_rain_snow_baud(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="rain_snow_addr"){ //获取压力
devx_operate_set_rain_snow_addr(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="temper_reset"){ //获取压力
temper_poweroff_and_save(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="port_baud"){ //获取压力
reset_port_baud(paramList.at(1).toInt(),paramList.at(2).toInt());
}
else if(paramList.at(0)=="get_temper_handle"){ //获取压力
float temperVal = devx_operate_get_temp(paramList.at(1).toInt());
resStr<<"Temper"<<QString::number(temperVal);
emit sig_return_res_handle(QStringList()<<QString::number(moduleInfo.id)<<QString("get_temper_handle")<<QString::number(temperVal));
}
else if(paramList.at(0)=="set_press_zero"){ //获取压力
devx_operate_set_pressure_zero(paramList.at(1).toInt());
}
cmdExecuteFlag=true;
}
//devx operate
int MdbDevUnit::devx_operate_get_temp_addr(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
int addr=0;
read_data(devx->getTemperAddr(),0x0000);
addr=readRes;
return addr;
}
//devx operate
int MdbDevUnit::devx_operate_get_baudrate(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
int addr=0;
read_data(devx->getTemperAddr(),0x0000);
addr=readRes;
return addr;
}
//devx operate
void MdbDevUnit::devx_operate_set_temper_addr(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
write_modbus_register_longtime(devx->getTemperAddr(),0x0000,newVal);
}
void MdbDevUnit::temper_poweroff_and_save(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
write_modbus_register_longtime(newVal,0x000f,0);
}
//devx operate
void MdbDevUnit::devx_operate_set_temper_baudrate(qint8 devIndex,qint16 newBaudrate)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
write_modbus_register(devx->getTemperAddr(),0x0001,newBaudrate);
}
//devx operate
void MdbDevUnit::reset_port_baud(qint8 devIndex,qint32 newBaudrate)
{
qDebug()<<__FUNCTION__<<newBaudrate;
// dev_choose(devIndex);
unitObj.remove("baud");
unitObj.insert("baud",QString::number(newBaudrate));
init_port();
}
//devx operate
void MdbDevUnit::devx_operate_set_temper_zeroshift(qint8 devIndex,qint16 newShift)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
write_modbus_register(devx->getTemperAddr(),0x000c,newShift);
}
//devx operate
void MdbDevUnit:: devx_operate_taper_save_data(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
write_modbus_register(0x02,0x000f,0x0000);
}
//devx operate
void MdbDevUnit:: devx_operate_temper_restore_factory(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
write_modbus_register(0x02,0x0010,0x0000);
}
//devx operate
float MdbDevUnit::devx_operate_get_temp(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
int precision=0;
if(!read_data(devx->getTemperAddr(),0x0003)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
precision=readRes;
float currentTemper=-1;
if(read_data(devx->getTemperAddr(),0x0004)){
switch (precision) {
case 0:
currentTemper=readRes;
break;
case 1:
currentTemper=readRes*0.1;
break;
case 2:
currentTemper=readRes*0.01;
break;
case 3:
currentTemper=readRes*0.001;
break;
case 4:
currentTemper=readRes*0.0001;
break;
default:
currentTemper=readRes;
break;
}
}
qDebug()<<__FUNCTION__<<"temperature precision is:"<<precision<<"temperature value is:"<<currentTemper;
return currentTemper;
}
//devx operate rain snow
int MdbDevUnit::devx_operate_get_rain_snow(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
if(!read_data(devx->getRainSnowAddr(),0x0000)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
int MdbDevUnit::devx_operate_get_rain_snow_addr(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
if(!read_data(devx->getRainSnowAddr(),0x0080)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
int MdbDevUnit::devx_operate_set_rain_snow_addr(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register_cmd10(devx->getRainSnowAddr(),0x0080,newVal);
return 1;
}
int MdbDevUnit::devx_operate_get_rain_snow_baud(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
if(!read_data(devx->getRainSnowAddr(),0x0081)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
int MdbDevUnit::devx_operate_set_rain_snow_baud(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register_cmd10(devx->getRainSnowAddr(),0x0081,newVal);
return 1;
}
int MdbDevUnit::devx_operate_get_rain_snow_start_temper(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
if(!read_data(devx->getRainSnowAddr(),0x00c0)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
int MdbDevUnit::devx_operate_set_rain_snow_start_temper(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register_cmd10(devx->getRainSnowAddr(),0x00c0,newVal);
return 1;
}
int MdbDevUnit::devx_operate_get_rain_snow_stop_temper(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
if(!read_data(devx->getRainSnowAddr(),0x00c1)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
int MdbDevUnit::devx_operate_set_rain_snow_stop_temper(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register_cmd10(devx->getRainSnowAddr(),0x00c1,newVal);
return 1;
}
//devx operate pressure
float MdbDevUnit::devx_operate_get_pressure_val(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
if(!read_n_data(devx->getPressAddr(),0x0000,4,13)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
QByteArray array=resArray.mid(3,4); //取压力值
QString tmpPressVal = Util::claculate_data(array);
return tmpPressVal.toFloat();
}
//devx operate pressure
int MdbDevUnit::devx_operate_set_pressure_addr(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register(devx->getPressAddr(),0x012a,newVal);
return 1;
}
//devx operate pressure
int MdbDevUnit::devx_operate_set_pressure_baud(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register_without_wait(devx->getPressAddr(),0x012b,newVal);
return 1;
}
//devx operate pressure
int MdbDevUnit::devx_operate_set_pressure_check_bit(qint8 devIndex,qint16 newVal)
{
// qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register(devx->getPressAddr(),0x012c,newVal);
return 1;
}
//devx operate pressure
int MdbDevUnit::devx_operate_set_pressure_unit(qint8 devIndex,qint16 newVal)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register(devx->getPressAddr(),0x0017,newVal);
return 1;
}
//devx operate pressure
int MdbDevUnit::devx_operate_set_pressure_zero(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
// read_modbus_re
write_modbus_register(devx->getPressAddr(),0x0010,0x0000);
return 1;
}
//devx operate pressure
int MdbDevUnit::devx_operate_get_pressure_addr(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
if(!read_data_cmd04(devx->getPressAddr(),0x012a)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
//devx operate pressure
int MdbDevUnit::devx_operate_get_pressure_baud(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
if(!read_data_cmd04(devx->getPressAddr(),0x012b)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
//devx operate pressure
int MdbDevUnit::devx_operate_get_pressure_check_bit(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
if(!read_data_cmd04(devx->getPressAddr(),0x012c)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
//devx operate pressure
int MdbDevUnit::devx_operate_get_pressure_unit(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
if(!read_data_cmd04(devx->getPressAddr(),0x012b)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
return readRes;
}
//devx operate pressure
float MdbDevUnit::devx_operate_get_pressure_shift(qint8 devIndex)
{
qDebug()<<__FUNCTION__;
dev_choose(devIndex);
if(!read_n_data_cmd04(devx->getPressAddr(),0x0010,2,9)){
qDebug()<<__FUNCTION__<<"read point failed!";
return -1;
}
QByteArray array=resArray.mid(3,4); //取压力值
QString tmpPressVal = Util::claculate_data(array);
return tmpPressVal.toFloat();
}
void MdbDevUnit::on_cmd_time_out(void)
{
qDebug()<<__FUNCTION__<<moduleInfo.id<<cmdsList;
if(cmdsList.isEmpty()){
if(cmdExecute->isActive()){
cmdExecute->stop();
}
}
if(!cmdsList.isEmpty()&&parseOrNot==1&&cmdExecuteFlag==true){
cmdStrs=cmdsList.at(0);
senderObj=senderList.at(0);
//qDebug()<<__FUNCTION__<<1;
// mLocker.lock();
// qDebug()<<__FUNCTION__<<2;
senderList.pop_front();
cmdsList.pop_front();
on_sig_unit_dev_operate(senderObj,cmdStrs);
// qDebug()<<__FUNCTION__<<cmdsList;
// mLocker.unlock();
}
}
void MdbDevUnit::cmd_phrase(QStringList cmdList)
{
// mLocker.lock();
if(!cmdExecute->isActive()){
cmdExecute->start(50);
}
if(cmdList.at(0)==QString("openRelayhandle")){
// if(cmdExecute.isActive())cmdExecute.stop();
// parseOrNot=0;
senderList.clear();
cmdsList.clear();
senderList.push_front(sender());
cmdsList.push_front(cmdList);
// parseOrNot=1;
// cmdExecute.start(50);
}
else if(cmdList.at(0)==QString("openRelay")){
senderList.push_front(sender());
cmdsList.push_front(cmdList);
}
else{
senderList.push_back(sender());
cmdsList.push_back(cmdList);
}
qDebug()<<__FUNCTION__<<senderList<<cmdsList;
// mLocker.unlock();
}
void MdbDevUnit::slot_on_temper_cmd_from_flow(QObject *sender,QStringList cmdList)
{
qDebug()<<__FUNCTION__<<cmdList<<sender;
if(cmdList.isEmpty())return;
if(!cmdExecute->isActive()){
cmdExecute->start(50);
}
senderList.push_back(sender);
cmdsList.push_back(cmdList);
qDebug()<<__FUNCTION__<<cmdsList;
}
void MdbDevUnit::control_cmd(QStringList cmdList)
{
qDebug()<<__FUNCTION__<<cmdsList;
if(cmdList.isEmpty())return;
if(cmdList.at(0)=="reboot_port"){
port_reboot();
}
else {
if(!cmdExecute->isActive()){
cmdExecute->start(50);
}
senderList.push_back(sender());
cmdsList.push_back(cmdList);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。