APP下载

基于Socket 通信的流水号刻印设备的开发与应用

2021-03-05邓明利

科技创新导报 2021年27期
关键词:PC机组态通讯

邓明利

摘要:随着工业大数据、信息化、数字化发展,计算机实现人机交互功能的重要性、实用性也越来越突出。而以Socket通讯方式实现对计算机PC与激光刻印控制器的通讯,具有传输速度快、数据传输稳定、性价比高等优点,采用开源的SQLite3数据库作为数据存储,有体积小、访问速度快等优点。本文重点介绍以Socket通讯方式实现零件毛坯流水号刻印设备的开发与应用。

关键词: Socket通讯激光刻印设备SQLite3数据库计算机

Development and Application of Serial Number Printing Equipment Based on Socket Communication

DENG Mingli

(GAC Motor Co, Ltd., Guangzhou,Guangdong Province,511434 China)

Abstract: With the development of industrial big data, informatization and digitization, the importance and practicability of human-computer interaction are becoming more and more prominent. The Socket communication between computer PC and laser engraving controller has the advantages of fast transmission speed, stable data transmission and high cost performance. The open source SQLite3 database is used as data storage, which has the advantages of small volume and fast access speed. This paper focuses on the development and application of part blank serial number printing equipment by socket communication.

Key Words: Socket communication;Laser printing equipment; SQLite3 database; Computer

1 概述

本文主要介绍采用C++语言为基础开发一套基于Socket通讯的控制软件,实现普通PC机与激光刻印控制器的完美组态,实现工件毛坯的流水号按工艺要求自动刻印流水号。根据软件的唯一算法,保障刻印流水號的不重号。作业记录与SQLite3数据库表同步更新保存,对工件流动提供了有效的追溯功能[1]。

2  硬件构成

系统主要由计算机、IPG激光控制器和振镜构成,如图1所示。

3  软件部分

采用C++语言为基础开发人机对话控制软件,基于Windows桌面系统环境,采用C++语言及SQLite3数据库开发而成,实现了普通PC机与激光刻印控制器完美组态。有刻印工艺参数修改、刻印历史数据查询等功能。采用密码窗口登陆安全保护机制,有效地保护了设备数据安全。本软件采用数据唯一算法,保证刻印流水号不重号。作业记录与数据库表同步更新保存,对工件流动提供了有效的追溯功能[2-4]。

4  Socket通讯介绍

Socket也叫套接字,用来实现网络通信(如图2)。socekt是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个门面模式,它把复杂的tcp/ip协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议,两个套接字进程运行在同一个机器上,可以通过访问同一个文件系统间接完成通信。本项目中激光刻印控制器作为客户机套接字,PC机作为服务器套接字,进行信息的传递处理[5-7]。

5  相关程序源代码

5.1 SQLite3数据库的连接关键代码

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

db.setDatabaseName(QApplication::applicationDirPath()+"/LGDKJ.dat");

//如果本目录下没有该文件,则会在本目录下生成,否则连接该文件

if (!db.open()) {

QMessageBox::warning(0, QObject::tr("Database Error"),

db.lastError().text());

returnfalse;

}

5.2  建立Socket通讯关键代码

m_tcpServer = new QTcpServer(this);

client_tcpSocket= new QTcpSocket(this);

tcpClient_list= new QList<QTcpSocket*>; if( m_tcpServer->listen(QHostAddress::Any,(Sport.toInt()))==true)

//监听任何连上8888端口的ip             connect(m_tcpServer,&QTcpServer::newConnection,this,[=](){

client_tcpSocket = m_tcpServer->nextPendingConnection();

//得到每个连进来的socke

tcpClient_list->append( client_tcpSocket);

//记录连接的socket

QString  ip = client_tcpSocket ->peerAddress().toString();

qint16 port = client_tcpSocket->peerPort();

QString info1 =QString("客户端[%1:%2]连接成功").arg(ip).arg(port);

//连接的socket的IP,port                               connect(client_tcpSocket,&QTcpSocket::readyRead,this,&KYSYSTEM::readMessage);

//有可读的信息,触发读函数槽

connect(client_tcpSocket,&QTcpSocket::disconnected,this,[=](){

//主动和客户端断开连接

QString info1 =QString("客户端[%1:%2]断开连接").arg(ip).arg(port);

//连接的socket的IP,port

Socket_Disconnected();

});

});

}

else {QMessageBox::information(this,tr("错误提示:"), tr("服务器创建失败,请检查8888号端口是否被占用!"),QMessageBox::Ok);

}

}

5.3  流水号唯一算法代码

void KYSYSTEM:: getSNO()//获取流水号

{

QSqlQuery query4;

query4.exec(QString("select max(Ser_No) from oplist where PT_day ='%1'") .arg(strD));

if (query4.next())

{

int MaxNO =query4.value(0).toInt();

SerNO=MaxNO+1;

}

}

5.4  PC机通过socket通讯将刻印码发给激光控制器

void KYSYSTEM:: readMessage()

{

for(int i=0;i<tcpClient_list->size();i++){

//獲取当前套接字是否有数据

if(tcpClient_list->at(i)->bytesAvailable()){

QByteArray buf=tcpClient_list->at(i)->readAll();

QString ss=QVariant(buf).toString();

if (ss=="TCP:Give me string")//(ss=="Marking finish\r\n")

{

QString str2 =PTmes+"\r\n";

tcpClient_list->at(i)->write(str2.toUtf8().data());

}

}

5.5  刻印内容发送完毕后关闭socket通讯

void KYSYSTEM::Socket_Disconnected()

{

for(int i = 0; i < tcpClient_list->size(); i++)

{

QTcpSocket *item = tcpClient_list->at(i);

int temp = item->socketDescriptor();

if(-1 == temp)

{

tcpClient_list->removeAt(i);

//如果有客户端断开连接, 就将列表中的套接字删除

item->deleteLater();

return;

}

}

return;

}

6结语

本项目通过Socket通讯实现了普通PC机与激光刻印控制器完美组态,通过软件内部唯一流水号算法,实时将刻印信息发给激光控制器完成特定流水号刻印工作。本文重点介绍了Socket通讯的原理、共享了关键源代码以及在本项目中的实例应用,充分展现了该通讯方式的稳定性、实用性和简便性。

参考文献

[1]傅玥,蔡兴富.Socket网络编程-基于TCP协议或UDP协议[J].中国新通信,2020,22(8):57-58.

[2]蒋达.基于Socket的网络接口编程[J].办公自动化,2018,23(23):29-30,32.

[3]林志红.Android Socket网络编程体会[J].科学技术创新,2017(28):140-141.

[4]练坤玉.订单型纺织生产计划调度系统设计与应用研究[D].合肥:合肥工业大学,2019.

[5]薛哲,张功学,何凯,等.基于Socket通信的AGV上位机控制系统[J].现代机械,2021(5):99-102.

[6]陈敬静.SQLite数据库研究与可视化[D].南京:南京邮电大学,2020.

[7]崔天鑫.SQLite与Access在JDBC编程中的对比研究[J].电脑编程技巧与维护,2019(11):4-6,15.

1896501186274

猜你喜欢

PC机组态通讯
《茶叶通讯》简介
《茶叶通讯》简介
通讯报道
基于PLC及组态技术的恒温控制系统开发探讨
基于PC机与单片机的多机通信技术及抗干扰方法
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
基于PLC和组态的智能电动拧紧系统
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
通讯简史