pyserial / Modbus - устранение неполадок "Нет связи с прибором" - PullRequest
0 голосов
/ 18 сентября 2018

Beaglebone Black Wireless: Ubuntu 16.04,

Компьютер: Ubuntu 16.04,

Python 3.5.2

Я пытаюсь связаться с устройством через Modbus с помощью BeagleboneЧерный.Я читал о людях, которые делают то же самое с USB / RS485 ключом, используя minimalmodbus.Я пытался изменить настройки;каждая возможная скорость передачи, более короткий кабель и т. д. В Beagle должно быть что-то, что необходимо настроить / неправильно настроить для этого типа работы.

Код

#!/usr/bin/env python
# -*- coding; utf-8 -*-

import minimalmodbus
import serial
import time

i = minimalmodbus.Instrument(port='/dev/ttyUSB0', slaveaddress=1, mode='rtu')
i.serial.baudrate = 115200
i.serial.bytesize = 8
i.serial.parity = serial.PARITY_EVEN
i.serial.stopbits = 1
i.serial.timeout = 1
i.handle_local_echo = None

while True:
    try:
        print(i.read_registers(2008, 2, 3))
    except serial.serialutil.SerialException as error:
        print(error)
    except FileNotFoundError as error2:
        print(error2)
    except IOError as error3:
        print(error3)
    time.sleep(1)

...используя USB / RS485 ключ.Использование этой комбинации ключа и кода дает отличные результаты на моем компьютере (за последние 4 месяца), но не на Beagle сегодня.

Компьютер : получено сообщение:

[0, 0]

Beagle : Получена ошибка:

IOError: No communication with instrument (no answer)

Я ищу возможные пути устранения неполадок.Я проверил, что кабель не слишком длинный, и USB-ключ в порядке.Я также исключил любые проблемы с кодом.

Изменить 1: Забыл включить lsusb и ls /dev/ttyUSB*:

Bus 002 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 002 Device 003: ID 04d9:0024 Holtek Semiconductor, Inc.
Bus 002 Device 002: ID 0409:0059 NEC Corp. HighSpeed Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

и

/dev/ttyUSB0

Редактировать 2:

Я могу выполнить настройку обратной связи, используя pyserial и закорачивая клеммы Rxd и Txd + и -.

Редактировать 3:

Я перепробовал все возможные конфигурации проводки.На компьютере работает только одна конфигурация (Tx + -> A и Tx- -> B).При использовании функции отладки minimalmodbus я вижу, что одно и то же сообщение отправляется на устройство на Beagle и на компьютер ('\x01\x03\x07Ø\x00\x02ED' (01 03 07 D8 00 02 45 44) ).Компьютер получает ответ, а Beagle - нет.

У Beagle нет проблем с подключением адаптера к /dev/ttyUSB0.

Редактировать 4:

@ Карло Занокко запросилвыход ls /dev/ | grep tty

tty
tty0
tty1
tty10
tty11
tty12
tty13
tty14
tty15
tty16
tty17
tty18
tty19
tty2
tty20
tty21
tty22
tty23
tty24
tty25
tty26
tty27
tty28
tty29
tty3
tty30
tty31
tty32
tty33
tty34
tty35
tty36
tty37
tty38
tty39
tty4
tty40
tty41
tty42
tty43
tty44
tty45
tty46
tty47
tty48
tty49
tty5
tty50
tty51
tty52
tty53
tty54
tty55
tty56
tty57
tty58
tty59
tty6
tty60
tty61
tty62
tty63
tty7
tty8
tty9
ttyGS0
ttyS0
ttyS1
ttyS2
ttyS3
ttyS4
ttyS5
ttyUSB0

Редактировать 5:

Выход stty -F /dev/ttyUSB0 -a:

speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 0; time = 0;
parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
-imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl
-echoke -flusho -extproc

1 Ответ

0 голосов
/ 25 сентября 2018

У меня возникли те же проблемы, и оказалось, что это проблема завершения и управления потоком .

Я пробовал разные USB-ключи, все они работали с ПК и маками, и много разныхконфигурации на BeagleBone, но ничего не помогло.

Недорогие USB-ключи хорошо работают с ПК, но с микроконтроллерами, такими как BeagleBone, вам нужно что-то, что лучше обрабатывает спецификации шины.

Я обнаружил, что некоторые простые и недорогие платы TTL от RS232 до RS485 прекрасно работают без какой-либо специальной конфигурации на стороне BeagleBone, поскольку они автоматически управляют управлением потоком.Вы можете искать RS485 с автоматическим управлением потоком на Ebay или аналогичных веб-сайтах.

Поскольку последовательный порт по умолчанию на BeagleBone уже подключен к системной консоли, вам необходимо включить другойUART путем правильного редактирования файла /boot/uboot/uEnv.txt.

Затем необходимо подключить источник питания 5 В и GND (доступно на контактах P9_5 и P9_1) и правильные последовательные контакты (например, P9_26и P9_24, если вы включили UART1) для разъемов 5V, GND, RX и TX адаптера (не связывайтесь с RTS и CTS, поскольку адаптер будет управлять ими для вас).

В вашем коде измените портимя для нового последовательного порта (например, / dev / ttyO1, если вы включили UART1).

Чтобы легко отлаживать код, вы можете подключить USB-ключ на ПК и адаптер на BeagleBone через провода RS485 иоткрыть две последовательные клеммы.

...