Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SIMULINK和PYTHON之间的TCP/IP_Python_Simulink_Tcp Ip - Fatal编程技术网

SIMULINK和PYTHON之间的TCP/IP

SIMULINK和PYTHON之间的TCP/IP,python,simulink,tcp-ip,Python,Simulink,Tcp Ip,我正在尝试在SIMULINK(客户端)和PYTHON(服务器)之间建立TCP/IP连接。我尝试在循环中发送变量的值。但我在SIMULINK中收到的值是一些随机值(如2.5e-09或其他),与我发送的值无关。我尝试过在SIMULINK端更改数据类型,但没有成功 以下是PYTHON中的代码: import socket serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serversocket.bind(('local

我正在尝试在SIMULINK(客户端)和PYTHON(服务器)之间建立TCP/IP连接。我尝试在循环中发送变量的值。但我在SIMULINK中收到的值是一些随机值(如2.5e-09或其他),与我发送的值无关。我尝试过在SIMULINK端更改数据类型,但没有成功

以下是PYTHON中的代码:

import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serversocket.bind(('localhost',30001))
serversocket.listen(5)
(clientsocket, address) = serversocket.accept()

for i in range(0,50):
    msg1='%0.1f\n' %(float(1.1+i))
    clientsocket.send(msg1.encode('utf-8'))

clientsocket.close()
以下是我的simulink块和块参数设置:


有人能帮忙吗?

Python服务器没有发送客户端期望的大端双精度码。相反,它发送一系列以新行结尾的字符串:
1.1\n
2.1\n
,…,
50.1\n

您可以使用该模块将浮点格式化为大端双精度浮点,以便通过连接进行传输

import struct

for i in range(50):
    msg1 = struct.pack('>d', 1.1+i)
    clientsocket.send(msg1)
不需要对数据进行UTF8编码,因为它是应该发送的二进制值

接受要打包的格式字符串和值。在这种情况下,格式字符串
>d
表示大端双精度。返回值是表示压缩数据的字节对象。例如,浮点数20.1的压缩值为:

>>> struct.pack('>d', 20.1)
b'@4\x19\x99\x99\x99\x99\x9a'

如您所见,double的大小是8字节。您可能需要将其设置为客户端中的数据大小。

是否可以尝试使用来编码数据?还是Simulink明确要求utf-8字符串?struct module完成了这项工作!非常感谢@毒蛇