如何从 LabView 代码创建 Python 代码

问题描述 投票:0回答:1

我尝试重建一个在 LabView 中制作但使用 python 的应用程序。 代码应通过 TCP/IP 向气候记录器发送命令,记录器应做出响应。 我从一位同事那里得到了代码,但无法帮助我“翻译”它,因为他不知道代码到底是做什么的,他是从另一个人那里收到的...... 这是LabView代码部分的图片,我看不懂。

代码发送某种数组,但在发送数组之前使用了 u8 函数,根据我的研究,它将字符串数组转换为位数组。然后接收另一个数组并从中计算最终结果。我的问题是我只收到一个空数组。我认为这是因为我不知道如何发送正确的命令。这是我到目前为止所拥有的:

import socket
import os
import codecs

TCP_IP="172.21.23.56" #THESE ARE JUST RANDOM NUMBERS 
TCP_PORT=52015 #THESE ARE JUST RANDOM NUMBERS 
BUFFER_SIZE=1024

# command arrays for climat logger
#tmp_cmd = [1,16,0,0,0,0,4,2,35,16,100,0,3,10,173,4]; THIS WAS MY FIRST TRY; JUST SENDING THE ARRAY TO THE CLIENT
tmp_cmd = "116000042351610003101734"
byte_string = bytes.fromhex(tmp_cmd) 

# initializing socket and connecting with climat logger
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))


# sending command array for air temperature, receiving and processing answer
s.send(byte_string)
data = s.recv(BUFFER_SIZE)
print(sys.getsizeof(data))
tmp=((data[14]+data[15]*100)+data[16]*10000)+data[17]*1000000
print(tmp)
python tcp labview
1个回答
0
投票

这两个数组常量是数值数组。每个都被传递到一个 Byte Array to String 节点(有一条深蓝色线进入其中,一条粉红色线离开它),并且输入上没有点表明正在发生类型强制转换,因此类型数值数组的数量必须为 U8 即每个值都是 8 位字节。

令人困惑的是,看起来好像

Temperature Command
数组常量被设置为以十进制显示其值(因为有一个 3 位值,不能是十六进制的单个字节),但
Air Pressure Command
数组常量被设置以十六进制显示其值(因为有一个值
2C
)。如果我创建了这段代码,我会设置这些常量来显示它们的基数,以明确这一点。

所以我认为第一个命令,转换为十六进制表示(在我的脑海中,请自行验证),是字节序列

01 10 00 00 00 00 04 02 23 10 64 00 03 0A AC 04

第二个命令是字节序列

01 10 00 00 00 00 04 02 23 10 2C 01 03 66 74 04

LabVIEW 代码发送这些字节后,还会发送一个行尾常量,在 Windows 上为 CR LF,即

0D 0A

然后等待响应,读取最多 22 个字节或直到收到 CR LF(以先到者为准),超时为 5000 毫秒。提取响应中索引 14、15、16 和 17 处的字节值(从 0 开始计数)。

有了这些信息,您应该能够在 Python 中重现代码。

© www.soinside.com 2019 - 2024. All rights reserved.