如何用Socket Device通讯

本文详细介绍了如何在 E-Prime 中使用 Socket Device 进行通信,包括添加设备、设置 IP 地址、端口等信息,以及 UDP 和 TCP 的区别。提供了发送和接收信号的方法,如 WriteBytes、WriteInteger、WriteLong、WriteString 以及相应的读取方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何用Socket Device通讯

本文适用于:

E-Prime 3.0

E-Prime 2.0

E-Prime 1.x

我使用什么设备?
Socket 是计算机上的物理接口,可以将信息从一个对象发送到另一个对象。套接字可以发送和接收信息包。可以将 Socket 设备视为与以太网卡或 WiFi 的连接。

有关此设备的特定信息
需要了解一些信息才能通过 E-Prime 中的套接字进行通信。需要 IP 地址、端口号、连接类型和字节顺序。所有这些信息都反映了 E-Prime 中套接字设备的必填字段。要查找此信息,请了解 Socket 连接到的位置、连接类型和字节顺序。此外,确保存在有效连接,并且在 E-Prime 中测试之前,您可以在命令提示符中 Ping 套接字的两个方向。

使用套接字通信时,了解两种类型的 Internet 协议 (IP) 流量之间的区别很重要。
 
第一个是 UDP 传输(用户数据报协议或通用数据报协议)。UDP 不保证数据包的传递,如果传递了数据包,也不能保证传递的顺序正确。UDP TCP 快,但不保证实际发送预期数据。TCP 速度较慢,但​​可以保证接收到数据。UDP 无连接的。如果使用 UDP,请准备好处理丢失的数据报、重复的数据报或顺序不正确的数据报。还必须处理错误检测和纠正。


第二种是TCP传输(Transmission Control Protocol)。对于 TCP,如果一个数据包被丢弃,但下一个数据包通过了,内核将保留该数据包,直到可以重新发送更早的数据包。这是因为 TCP 是一种有保证的、有序的、流式传输的协议。这意味着数据在等待 TCP 超时和重新传输时位于内核中。对于丢失的数据包,这至少需要 3 秒。由于此限制,UDP 通常更适合实时低延迟应用程序。

E-Prime 中添加插座设备

要在 E-Prime 中使用 Socket Device,需要将其添加到 E-Prime 实验中。要添加套接字设备,请执行以下步骤:

  1. 打开 E-Studio 结构窗口顶部的实验对象。 
  2. 单击设备选项卡。 
  3. 单击窗口底部的添加...”按钮。
  4. 点击Socket Device,点击OK按钮添加设备。

将套接字设备添加到实验后,需要使用上一节中指定的信息(即 IP 地址、端口号、连接类型和字节)编辑设备的属性。为此,选择套接字设备并单击设备选项卡底部的编辑...”按钮。配置属性后,套接字设备将准备好发送/接收信号。

 注意:此设备在 E-Prime 1.x 中不存在。请参阅https://support.pstnet.com/hc/en-us/articles/229359567

如何使用套接字设备
发送信号有几种方法可以将信号发送到套接字。在开始编写脚本或在实验中添加设备以发送信号之前,确定要发送的信号类型非常重要。首先,考虑您正在与什么设备通信。有几种方法可以将信息发送到 Socket。下表显示了信号的所有可能性以及简要说明。 

 Socket 信息不仅可以通过标准的脚本方式发送,还可以通过对象的任务事件发送。为此,必须将事件添加到 E-Object。然后,需要添加一个 Socket Task 和一个 Action(例如,WritieLong)。最后,需要指定任务事件的参数。

 WriteBytes
使用 WriteBytes 命令时要牢记的最重要的一点是它会在 Socket 设备上发送一个整数数组。与一次只发送一个 Integer Long 信息的 WriteInteger WriteLong 方法不同,此方法一次发送 Integer 数据的多个实例。

 语法
SocketDevice.WriteBytes arrData, nCount

  • arrData——这个参数是要发送到套接字设备的整数数组。
  • nCount – 此参数是可选的,表示应发送到套接字的数组中元素的数量。如果排除此参数,E-Prime 会将整个数组的数据值发送到套接字设备。

例子

 此示例演示如何将 255 信号发送到名为 Socket 的套接字设备。在此示例中,nData 参数是 Integer 数据类型。只发送一个字节。也可以使用变量或使用“c.GetAttrib”语句将属性写入套接字。

 

WriteInteger
此命令仅在套接字上写入一个整数值的信息。这个整数是两个字节的数据。

语法
SocketDevice.WriteInteger nData

  • nData——这个参数是要写入计算机套接字的整数。此信息可以是变量(如所示)、属性或整数。

例子

 此示例演示如何将 255 信号发送到名为 Socket 的套接字设备。在本例中,nData 参数是一个 Integer,但也可以使用变量或使用“c.GetAttrib”语句将属性写入 Socket
 

WriteLong
将一个 Long 值的数据写入 Socket。长数据表示四个字节的数据。

语法
SocketDevice.WriteLong nData

  • nData——这个参数是要写入计算机套接字的整数。此信息可以是变量(如所示)、属性或整数。

例子

 此示例演示如何将 854,775,807 信号发送到名为 Socket 的套接字设备。在此示例中,nData 参数是一个 Long,但也可以使用变量或使用“c.GetAttrib”语句将属性写入 Socket

 

WriteString
套接字的独特之处在于,您实际上可以使用 E-Prime 将有价值信息的字符串写入外部设备。

语法
SocketDevice.WriteString StrData, nCount

  • StrData – 此参数是通过套接字发送的字符串数据。此必需参数需要包含在引号内。这就是 E-Prime 确定信号是字符串数据的方式。
  • nCount - 这个参数是可选的,它决定了 String 中有多少个字符将被发送到 Socket

例子

 此示例演示如何将 854,775,807 信号发送到名为 Socket 的套接字设备。在此示例中,nData 参数是一个 Long,但也可以使用变量或使用“c.GetAttrib”语句将属性写入 Socket

 

WriteString
套接字的独特之处在于,您实际上可以使用 E-Prime 将有价值信息的字符串写入外部设备。

语法
SocketDevice.WriteString StrData, nCount

  • StrData – 此参数是通过套接字发送的字符串数据。此必需参数需要包含在引号内。这就是 E-Prime 确定信号是字符串数据的方式。
  • nCount - 这个参数是可选的,它决定了 String 中有多少个字符将被发送到 Socket

例子

 在这个例子中,字符串数据被发送到一个名为 Socket 的套接字设备。此示例包含 nCount 参数。在这种情况下,只有此字符串的前 4 个字符通过套接字发送。这样,信号显示为“Send”而不是完整的“Send DoNotSend”字符串。

 

如何使用套接字设备接收信号
E-Prime 的一个强大功能是它不仅可以向外部设备发送信号,还可以接收信号。就像向外部设备发送信号一样,重要的是要记住要从该外部设备接收什么信号。这在从外部设备接收信号时尤为重要,因为 E-Prime 应该确切地知道它应该监听什么信号。下表显示了信号的所有可能性以及对这些信号的简要描述。

 ReadBytes

此方法从 Socket 的输入提示中读取整数数据并将其加载到数组中。该数组的每个元素代表一个字节的数据,这些数据将被读入实验。如果请求的字节数多于可用的字节数,则仅可用数组中的元素填充数据。

 句法

nRead = SocketDevice.ReadBytes (arrData, nCount)

  • nRead – 是从 WriteBytes 方法返回的值,表示已读入数组的实际字节数。
  • arrData – 一个整数数组,表示将从 Socket 的输入提示中读取的数据写入的数组。
  • nCount - 一个可选参数,指定要存储到数组中的字节数。如果省略此可选参数,则需要整个数组大小。

例子

 这个例子首先定义了两个重要的变量“nRead”“arrData”“nRead”变量保存写入套接字的字节数,“arrData”变量是一个数组,保存发送到套接字中的值。此示例的其余部分演示了如何使用这些参数中的每一个来读取发送到套接字的数据字节。由于语句末尾的“nCount”参数,此示例仅读取进入套接字的实例 01 2

 

ReadByte
该方法只从 Socket 的输入队列中读取一个整数到实验中的一个变量中。如果进入套接字设备的整数小于所需的两个字节,则只接收一个字节。

语法
nRead = SocketDevice.ReadInteger( nData)

  • nRead – 返回一个整数,表示已从 Socket 的输入队列中读取的实际字节数。
  • nData – 返回已写入套接字输入队列的整数。

例子

 这个例子定义了两个变量。第一个变量是“nData”。此变量表示外部设备发送到 E-Prime 的整数数据。“nRead”变量保存已通过套接字发送的信号的字节数。该示例的其余部分演示了如何使用这些变量来读取通过套接字发送的整数信息。 

 

ReadInteger
该方法只从 Socket 的输入队列中读取一个整数到实验中的一个变量中。如果进入 Socket 设备的整数小于所需的两个字节,则只接收一个字节。

语法
nRead = SocketDevice.ReadInteger( nData)

  • nRead – 返回一个整数,表示已从 Socket 的输入队列中读取的实际字节数。
  • nData – 返回已写入套接字输入队列的整数。

例子

 首先,声明两个变量。第一个变量是“nData”。此变量表示外部设备发送到 E-Prime Long 数据。“nRead”变量保存已通过套接字发送的信号的字节数。该示例的其余部分演示了如何使用这些变量来读取通过套接字发送的 Long 信息。 

ReadString
ReadString 方法从套接字设备的输入队列中读取字节串。发送的字符串中的每个字符代表从套接字设备的输入队列中读取的一个字节。与此方法一起,还有机会使用 Mid Asc 函数来返回从套接字设备的输入队列中读取的数据的整数表示。

语法
nRead = SocketDevice.ReadString( strData, nCount)

  • nRead – 返回一个整数,表示已从 Socket 的输入队列中读取的实际字节数。
  • strData – 是一个整数数组,表示存储读取数据的数组。
  • nCount——一个可选的整数,指定要检索的字节数。如果省略,则要求 1K1024 字节)

例子

示例中的第一个变量是“strData”。这个变量是一个数组,保存着从 Socket 发送过来的 String 数据。在本例中,它包含 5 个字节的数据。“nRead”变量保存已通过套接字发送的信号的字节数。该示例的其余部分演示了如何使用这些变量来读取通过套接字发送的字符串信息。请注意,此示例中省略了 nCount 参数。这意味着 E-Prime 从套接字的输入队列中请求大约 1024 个字节。

原文:https://support.pstnet.com/hc/en-us/articles/360020673193-DEVICE-How-To-Socket-Device-Communication-25288-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值