RPi для Arduino через rs485 не получает все символы - PullRequest
0 голосов
/ 03 мая 2018

У меня есть Конвертер USB в RS485 , подключенный к RPi, и этот TTL к RS485 подключен к Arduino Nano. Я использую скорость 9600 бод. Мне нужно отправить максимум 16 символов в каждом направлении, но когда я пытаюсь отправить, на принимающей стороне я получаю только первые 11 символов ... Если я подключаю Arduino Nano с помощью USB-кабеля к RPi, связь идет отлично ...

Это код Arduino:

int rs485CtrlPin = 6;

void setup() {
  pinMode(rs485CtrlPin, OUTPUT);
  Serial.begin(9600);
  while (!Serial);
}

void loop() {
  digitalWrite(rs485CtrlPin, HIGH);   
  Serial.println("cmd1,12345678901");
  delay(10);
  digitalWrite(rs485CtrlPin, LOW);    
  delay(5000);
}

Это код Python:

import serial
import time
import datetime

ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print st + ": Session started!"
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0)
while True:
    try:
        if(not(ser.isOpen())):
            ser.open()
        cmd = ser.readline()
        ts = time.time()
        st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
        print st + ": " + cmd
    except Exception as ex:
        error = "Exception is: " + ex.__str__()
        if(not(ser == None)):
            ser.close()
            ser = None
            ts = time.time()
            st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
            print st + ": " + error

Поэтому вместо получения «cmd1,12345678901» я получаю «cmd1,123456».

Имейте в виду, что даже если я подключу Arduino Nano к своему ПК с помощью тех же преобразователей RS485 и использую последовательный монитор Arduino IDE, я получу тот же результат ... Если я установлю скорость передачи 115200, я получу 2 больше символов "cmd1,12345678", но так как я буду использовать RS485 на расстоянии более 50 м, мне может понадобиться максимальная скорость 9600 бод ...

1 Ответ

0 голосов
/ 11 мая 2018

Благодаря пользователю Riva с форума Arduino я обнаружил, насколько я глуп ... В коде Arduino я добавил 10 мс задержку между отправкой данных и отключением передающего контакта для RS485, со скоростью 9600 бод (1200 байт в секунду) вы можете отправлять только 12 байт. Чтобы использовать полную передачу данных 1200 байтов, вам нужно добавить задержку в 1 секунду (что очевидно, когда вы думаете об этом, а я не думаю) ...

Полную тему на форуме Arduino можно найти здесь .

...