MODBUS RS485 Raspberry Pi

ВВЕДЕНИЕ В Rs485/Modbus RTU:

RS-485 — это протокол асинхронной последовательной связи, который не требует часов. Он использует технику под названием дифференциальный сигнал для передачи двоичных данных с одного устройства на другое.

Метод дифференциального сигнала работает путем создания дифференциального напряжения с использованием положительных и отрицательных 5 В. Он обеспечивает полудуплексную связь при использовании двух проводов, а для полнодуплексной связи требуется 4 четырехпроводных провода.

Пакет данных 485 рупий:

Modbus RTU кодирует данные как двоичные и использует кодировку с обратным порядком байтов для 16-битных значений. Это означает, что старший байт 16-битного слова отправляется первым.

Предположим, что мы хотим прочитать регистр 1 нашего ведомого устройства Modbus
наш пакет данных будет выглядеть так

идентификатор раба 01

код функции 03

адрес первого регистра для чтения (2 байта) 00 01

количество регистров для чтения 00 01

контрольная сумма (2 байта) D5 CA

01 03 00 01 00 01 D5 CA

Ответ от раба будет выглядеть так

Идентификатор раба 01

Код функции 03

количество байт данных 02

значение регистра (2 байта) 00 01

контрольная сумма (2 байта) 25 CA

01 03 02 00 01 25 CA

Modbus Raspberry Pi Rs485:

Теперь мы увидим, как сделать протокол rs485 Modbus в raspberry pi без использования какой-либо библиотеки Modbus
Вместо этого мы будем использовать раздел rs485 последовательной библиотеки python.

Требуемые компоненты:
1: установлен Raspberry pi raspbian

2: USB к RS485

3: макс. 485 ттл до rs485

4: ведомое программное обеспечение pymodbus: https://sourceforge.net/projects/pymodslave/

Модуль Макс485

Проводка:

Max485 для малины pi:

Убедитесь, что DE и RE на max485 закорочены

MAX485 → Raspberry Pi

DI → GPIO14

DE RE →GPIO4

R0 →GPIO15(RX)

VCC → 5В

ЗАЗЕМЛЕНИЕ → ЗАЗЕМЛЕНИЕ

Usb rs485 с max485:

Usb485 → Макс.485

A →A

B →B

Программирование Raspberry Pi в качестве мастера с использованием Python

Включение контактов UART (последовательный порт) в Raspberry Pi: выделено жирным шрифтом

Перед использованием выводов UART в Raspberry Pi его необходимо включить. Выполните следующие шаги, чтобы включить контакты UART (последовательный) на плате Raspberry Pi.

1. Откройте терминал и введите sudo raspi-config.

2. Выберите параметры взаимодействия

3. Затем выберите серийный номер

4. Затем нажмите «Нет» (используется для отключения консоли Linux UART).

5. После этого выйдите из raspi-config

6. Перезагрузите Пи

Теперь последовательный порт готов к использованию.

Откройте Терминал и установите эти библиотеки:

sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-pil
sudo pip install RPi.GPIO
sudo apt-get install python- серийный
sudo pip установить серийный
sudo pip установить pyserial

Скопируйте следующий код в файл python на raspberry pi.

импорт серийный номер
импорт serial.rs485
импорт время
импорт RPi.GPIO как GPIO


TXDEN_1=7 # контакт включения передачи

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
/> GPIO.setup(TXDEN_1, GPIO.OUT, initial=GPIO.HIGH)


ser=serial.rs485.RS485(port='/dev/ttySC0',baudrate=9600,timeout=5,parity=serial.PARITY_EVEN)
ser.rs485_mode = serial.rs485.RS485Settings(rts_level_for_tx=False,
rts_level_for_rx=False ,
delay_before_tx=0.0,
delay_before_rx=-0.0)

SendFrame =b'\x01\ x03\x00\x02\x00\x01\x25\xCA' # данные в шестнадцатеричном формате в python, так как rs485 rtu использует данные в шестнадцатеричном кодировании


while True:
GPIO.output(TXDEN_1, GPIO.HIGH) #запись включена для отправки фрейма данных для чтения регистра
ser.write(SendFrame) #отправка фрейма данных
GPIO.output (TXDEN_1, GPIO.LOW) #read включен для получения ответа от ведомого программного обеспечения pymodbus
coming_data = ser.inWaiting() #проверка буфера с доступными данными
print «comming_data:» ,coming_data # если данные недоступны, приходящие данные будут равны 0
x=ser.read(ser.inWaiting()) #чтение фактических данных с ведомого устройства pymodbus
print repr(x)# печать в шестнадцатеричном формате
print «ok»
time.sleep(2)

Подключите USB к RS485 к вашему ПК или ноутбуку

Откройте подчиненное ПО pymodbus на своем компьютере или ноутбуке

перейдите к опции modbus rtu и выберите следующие настройки:

нажмите на вкладку регистрации и убедитесь, что выбран шестнадцатеричный код:

Нажмите «Подключиться», и вы увидите регистры

Запишите любое значение по адресу 1

Подключите max485 к raspberry pi, как показано в таблице выше
также подключите usb и max485, как показано в таблице выше

После того, как все соединения установлены, запустите файл python.

ваш вывод должен выглядеть примерно так: