记录一下在用Qt封装snap7.h。实际运行中遇到的问题及解决方法。
问题
1.在ubuntu20.04中运行遇到了通讯突然断线问题,并且无法重新连接。网卡崩溃。经排查是网卡驱动不兼容导致的。可以先查看自己的硬件配置。
sudo apt update
sudo lshw -C network
sudo rmmod r8169
apt search 8168
sudo apt-get install r8168-dkms
reboot
#ifndef CONNECTSNAP7_H
#define CONNECTSNAP7_H
#include <QObject>
#include <QDebug>
#include <QTimer>
#include <QThread>
#include <QtEndian>
#include "snap7.h"
#include <math.h>
#include <QQueue>
#define CN7 ConnectSnap7::returnCN7()
class ConnectSnap7 : public QObject
{
Q_OBJECT
signals:
void updateUI();
void Start();
public slots:
void set_gain_data(); //批量获取数据
void RcvMsg();
public:
explicit ConnectSnap7(QObject *parent = nullptr);
static ConnectSnap7 *returnCN7();
bool connectS7();
void disConnectS7();
bool Get_Stauts();
public: // Read
QByteArray DBReadNew(int piece, int beginbyte, int endbyte);
void Read(int DBNumber, int Start, int Amount,void *pUsrData);
float floatFromBigEndian(QByteArray data);
short charFromBigEndian(QByteArray data);
short toShort(QByteArray ary);
int toInt(QByteArray ary);
public: // Write
void DBWriteNew(QByteArray data, int address, int piece);
void Write(int DBNumber, int Start, int Size, QByteArray ary);
QByteArray floatBigendian(float input);
QByteArray intBigendian(int input);
QByteArray charBigendian(short input);
void set_s7_value(QString DBNumber, bool data);
QByteArray get_s7_value_core(QString DBNumber, int wordlen = 1);
void set_s7_value_core(QString DBNumber, int wordlen = 1, QByteArray data = {});
void Set_DB46(QByteArray data);
public:
TS7Client *_client;
QString ipaddr;
int reg;
};
#endif // CONNECTSNAP7_H