|
Subject: |
Modbus asyn issue with RS485 connection (maybe hardware related) |
|
From: |
"Heinz Junkes \(FHI\) via Tech-talk" <[email protected]> |
|
To: |
Mark Rivers via Tech-talk <[email protected]> |
|
Date: |
Wed, 13 Aug 2025 16:19:05 +0200 |
Hi,
we want to operate a motor (https://www.omc-stepperonline.com/de/icl-serie-nema-17-integrierter-rs485-schrittmotor-mit-geschlossenem-regelkreis-0-4nm-56-64oz-in-20-36vdc-mit-14-bit-encoder-icl42-rs06) directly via RS485 (https://jetwaycomputer.com/spec/expansion/ADPIE1COM4.pdf) with modbus.
In order to be able to operate the motor with our hardware setup, we need to set the serial interface to
SER_RS485_ENABLED and SER_RS485_RTS_AFTER_SEND.
We do this via asynSetOption():
asynSetOption("DISCM",0,"rs485_enable", "Y")
asynSetOption("DISCM",0,"rs485_rts_after_send", "Y”)
This can be found in the Linux kernel:
+/* We should do proper H/W transceiver setting before change to RS485 mode */
+static int f81504_rs485_config(struct uart_port *port,
+ struct serial_rs485 *rs485)
+{
+ u8 setting;
+ u8 *index = (u8 *)port->private_data;
+ struct pci_dev *pci_dev = container_of(port->dev, struct pci_dev, dev);
+
+ pci_read_config_byte(pci_dev, UART_START_ADDR + UART_OFFSET * *index +
+ UART_MODE_OFFSET, &setting);
+
+ if (!rs485)
+ rs485 = &port->rs485;
+ else if (rs485->flags & SER_RS485_ENABLED)
+ memset(rs485->padding, 0, sizeof(rs485->padding));
+ else
+ memset(rs485, 0, sizeof(*rs485));
+
+ /* F81504/508/512 not support RTS delay before or after send */
+ rs485->flags &= SER_RS485_ENABLED | SER_RS485_RTS_ON_SEND;
+
+ if (rs485->flags & SER_RS485_ENABLED) {
+ /* Enable RTS H/W control mode */
+ setting |= RTS_CONTROL_BY_HW;
+
+ if (rs485->flags & SER_RS485_RTS_ON_SEND) {
+ /* RTS driving high on TX */
+ setting &= ~RTS_INVERT;
+ } else {
+ /* RTS driving low on TX */
+ setting |= RTS_INVERT;
+ }
+
This means that when SER_RS485_ENABLED (0x01) is set, SER_RS485_RTS_ON_SEND (0x02) is also set automatically.
However, in order to be able to communicate with the motor via Modbus (with our hardware), we need the flag 0x05
(SER_RS485_ENABLED | SER_RS485_RTS_AFTER_SEND) // SER_RS485_RTS_AFTER_SEND == 0x04
We have implemented this as a workaround. If this is of general interest, I will make a pull-request to asyn.
epics@epics-gate14:~/EPICS/epics-support/asyn$ git diff
diff --git a/asyn/drvAsynSerial/drvAsynSerialPort.c b/asyn/drvAsynSerial/drvAsynSerialPort.c
index 1ed6ab47..97078a5d 100644
--- a/asyn/drvAsynSerial/drvAsynSerialPort.c
+++ b/asyn/drvAsynSerial/drvAsynSerialPort.c
@@ -529,6 +529,7 @@ setOption(void *drvPvt, asynUser *pasynUser, const char *key, const char *val)
else if (epicsStrCaseCmp(key, "rs485_rts_after_send") == 0) {
if (epicsStrCaseCmp(val, "Y") == 0) {
tty->rs485.flags |= SER_RS485_RTS_AFTER_SEND;
+ tty->rs485.flags &= ~(SER_RS485_RTS_ON_SEND);
}
else if (epicsStrCaseCmp(val, "N") == 0) {
tty->rs485.flags &= ~(SER_RS485_RTS_AFTER_SEND);
Heinz
------------------------------------------------------------------------------
Fritz-Haber-Institut | Phone: (+49 30) 8413-4270
Heinz Junkes | Fax (G3+G4): (+49 30) 8413-5900
Faradayweg 4-6 | VC: https://zoom.fhi.berlin/junkes
D - 14195 Berlin | E-Mail: [email protected]
------------------------------------------------------------------------------
“Sorry I’m a bit late, had a terrible time…
All sort of things cropping up at the last moment. Uh, how are we for time?”
—Zarquon's address to Milliways
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
- Replies:
- Re: Modbus asyn issue with RS485 connection (maybe hardware related) Heinz Junkes (FHI) via Tech-talk
- Navigate by Date:
- Prev:
Re: synchronizing the value of a read/write record Mark Rivers via Tech-talk
- Next:
Re: Modbus asyn issue with RS485 connection (maybe hardware related) Heinz Junkes (FHI) via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
<2025>
2026
- Navigate by Thread:
- Prev:
Re: Mapping customised pva structures to epics v4 Normative Types and v3 PVs (channel access). Ralph Lange via Tech-talk
- Next:
Re: Modbus asyn issue with RS485 connection (maybe hardware related) Heinz Junkes (FHI) via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
<2025>
2026
|