Hi Jakub,
You had:
drvAsynIPPortConfigure("LAKE1", "SOMEIP:SOMEPORT")
asynSetOption("LAKE1", -1, "baud", "9600")
asynSetOption("LAKE1", -1, "bits", "8")
asynSetOption("LAKE1", -1, "parity", "odd")
asynSetOption("LAKE1", -1, "stop", "1")
That won’t work because you have not enabled the RFC 2217 protocol, so the asynSetOption() commands have not effect. Most Moxa terminal servers support the RFC 2217 protocol, but first you need to enable that on the Moxa box. Then you
need to change your drvAsynIPPortConfigure command to this:
drvAsynIPPortConfigure("LAKE1", "SOMEIP:SOMEPORT COM"
See the documentation here:
https://epics-modules.github.io/master/asyn/R4-42/asynDriver.html#drvAsynIPPort
Also, the Lakeshore manual (https://www.lakeshore.com/docs/default-source/product-downloads/331_manual.pdf?sfvrsn=5ed3bf08_1)
says the data format is this:
1 Start, 7 Data, 1 Parity, 1 Stop
So you need to change “bits” from 8 to 7.
The behavior you are seeing is probably because you have not actually enabled off parity and the correct number of data bits.
You should set asynTraceMask on the IP port to ERROR|DRIVER and asynTraceIOMask to ESCAPE. Then post the output when you send a few commands, telling us what the expected response is.
Mark
From: Tech-talk <tech-talk-bounces at aps.anl.gov>
On Behalf Of Wlodek, Jakub via Tech-talk
Sent: Wednesday, February 2, 2022 11:26 AM
To: tech-talk at aps.anl.gov
Subject: Configuring serial communication with Lakeshore 331 via Moxa
To start, I have the IOC just creating the asyn port pointing at the TCP Server on the appropriate port on the moxa, and I load the asynRecord database, so I can test sending/receiving
commands using the asynOctet interface. I configured the serial connection on the moxa, asyn, and the device to 9600 baud, 8 data bits, and one stop bit, and I can see that I am communicating with the device on some level, however, the responses I am seeing
don't seem correct; they are full for unexpected characters, and don't match the format listed in the manual. I am guessing there is still something I missed in the configuration of the serial connection.
[jwlodek@xf06bm-ioc2 ioclakeshore331]$ more st.cmd
#!../../bin/linux-x86_64/lakeshore331
epicsEnvSet("SYS", "XF:06BMB-CT")
epicsEnvSet("IOC_P", "$(SYS){IOC:LS1}")
epicsEnvSet("PREFIX", "XF:06BM-")
< envPaths
cd ${TOP}
## Register all support components
dbLoadDatabase("$(TOP)/dbd/lakeshore331.dbd",0,0)
lakeshore331_registerRecordDeviceDriver(pdbbase)
drvAsynIPPortConfigure("LAKE1", "SOMEIP:SOMEPORT")
asynOctetSetOutputEos("LAKE1", 0, "\r\n")
#asynOctetSetInputEos("LAKE1", 0, "\r\x8a")
asynSetOption("LAKE1", -1, "baud", "9600")
asynSetOption("LAKE1", -1, "bits", "8")
asynSetOption("LAKE1", -1, "parity", "odd")
asynSetOption("LAKE1", -1, "stop", "1")
dbLoadRecords("$(EPICS_BASE)/db/asynRecord.db", "P=$(PREFIX), R=LS331:01:serial, PORT=LAKE1, ADDR=0, OMAX=0, IMAX=0")
var streamDebug 2
iocInit()
Also, while every command I send gets some (different) response, I seem to get a timeout error for the asynOctet interface, indicating something is not quite right:
Has someone configured such a device that has run into a similar issue? Or alternatively, does anyone know what could the cause be?