Hi Maren,
> but we have always treated devices at the ends of serial lines as devices on serial lines, no matter what they go through, at least that is my understanding.
Your original message said you were using tnetDev. That is the code that makes the serial ports on the terminal server available to EPICS. I could not find actual documentation on tnetDev but I did find this in a tech-talk message
from 2002 (https://epics.anl.gov/tech-talk/2002/msg00826.php)
The tnetDevCreate routine creates pseudo-terminal devices for the ports on
the terminal server. This routine must run before iocInit, i.e. before any
of the simulation mode or disabling tools of EPICS is available. When
tnetDevCreate runs the terminal server port must exist and be configured
correctly or really bad things happen. My startup code looks like:
# Start serial drivers for terminal server
hostAdd "harpts", "192.168.3.41"
tnetDevCreate "/pty/0.", "harpts", 3003
tnetDevCreate "/pty/1.", "harpts", 3004
Note that tnetDevCreate is creating a new object in EPICS called
"/pty/0.” that is connected to terminal server whose IP name is “harpts” on port 3003. That is very similar to what is done in the current asyn software with this command:
drvAsynIPPortConfigure("serial1", "164.54.160.163:4001", 0, 0, 0)
That creates an asyn port driver called “serial1” that is connected to port 4001 on the terminal server whose IP address is
164.54.160.163.
Note that the asyn command to connect to a real serial port is similar:
drvAsynSerialPortConfigure("serial1", "/dev/ttyS0", 0, 0, 0)
Both of these commands create asyn drivers called “serial1” can be used in the same way with EPICS device support, such as stream.
> what I will attempt first is to talk to and read out a Lakeshore device connected to a console switch
> but I don't see Jakub's case as all that different.
Jakub’s case is quite different. He wants the ability to execute a Linux command like this:
cp LakeshoreCommands.txt /dev/ttyr00
He wants the port on the terminal server to appear just like a real Linux serial port.
I don’t believe you could execute a command like that with your current terminal server and the Lakeshore device. You need the tnetDev software to make it available in EPICS.
Mark
but we have always treated devices at the ends of serial lines as devices on serial lines, no matter what they go through, at least that is my understanding.
I'm planning on getting back to upgrading EPICS here at some point - and what I will attempt first is to talk to and read out a Lakeshore device connected to a console switch because
that's what we have in the lab.
Just like in high energy physics our computers at the telescope are not right where our equipment is. This is even more the case for Linux boxes than for VME crates.
Maybe I'm misunderstanding something here, but I don't see Jakub's case as all that different.
Hi Maren,
> I hope EPICS didn't lose that capability with the newer versions?
No, EPICS has not lost that capability. With EPICS and asyn one uses the drvAsynIPPort driver, and not the drvAsynSerialPort driver, because EPICS is talking to the terminal server, not directly to the serial port. In fact EPICS now supports the RFC2217 protocol,
which allows EPICS to control the serial port parameters like baud rate, parity, etc. Without that one needs to configure those parameters outside of EPICS, typically with a Web or command line interface to the terminal server.
The issue that Jakub was facing is that he needed a way to create a Linux device that appears to be a standard tty driver, i.e. it emulates a local serial port and hides the fact that it is going through a Moxa. He needed that to be able to use a vendor library,
not for EPICS.
Mark
________________________________
From: Maren Purves <m.purves at eaobservatory.org>
Sent: Wednesday, April 7, 2021 2:56 AM
To: Mark Rivers
Cc: Wlodek, Jakub; tech-talk at aps.anl.gov
Subject: Re: Handling Ethernet-to-Serial Connection when vendor SDK expects tty device
Hi Mark & Jakub,
while I have never worked with a Moxa we have connected serial line devices through terminal servers or later console switches from the beginning of using them with EPICS, starting with one that I first tried to connect directly to a serial line but found that
one of the parameters needed a setting that I could only set on a terminal server.
We're still running EPICS 3.13.8 and PPC IOCs with tnetDev and drvAscii and that has always worked.
I hope EPICS didn't lose that capability with the newer versions?
When I tried to upgrade to 3.15.6 and got as far as building a softIoc the first device I tried to talk to (but never succeeded) was a Lakeshore on a console switch (never got that to work, got side-tracked and haven't gotten back to it yet). I hope you're
not saying that isn't going to work?
Thanks,
Maren
On Tue, Apr 6, 2021 at 3:51 AM Mark Rivers via Tech-talk <tech-talk at aps.anl.gov<mailto:tech-talk at aps.anl.gov>> wrote:
Hi Jakub,
> I know there is external software I could use to create a virtual serial device from an ethernet connection, but is there a way to do this from within EPICS?
I don't know of a way to do that inside EPICS.
Moxa provides a "Real TTY" Linux driver that allows creating ports like /dev/ttyr00 to the Moxa device. These provide all of the serial port controls (baud, parity, etc.).
https://www.moxa.com.cn/getmedia/6fbafa79-1113-4953-a6cc-bef28dae1180/moxa-real-tty-driver-for-nport-tech-note-v1.0.pdf
Mark
________________________________
From: Tech-talk <tech-talk-bounces at aps.anl.gov<mailto:tech-talk-bounces at aps.anl.gov>> on behalf of Wlodek, Jakub via Tech-talk
<tech-talk at aps.anl.gov<mailto:tech-talk at aps.anl.gov>>
Sent: Tuesday, April 6, 2021 8:34 AM
To: tech-talk at aps.anl.gov<mailto:tech-talk at aps.anl.gov>
Subject: Handling Ethernet-to-Serial Connection when vendor SDK expects tty device
Good morning EPICS community,
I had the following question regarding one of the devices that I am currently working on supporting. Essentially, I am using an asynPortDriver
based driver integrated with the device vendor SDK. The vendor SDK has a connection function that expects a string representing either identification
for the USB device to communicate over the USB bus (this I have working fine), or a TTY serial device for communicating over serial (ex. /dev/ttyS0, COM1 on Windows).
When connected directly to the serial port of the target machine, the device connects and this works OK.
However, ideally, we would prefer to use a MOXA ethernet-to-serial adapter to talk to the device, and I am not sure what the best approach for this is. Traditionally,
for say a StreamDevice IOC I would use drvAsynIPPortConfigure(), and then configure the MOXA to communicate via serial on the other end, but given that
the device needs a serial device to connect, I wasn't sure how to handle that. I know there is external software I could use to create a virtual serial device from
an ethernet connection, but is there a way to do this from within EPICS?
Thanks,
Jakub