无法通过串行端口将数据从Matlab发送到Python

时间:2019-10-09 21:06:13

标签: python-3.x matlab serial-port pyserial

为了更好地理解串行端口通信,我尝试编写一些示例代码,其中Matlab运行循环,该循环不断将数据发送到串行端口,而在同一Windows机器上运行的Python脚本侦听此端口,然后接收并打印任何接收到的数据。

在Matlab中,我编写了一个简单的循环,该循环将99个测试信号发送到端口COM1,

% Setup a serial port and open it
tep=serial("COM1", "Baudrate", 9600);
fopen(tep);

% this loop is supposed to send a number to a serial port repeatedly
n = 1; % counter variable
while n < 100
    fprintf(tep,"50"); % Send data to serial port
    n = n + 1;      % Counter variable
    pause(0.5)      % Sleep to make this loop run for a total of 50s0
    fprintf('run'); % Test output within matlab to check, whether it runs
end

% finally close the serial port
fclose(tep);
据我所知

,Matlab的这一部分工作正常,因为它每隔半秒钟就会打印一次“运行”。

Python侦听器:

import serial
import time
# set up the serial line same as in Matlab
ser = serial.Serial('COM1', 9600)
time.sleep(2)

# Read and record the data
data =[]                       # empty list to store the data
for i in range(50):
    b = ser.readline()         # read a byte string
    string_n = b.decode()  # decode byte string into Unicode  
    string = string_n.rstrip() # remove \n and \r
    flt = float(string)        # convert string to float
    print(flt)
    data.append(flt)           # add to the end of data list
    time.sleep(0.1)            # wait (sleep) 0.1 seconds

ser.close()

# show the data

for line in data:
    print(line)

在Python中运行脚本会导致以下错误:

serial.serialutil.SerialException: could not open port 'COM1': PermissionError(13, 'Zugriff verweigert', None, 5)

显然,Matlab已在使用该端口,因为它向其发送信息,但是我不明白,为什么会出现这个问题。一个程序向它发送数据而另一个程序从中接收数据不是很好吗?

亲切的问候。

1 个答案:

答案 0 :(得分:2)

恐怕您无法通过两个不同的进程连接到同一串行端口。

这意味着,如果您从Matlab打开串行端口进行写入,则无法从Python打开它进行读取。

串行端口旨在将数据从一台计算机发送到另一台计算机或设备,以在不同的应用程序之间不共享数据(这样做有更好的方法,例如写入文件或共享内存块)。

话虽如此,如果您想做的是出于调试目的或只是学习,您可能想研究com0com,它可以使您创建一对 virtual (软件)串口。这与将两个硬件(真实)串行端口相互连接相同。从现在开始,您有两个端口,您可以从一个端口发送Matlab的数据,而从另一个端口读取Python的数据。

这是有关串行端口的最经常出现的问题之一,因此您应该能够找到很多好的资源。您可能要启动here