From 782a4a296bc48e2421b8fd97a153743740370e65 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Wed, 10 Jul 2019 13:05:03 +0200 Subject: [PATCH] do the whole RS485 DE handling in Python --- src/CommunicationProcessor.py | 7 +++++-- src/MyRS485.py | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/MyRS485.py diff --git a/src/CommunicationProcessor.py b/src/CommunicationProcessor.py index 1194170..748d37f 100644 --- a/src/CommunicationProcessor.py +++ b/src/CommunicationProcessor.py @@ -4,6 +4,7 @@ import RS485Ext import RegisterDatapoint from pymodbus.client.sync import ModbusSerialClient import wiringpi +import MyRS485 ERROR_PIN = 29 @@ -19,8 +20,10 @@ class CommunicationProcessor(threading.Thread): self.daemon = True def __getSerial(self): - return RS485Ext.RS485Ext(port=self.config.serialPort, baudrate=self.config.serialBaudRate, stopbits=1, - timeout=1) + # return RS485Ext.RS485Ext(port=self.config.serialPort, baudrate=self.config.serialBaudRate, stopbits=1, + # timeout=1) + return MyRS485.MyRS485(port=self.config.serialPort, baudrate=self.config.serialBaudRate, stopbits=1, + timeout=1) def run(self): diff --git a/src/MyRS485.py b/src/MyRS485.py new file mode 100644 index 0000000..c68ca13 --- /dev/null +++ b/src/MyRS485.py @@ -0,0 +1,26 @@ +import serial +import serial.serialutil +import ctypes +import wiringpi +import array +import fcntl +import termios + +DE_PIN = 0 + +class MyRS485(serial.Serial): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + wiringpi.wiringPiSetup() + wiringpi.pinMode(DE_PIN, wiringpi.OUTPUT) + self.buf = array.array('h', [0]) + + def write(self, b): + wiringpi.digitalWrite(DE_PIN, wiringpi.HIGH) + super.write(b) + while True: + fcntl.ioctl(self.fileno(), termios.TIOCSERGETLSR, self.buf, 1) + if self.buf[0] & termios.TIOCSER_TEMT: + break + wiringpi.digitalWrite(DE_PIN, wiringpi.LOW) +