Qt 基恩士PLC EtherNet/IP 单元上位链路通信功能TCP实现

本文介绍了如何在Qt5.12环境下,使用TCP/IP协议与EtherNet/IP单元进行通信。通过创建TCP客户端连接到 EtherNet/IP单元的服务器,实现数据读写和状态监控。重点讨论了命令编码问题,由于EtherNet/IP单元仅识别ASCII码,因此需要将QString命令转换为UTF-8再发送。提供了源码示例,展示了连接成功、断开和数据反馈的处理方法。
摘要由CSDN通过智能技术生成

序言

老实说,对于这些设备通信的,只有没写过的才会觉得无从下手和难,一旦了解了,也就那么一回事而已。本来想写一些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。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 基恩上位链路协议可以读写double类型的数据。在基恩上位链路协议中,通过使用特定的功能码和数据格式,我们可以对double类型的数据进行读取和写入。 要读取double类型的数据,我们首先需要知道要读取的数据的地址和寄存器数量。然后,我们可以使用读取功能码发送读取指令给基恩设备。基恩设备会根据指令从相应的地址中读取double类型的数据,并将其返回给我们。我们可以通过解析返回的数据来获取我们需要的double类型的值。 如果要写入double类型的数据,我们同样需要知道要写入的数据的地址和值。我们使用写入功能码发送写入指令给基恩设备,并将地址和新的double类型的值一起发送。基恩设备会将这个新的double类型的值写入到指定的地址中。我们可以通过读取这个地址来验证写入操作是否成功。 在进行读写double类型的数据时,我们需要确保数据的位数和字节顺序的兼容性。另外,我们还需要了解基恩设备的详细通信规范和协议要求,以确保正确地读写double类型的数据。 总之,基恩上位链路协议可以方便地读写double类型的数据。通过合适的功能码和数据格式,我们可以轻松地与基恩设备进行通信,并读取和写入double类型的值。 ### 回答2: 基恩上位链路协议是一种通信协议,用于上位机与基恩控制器之间的数据交互。而读写double类型的数据是指在上位机和基恩控制器之间传输和处理双精度浮点数数据。 在使用基恩上位链路协议读写double类型数据时,首先需要确保上位机和基恩控制器之间建立了稳定的通信连接。通常情况下,可以使用串行通信或者以太网通信实现。 一般情况下,上位机发起读写double类型数据的操作,需要发送相应的数据请求命令给基恩控制器。这些命令包含了要读取或写入的double类型数据的地址或者索引。 基恩控制器接收到读写命令后,会根据命令中指定的地址或索引访问相应的内存或寄存器,以进行数据的读取或写入操作。对于需要读取double类型数据的操作,基恩控制器会将相应的数据传输给上位机。而对于写入double类型数据的操作,上位机会将数据发送给基恩控制器,以便其进行存储或后续的处理。 在读写double类型数据的过程中,需要确保上位机和基恩控制器使用相同的数据格式,以免数据解析出现错误。一般而言,常见的数据格式是IEEE 754标准双精度浮点数格式。另外,还需要注意在数据传输过程中的精度和精度损失问题,避免数据的失真或截断。 总之,基恩上位链路协议可以实现上位机与基恩控制器之间的双精度浮点数数据的读写操作。这种通信方式可以满足工业自动化或机器人控制等领域对于高精度浮点数数据处理的需求。 ### 回答3: 基恩上位链路协议是一种常用于自动化控制领域的通信协议,它用于实现上位机与下位机之间的数据传输和交互。在基恩上位链路协议中,读写double类型的数据是常见的操作之一。 要进行double类型数据的读写,首先需要在上位机的程序中进行相应的配置和设置。在读取double类型数据时,上位机发送一个读取指令给下位机,指定要读取的double类型数据的地址。下位机接收到指令后,将对应地址处的double类型数据发送给上位机。上位机接收到数据后进行相应处理,可以在屏幕上显示、保存到文件中或用于计算等。 在写入double类型数据时,上位机需要发送一个写入指令给下位机,指定要写入的double类型数据的地址和数值。下位机接收到指令后将指定地址处的数据写入为指定的double类型数值。上位机可以通过反馈信息确认写入操作是否成功。 读写double类型数据在基恩上位链路协议中是通过特定的协议格式进行的。通常,读取和写入指令会包含数据的地址、长度和其他必要的信息。同时,基恩上位链路协议还支持批量读写操作,可以同时读取或写入多个double类型数据。 总而言之,基恩上位链路协议提供了读写double类型数据的功能,通过合适的指令和协议格式,上位机可以与下位机进行数据的交互,实现自动化控制系统中的数据传输和处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溪渣渣_梁世华

打赏?我甚至没有任何收费的章节

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值