EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

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  <20232024  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  <20232024 
<== Date ==> <== Thread ==>

Subject: A Modbus problem relating to byte order and endian
From: Chiang, Liang-Chih [江良志] via Tech-talk <tech-talk at aps.anl.gov>
To: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Date: Tue, 7 Nov 2023 07:09:13 +0000
Hi, EPICS mates,

I have a motor driver(Oriental AZ series) with built-in encoder.
Its RS-485 2-wire interface is adapted by a MOXA Nport 5150A to ethernet(TCP/IP).
I use Modbus to read its encoder position.

I tested it on my own computer,  and successfully read out the encoder position.
However after transfered to a production EPICS/IOC server, the encoder position value became strange.
Please notice that the versions of modbus module are different.

On my computer(asyn-4-26, modbus-2-7), the read value is:
decimal -271,289
hex FFFB DC47

On EPICS/IOC server(asyn-R4-42, modbuus-R3-2), the read value is:
decimal 1,205,664,767       
hex  47DC FBFF


Following is my settings and EPICS record:

## drvAsynIPPortConfigure("portName", "hostInfo", priority, noAutoConnect, noProcessEos)
drvAsynIPPortConfigure("AZPORT01","192.168.2.61:4001",0,0,1)
## modbusInterposeConfig("portName", linkType, timeoutMsec, writeDelayMsec)
modbusInterposeConfig("AZPORT01", 1, 1000, 100)

##drvModbusAsynConfigure("portName", "tcpPortName",slaveAddress, modbusFunction, modbusStartAddress, modbusLength, dataType, pollMsec, "plcType")
drvModbusAsynConfigure("AZPORT01_CH1ENC",   "AZPORT01",    1, 0x03,  0x00CC, 0x02,    6, 100, "AZPORT01")

record(longin, "$(P)$(R)Xenc") {
    field(DTYP, "asynInt32")
    field(INP, "@asyn($(PORT)_CH1ENC 0)MODBUS_DATA")
    field(SCAN, "I/O Intr")
}


By the way, if I changed the "dataType" from 6(INT32_BE) to 5(INT32_LE), the value became:
decimal -599,261,189       
hex  DC47 FFFB




Best regards.



LiangChih Chiang

NSRRC beamline group

email: chiang.lc at nsrrc.org.tw 


Replies:
Re: A Modbus problem relating to byte order and endian Maren Purves via Tech-talk

Navigate by Date:
Prev: Re: AlliedVision Manta G-235B Miroslaw Dach via Tech-talk
Next: Re: A Modbus problem relating to byte order and endian Maren Purves 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  <20232024 
Navigate by Thread:
Prev: Re: Olog usage Timo Korhonen via Tech-talk
Next: Re: A Modbus problem relating to byte order and endian Maren Purves 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  <20232024 
ANJ, 07 Nov 2023 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·