基於QT的全自動超聲波焊接機上位機追溯系統(已經在設備上應用)
應用說明:
本上位機程式是我在做鋰電池產線項目的時候開發的,用於採集設備數據以及實現設備自動控制,下位機採用基恩士PLC,超聲波機採用上海一家的超聲波焊接機,實現電芯極耳的自動焊接,上位在設備焊接過程中記錄焊接數據,同時監控設備異常。
主要功能有:@1.設備監控;@2.PLC TCP/IP通訊;@3超聲波焊接機通訊;@4掃碼槍通訊;@5.用戶登錄方可有操作許可權;@6數據採集;@7PLC控制;@8數據持久化等
1.其主介面見下圖:
2.參數設置介面如下:
3.IO介面見下圖:
4.手動操作介面如下所示:
5.MES對接介面:
由於程式文件較大,所以這裡只給出一些示常式序:
1.主程式如下:
`#include “messystem.h”
include “appinit.h”
include
include
include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("gbk");
else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
endif
//載入樣式表
QFile file(":/qss/psblack.css");
if (file.open(QFile::ReadOnly)) {
QString qss = QLatin1String(file.readAll());
QString paletteColor = qss.mid(20, 7);
qApp->setPalette(QPalette(QColor(paletteColor)));
qApp->setStyleSheet(qss);
file.close();
}
a.setFont(QFont("Microsoft Yahei", 9));
AppInit::Instance()->start();
UIDemo01 w;
w.show();
return a.exec();
}`
2.掃碼槍程式
codereader.h文件
`#ifndef CODEREADER_H
define CODEREADER_H
include
include
include
class CodeReader : public QObject
{
Q_OBJECT
public:
explicit CodeReader(QObject *parent = 0);
~CodeReader();
void connectCodeReader(const QString &host,const QString port);
void disconnectCodeReader();
void SendCmd(const QString cmd);
QString readCode();
bool getStstus() const;
void setStstus(bool value);
int getLength() const;
void setLength(int value);
QString getCmd() const;
void setCmd(const QString &value);
QString getCodedata() const;
void setCodedata(const QString &value);
signals:
void receivedData();
void SendLog(QString str);
public slots:
void doConnectClient();
void doDisconnectClient();
void doClientStateChange(QAbstractSocket::SocketState ss);
void doClientReadReady();
void doClientSocketError(QAbstractSocket::SocketError e);
private:
QTcpSocket * client;//掃碼槍連接
bool ststus;//掃碼槍連接狀態
QString cmd;//掃碼槍觸髮指令
int length;//條碼長度
QString codedata;//條碼
void Init();//初始化掃碼槍
};
endif // CODEREADER_H`
codereader.cpp文件
`#include “codereader.h”
CodeReader::CodeReader(QObject *parent) : QObject(parent)
{
Init();
}
CodeReader::~CodeReader()
{
client->close();
delete client;
}
void CodeReader::connectCodeReader(const QString &host, const QString port)
{
if(host.isEmpty() || port.isEmpty())
{
QMessageBox::warning(qobject_cast<QDialog > (this->parent()),”error”,tr(“用戶名和密碼能不能為空”));
return;
}
client->connectToHost(host,port.toInt());
}
/*
- @brief CodeReader::disconnectCodeReader
- 斷開掃碼槍的連接
*/
void CodeReader::disconnectCodeReader()
{
client->disconnectFromHost();
}
void CodeReader::SendCmd(const QString cmd)
{
QByteArray bacmd = cmd.toLocal8Bit();
client->write(bacmd);
}
bool CodeReader::getStstus() const
{
return ststus;
}
void CodeReader::setStstus(bool value)
{
ststus = value;
}
int CodeReader::getLength() const
{
return length;
}
void CodeReader::setLength(int value)
{
length = value;
}
QString CodeReader::getCmd() const
{
return cmd;
}
void CodeReader::setCmd(const QString &value)
{
cmd = value;
}
/**
-
@brief CodeReader::doConnectClient
-
處理連接上槽函數
/
void CodeReader::doConnectClient()
{
setStstus(true);
emit SendLog(tr(“掃碼槍已連接!”));
}
/* -
@brief CodeReader::doDisconnectClient
-
處理斷開連接槽函數
/
void CodeReader::doDisconnectClient()
{
setStstus(false);
emit SendLog(tr(“掃碼槍連接斷開!”));
}
/* -
@brief CodeReader::doClientStateChange
-
@param ss
-
處理連接狀態改變槽函數
*/
void CodeReader::doClientStateChange(QAbstractSocket::SocketState ss)
{if(ss==QAbstractSocket::QAbstractSocket::UnconnectedState)
{
setStstus(false);
}
else
{
setStstus(true);
}
}
/**
-
@brief CodeReader::doClientReadReady
-
處理接收數據槽函數
*/
void CodeReader::doClientReadReady()
{QByteArray badata = client->readAll();
QString datacode = QString(badata);
datacode = datacode.trimmed();
if(datacode.length()>1)
{
//emit SendLog(tr(“讀取到數據”));
setCodedata(datacode);
//emit SendLog(datacode);
emit receivedData();
}
}
/**
- @brief CodeReader::doClientSocketError
- @param e
- 處理socket錯誤槽函數
*/
void CodeReader::doClientSocketError(QAbstractSocket::SocketError e)
{
emit SendLog(tr(“掃碼槍連接發生錯誤!”));
// switch (e) {
// case QAbstractSocket::ConnectionRefusedError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”The connection was refused by the peer (or timed out)”);
// break;
// case QAbstractSocket::RemoteHostClosedError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”The remote host closed the connection”);
// break;
// case QAbstractSocket::HostNotFoundError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”The host address was not found.”);
// break;
// case QAbstractSocket::SocketAccessError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”The socket operation failed because the application lacked the required privileges”);
// break;
// case QAbstractSocket::SocketTimeoutError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”The socket operation timed out.”);
// break;
// case QAbstractSocket::DatagramTooLargeError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”The datagram was larger than the operating system’s limit (which can be as low as 8192 bytes).”);
// break;
// case QAbstractSocket::NetworkError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”An error occurred with the network (e.g., the network cable was accidentally plugged out).”);
// break;
// case QAbstractSocket::AddressInUseError:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”The address specified to QAbstractSocket::bind() is already in use and was set to be exclusive.”);
// break;
// default:
// QMessageBox::warning(qobject_cast<QDialog *> (this->parent()),”error”,”An unidentified error occurred.”);
// break;
// }
}
QString CodeReader::getCodedata() const
{
return codedata;
}
void CodeReader::setCodedata(const QString &value)
{
codedata = value;
}
/**
- @brief CodeReader::Init
- init codereader
*/
void CodeReader::Init()
{
ststus = false;
client = new QTcpSocket(this);
connect(client,SIGNAL(connected()),this,SLOT(doConnectClient()));
connect(client,SIGNAL(disconnected()),this,SLOT(doDisconnectClient()));
connect(client,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(doClientStateChange(QAbstractSocket::SocketState)));
connect(client,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(doClientSocketError(QAbstractSocket::SocketError)));
connect(client,SIGNAL(readyRead()),this,SLOT(doClientReadReady()));
}`
3.工程目錄如下:
由於程式碼量較大,這裡就不一一列出來了,有需求源碼的朋友可以加我微信:x241602.