-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomm.cpp
More file actions
114 lines (101 loc) · 2.88 KB
/
Copy pathcomm.cpp
File metadata and controls
114 lines (101 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <comm.h>
comm::comm(QObject *parent)
:QObject{parent}
{
network=new QTcpSocket(this);
QObject::connect(network,&QTcpSocket::connected,[](){qDebug()<<"Connect to PLC successfully!";});
QObject::connect(network,&QTcpSocket::disconnected,[](){qDebug()<<"Disconnect from PLC1!";});
QObject::connect(network,&QTcpSocket::stateChanged,[](QAbstractSocket::SocketState socketState){qDebug()<<"SocketState changed:"<<socketState;});
QObject::connect(network,&QTcpSocket::readyRead,[&](){recv();});
recvSuccess=false;
}
comm::~comm()
{
network->flush();
network->close();
network->deleteLater();
}
//以下为连接和断开管理--来自comm
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool comm::open(QString hostName,int port,int timeOut)
{
if(network && !network->isOpen())
{
stop=false;
network->connectToHost(hostName,port);
network->waitForConnected(timeOut);
qDebug()<<"open connect success.";
return true;
}else
{
qDebug()<<"cannot open connect.";
return false;
}
}
bool comm::close()
{
if(network && network->isOpen())
{ stop=true;
QThread::msleep(100);
network->flush();
network->close();
qDebug()<<"close success.";
return true;
}else
{
qDebug()<<"cannot close connect.";
return false;
}
}
void comm::openSlot(QString hostName,int port,int timeOut)
{
qDebug()<<QDateTime::currentDateTime().toString()<<":comm通信openSlot实例线程ID:"<<QThread::currentThreadId();
qDebug()<<"in open slot.";
open(hostName,port,timeOut);
}
void comm::closeSlot()
{
qDebug()<<QDateTime::currentDateTime().toString()<<":comm通信closeSlot实例线程ID:"<<QThread::currentThreadId();
qDebug()<<"in close slot.";
close();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//发送
bool comm::send(QString str)
{
if(network && network->isOpen() && ! stop)
{
comMut.lock();
QByteArray array=QByteArray::fromHex(str.toUpper().toLatin1());
network->write(array);
network->waitForBytesWritten();
network->flush();
comMut.unlock();
return true;
}
return false;
}
//接收
void comm::recv()
{
if(network && network->isOpen())
{
QByteArray array;
array =network->readAll();
QString str=array.toHex().toUpper();
recvBufferString=str;
recvSuccess=true;
}
}
QString comm::readRecvBufferString()
{
QString ret=recvBufferString;
recvBufferString.clear();
recvSuccess=false;
return ret;
}
bool comm::recvFinished()
{
return recvSuccess;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////