添加 初始化失败的重试功能
This commit is contained in:
@@ -108,21 +108,22 @@ QString Hd_SocketModule_ModbusTcp::ShortToHex(int value)
|
||||
Hd_SocketModule_ModbusTcp::Hd_SocketModule_ModbusTcp()
|
||||
{
|
||||
m_Mutex = new QMutex;
|
||||
m_Thread = new MyThread(this);
|
||||
m_Thread->setMutexLock(m_Mutex);
|
||||
//m_Thread = new MyThread(this);
|
||||
m_Thread.setMutexLock(m_Mutex);
|
||||
}
|
||||
|
||||
Hd_SocketModule_ModbusTcp::~Hd_SocketModule_ModbusTcp()
|
||||
{
|
||||
m_Thread->setRunStop();
|
||||
m_Thread->wait();
|
||||
m_Thread->quit();
|
||||
if (m_Thread)
|
||||
{
|
||||
qDebug() << "[INFO] "<< "~m_Thread()";
|
||||
delete m_Thread;
|
||||
m_Thread = nullptr;
|
||||
}
|
||||
m_Thread.setRunStop();
|
||||
m_Thread.wait();
|
||||
m_Thread.quit();
|
||||
m_Thread.terminate();
|
||||
//if (m_Thread)
|
||||
//{
|
||||
// qDebug() << "[INFO] "<< "~m_Thread()";
|
||||
// delete m_Thread;
|
||||
// m_Thread = nullptr;
|
||||
//}
|
||||
|
||||
qDebug() << "[INFO] " << "~Hd_SocketModule_ModbusTcp success!";
|
||||
}
|
||||
@@ -395,8 +396,8 @@ bool Hd_SocketModule_ModbusTcp::initParas(QByteArray& data)
|
||||
|
||||
qDebug() << "[TCP] " << "list: " << list;
|
||||
setSleepTimeAndReadNum(sleepvalue.toInt(), readvalue.toInt());
|
||||
m_Thread->setSocketIp(m_Station);
|
||||
if (!m_Thread->setIpAndPort(m_IP, m_host))
|
||||
m_Thread.setSocketIp(m_Station);
|
||||
if (!m_Thread.setIpAndPort(m_IP, m_host))
|
||||
{
|
||||
qDebug() << "[TCP] " << "m_IP:" << m_IP << " m_host:" << m_host << " connectToHost failed!";
|
||||
return false;
|
||||
@@ -406,13 +407,17 @@ bool Hd_SocketModule_ModbusTcp::initParas(QByteArray& data)
|
||||
//开启读PLC数据的客户端
|
||||
//开启socket
|
||||
//第一次运行,创建socket对象,后面发一次握手报文
|
||||
m_Thread->start();
|
||||
Sleep(500);
|
||||
|
||||
if (!m_Thread->getInitSuccessFlag())
|
||||
m_Thread.start();
|
||||
int cnt = 0;
|
||||
while (!m_Thread.getInitSuccessFlag())
|
||||
{
|
||||
qCritical() << "[TCP] " << "TCP init failed!";
|
||||
return false;
|
||||
QThread::msleep(100);
|
||||
cnt++;
|
||||
if(cnt>50)
|
||||
{
|
||||
qCritical() << "[TCP] " << "TCP init failed!";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//// 发送握手指令
|
||||
@@ -421,7 +426,7 @@ bool Hd_SocketModule_ModbusTcp::initParas(QByteArray& data)
|
||||
//WritePLCPack.append(array);
|
||||
|
||||
// 开启线程循环
|
||||
m_Thread->start();
|
||||
m_Thread.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -434,7 +439,7 @@ bool Hd_SocketModule_ModbusTcp::run()
|
||||
void Hd_SocketModule_ModbusTcp::setSleepTimeAndReadNum(int time, int num)
|
||||
{
|
||||
m_sleepTime = time;
|
||||
m_Thread->setReadPackValue(num);
|
||||
m_Thread.setReadPackValue(num);
|
||||
}
|
||||
////写单个寄存器指令,封装为报文
|
||||
//bool Hd_SocketModule_ModbusTcp::writeCommond(QString DM, QString Num)
|
||||
@@ -923,7 +928,6 @@ MyThread::~MyThread()
|
||||
delete m_mutex_lock;
|
||||
m_mutex_lock = nullptr;
|
||||
}
|
||||
std::exit(EXIT_SUCCESS);
|
||||
|
||||
}
|
||||
|
||||
@@ -998,6 +1002,7 @@ void MyThread::run()
|
||||
if (rtn == HDTcpStatus::Success)
|
||||
{
|
||||
qWarning() << "[TCP] " << " You have connected to the server ";
|
||||
init_success = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -17,8 +17,41 @@
|
||||
#pragma comment(lib,"./HslComunnicationCpp.lib")
|
||||
|
||||
#include "base.h"
|
||||
class MyThread;
|
||||
|
||||
class writeThread;
|
||||
class MyThread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MyThread() {};
|
||||
~MyThread();
|
||||
bool setIpAndPort(QString ip, QString port);
|
||||
void run();
|
||||
void readSocketData(); //读取数据
|
||||
void writeSocketData(); //写入数据
|
||||
void decodePack();
|
||||
void setMutexLock(QMutex* lock) { m_mutex_lock = lock; }
|
||||
void setRunStop() { init_flag = 2; }
|
||||
void setReadPackValue(int value);
|
||||
void closeSocket();
|
||||
bool getInitSuccessFlag() { return init_success; }
|
||||
bool disReconnects();
|
||||
void setSocketIp(QString Station) { m_Station = Station; }
|
||||
private:
|
||||
QString m_IP;
|
||||
QString m_Port;
|
||||
QString m_Station;
|
||||
QMutex m_Mutex;
|
||||
QByteArray reciveData;
|
||||
QString socketIp;
|
||||
bool init_success = false; // 初始化成功 返回true;失败返回false
|
||||
int init_flag = 0; // false为完整数据包,true为非完整数据包
|
||||
int m_readPackValue = 122; // 接受50个数据包的长度 为 122 ,加包头一起为 130, 如果是 100的话就是 222 加包头为230
|
||||
QMutex* m_mutex_lock = nullptr;
|
||||
//QTcpSocket *tcpsocket = nullptr; // tcp通信的socket
|
||||
HDTcpBase* tcpsocket = nullptr;
|
||||
};
|
||||
|
||||
class Hd_SocketModule_ModbusTcp :public Base
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -75,43 +108,7 @@ private:
|
||||
//MyThread *m_Thread = nullptr;
|
||||
//QTcpSocket* tcpsocket = nullptr; //tcp通信的socket
|
||||
QMutex* m_Mutex = nullptr;
|
||||
MyThread* m_Thread = nullptr;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//自己创建线程
|
||||
class MyThread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MyThread(QObject *parent = nullptr):QThread(parent){}
|
||||
~MyThread();
|
||||
bool setIpAndPort(QString ip,QString port);
|
||||
void run();
|
||||
void readSocketData(); //读取数据
|
||||
void writeSocketData(); //写入数据
|
||||
void decodePack();
|
||||
void setMutexLock(QMutex* lock) { m_mutex_lock = lock; }
|
||||
void setRunStop(){ init_flag = 2;}
|
||||
void setReadPackValue(int value);
|
||||
void closeSocket();
|
||||
bool getInitSuccessFlag(){return init_success;}
|
||||
bool disReconnects();
|
||||
void setSocketIp(QString Station) { m_Station = Station; }
|
||||
private:
|
||||
QString m_IP;
|
||||
QString m_Port;
|
||||
QString m_Station;
|
||||
QMutex m_Mutex;
|
||||
QByteArray reciveData;
|
||||
QString socketIp;
|
||||
bool init_success = true; // 初始化成功 返回true;失败返回false
|
||||
int init_flag = 0; // false为完整数据包,true为非完整数据包
|
||||
int m_readPackValue = 122; // 接受50个数据包的长度 为 122 ,加包头一起为 130, 如果是 100的话就是 222 加包头为230
|
||||
QMutex* m_mutex_lock = nullptr;
|
||||
//QTcpSocket *tcpsocket = nullptr; // tcp通信的socket
|
||||
HDTcpBase* tcpsocket = nullptr;
|
||||
MyThread m_Thread;
|
||||
};
|
||||
|
||||
extern "C"
|
||||
|
||||
Reference in New Issue
Block a user