IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Qt 基恩士PLC EtherNet/IP 单元上位链路通信功能TCP实现 -> 正文阅读

[网络协议]Qt 基恩士PLC EtherNet/IP 单元上位链路通信功能TCP实现

序言

老实说,对于这些设备通信的,只有没写过的才会觉得无从下手和难,一旦了解了,也就那么一回事而已。本来想写一些TCP/UDP的功能,但是奈何这类太多了,写了没意思。

环境

Android
Qt5.12——armeabi-v7a
KV-EP21V——EtherNet/IP 单元
注:该功能实现可跨平台,只要与EtherNet/IP 单元处于同一局域网下即可。

功能实现原理

在终端(PC)创建通信程序,然后终端(PC)通过以太网向KV-EP21V发送命令,并通过以太网接收EtherNet/IP单元返回的响应,这样可读写CPU单元的数据、监控其运行状态。
通信时,PLC(包括EtherNet/IP单元)为服务器,PC等终端为客户端。服务器从客户端接收命令,并自动向客户端返回响应。
上位链路通信支持TCP/IP和UDP/IP两种通信协议。

通俗来说,就算Qt上设个TCP/UDP客户端,连接EtherNet/IP 单元自带的TCP/UDP服务器即可,本文以TCP连接为例。

IP地址需要自行察看,但默认192.168.0.10,端口号默认8501

源码

//carData是我写的类似d指针的东西,不清楚d指针的可以只看其属性即可。

carData.networkIP = QHostAddress("192.168.0.10");	
carData.networkPort = 8501;
carData.networkTcpSocket.connectToHost(carData.networkIP,carData.networkPort);
connect( &carData.networkTcpSocket, &QTcpSocket::connected, this, &WindowDialog::connectSuccessDisplay, Qt::UniqueConnection);
connect( &carData.networkTcpSocket, &QTcpSocket::disconnected, this, &WindowDialog::connectErrorDisplay, Qt::UniqueConnection);
connect( &carData.networkTcpSocket, &QTcpSocket::readyRead, this, &WindowDialog::plcInforFeedback, Qt::UniqueConnection);


void WindowDialog::connectSuccessDisplay()
{
	...
}

void WindowDialog::connectErrorDisplay()
{
	...
}

void WindowDialog::plcInforFeedback()
{
    QByteArray feedbackInfor = carData.networkTcpSocket.readAll();		//读取
    ...反馈的信息处理...
}

void WindowDialog::readValue()
{
	QString JOGPlusFeedbackString = "RD DM5012\r";

    carData.networkTcpSocket.write( JOGPlusFeedbackString.toUtf8());	//写入
}

值得注意的是,发送命令给EtherNet/IP 单元时,要知道EtherNet/IP 单元只识别ASCII码,其他编码的命令会强行当ASCII码来识别。

所以要将QString的命令转化为UTF-8再发送过去,有人可能有些疑惑,我来解释下。

命令的编码问题

QString内部是以Unicode编码存储,Unicode以2个字节表示一个字符,而ASCII码以1个字节表示一个字符。

当写好的命令交以Unicode表示,并以ASCII码接受,那么这接受的编码命令应该是词不达意的。

UTF-8编码是“可变长编码”,以1-4个字节表示一个字符,其中单个字符时,字节第一位是0,后面为表示字符的二进制。

在这种情况下,常规ASCII码的表示范围就刚好符合UTF-8。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:12:53  更:2022-05-14 10:14:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:22:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码