, чтобы лучше понять связь через последовательный порт, я пытаюсь написать пример кода, где в Matlab работает цикл, который непрерывно отправляет данные на последовательный порт, в то время как скрипт Python, работающий на той же машине Windows, слушает этот порт,затем получает и печатает все полученные данные.
В 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 part работает, так как печатает «run» каждую секунду.
Прослушиватель 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, так какон посылает информацию ему, но я не понимаю, почему это проблема. Разве это не должно быть хорошо, если одна программа отправляет данные в нее, а другая получает данные из нее?
С уважением.