Hi Xiaomin,
Have you solved this already?
From the Python errors you’re getting, it appears your include path is not finding the modbus_tk module. If it works from a regular python3 shell, you can check where’s it’s located with
> import modbus_tk
> print(modbus_tk.__file__)
And then make sure that’s in your include path.
Because the wave.py tries to import modbus_tk too and fails, it doesn’t execute the code after the exception, which is probably why Temp class doesn’t get defined.
— Klemen
> On Jul 22, 2022, at 2:14 AM, liuxiaomin via Tech-talk <tech-talk at aps.anl.gov> wrote:
>
> Hi,
> I am trying to control a device which can get the temperature values ,Because the register address of the values not continuous, so I did not use the Modbus module under EPICS, but used modbus_tk under python to get the value. In order to match with EPICS, I used the support module PyDevice which is an EPICS device support for Python interpreter, When I run the st.cmd file, the following error occurs, So now there are three files, the db file, the st.cmd file and the wave.py file that gets the temperature data.
>
> The db files is as flollows:
> record(ai, "$(user):GETDATA")
> {
> field(DTYP, "pydev")
> field(INP,"@temp1.getData()")
> field(SCAN, "1 second")
> }
>
> record(waveform, "$(user):TEMP")
> {
> field(DTYP, "pydev")
> field(INP, "@pydev.iointr('temp_sent')")
> field(SCAN, "I/O Intr")
> #field(INP, "@temp1.temp_array")
> field(NELM, "1000")
> field(FTVL, "DOUBLE")
> }
>
> The st.cmd files is as follows:
> #!../../bin/linux-x86_64/waveioc
> < envPaths
> epicsEnvSet("EPICS_CA_SERVER_PORT", 5070)
> epicsEnvSet("IOCNAME","waveioc")
> cd "${TOP}"
> ## Register all support components
> dbLoadDatabase "dbd/waveioc.dbd"
> waveioc_registerRecordDeviceDriver pdbbase
> drvModbusAsynConfigure("WORDIR","CAT1",slaveAddress,modbusFunction,modbusStartAddr,modbusLen,dataType,posMsec,"plcType")
> pydev("import sys; sys.path.insert(0,'${PWD}')")
> pydev("import modbus_tk")
> pydev("from wave import Temp")
> pydev("temp1 = Temp('192.168.0.11','502')")
> dbLoadRecords "db/dbWaveform.db", "user=${IOCNAME}"
> cd "${TOP}/iocBoot/${IOC}"
> iocInit
>
> I encounter a problem, the obtained temperature values are all 0, the real temperature are not 0. If only used modbus_tk without PyDevice, there is no such error, and can caget the real temperature .
>
> caget waveioc:TEMP
> waveioc:TEMP 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>
> When the command file runs, it shows:
> #!../../bin/linux-x86_64/waveioc
> < envPaths
> epicsEnvSet("IOC","waveioc")
> epicsEnvSet("TOP","/home/iocusr/xm/waveioc")
> epicsEnvSet("MODULES","/opt/epics/base/../modules")
> epicsEnvSet("AUTOSAVE","/opt/epics/base/../modules/autosave-R5-7-1")
> epicsEnvSet("ASYN","/opt/epics/base/../modules/asyn-R4-41")
> epicsEnvSet("BUSY","/opt/epics/base/../modules/busy-1-6-1")
> epicsEnvSet("CALC","/opt/epics/base/../modules/calc-R3-7-4")
> epicsEnvSet("CAPUTLOG","/opt/epics/base/../modules/caPutLog-3-5")
> epicsEnvSet("IOCSTATS","/opt/epics/base/../modules/iocStats-3-1-16")
> epicsEnvSet("MODBUS","/opt/epics/base/../modules/modbus-R3-2")
> epicsEnvSet("NETDEV","/opt/epics/base/../modules/netDev-1-0-6")
> epicsEnvSet("PC-MONITOR","/opt/epics/base/../modules/PC-MONITOR1-0-2")
> epicsEnvSet("PROCSERVCONTROL","/opt/epics/base/../modules/procServControl-1-9")
> epicsEnvSet("S7NODAVE","/opt/epics/base/../modules/s7nodave-2-1-3")
> epicsEnvSet("S7PLC","/opt/epics/base/../modules/s7plc")
> epicsEnvSet("SSCAN","/opt/epics/base/../modules/sscan-2-10")
> epicsEnvSet("STREAM","/opt/epics/base/../modules/StreamDevice-2-8-9")
> epicsEnvSet("SNCSEQ","/opt/epics/base/../modules/seq-2-2-6")
> epicsEnvSet("PYDEVICE","/opt/PyDevice")
> epicsEnvSet("EPICS_BASE","/opt/epics/base")
> epicsEnvSet("EPICS_CA_SERVER_PORT", 5070)
> epicsEnvSet("IOCNAME","waveioc")
> cd "/home/iocusr/xm/waveioc"
> ## Register all support components
> dbLoadDatabase "dbd/waveioc.dbd"
> waveioc_registerRecordDeviceDriver pdbbase
> Executing Python code: import pydev
> Executing Python code: import builtins
> Executing Python code: builtins.pydev=pydev
> Executing Python code: import pydev
> pydev("import sys; sys.path.insert(0,'${PWD}')")
> pydev("import modbus_tk")
> Executing Python code: import modbus_tk
> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> ModuleNotFoundError: No module named 'modbus_tk'
> pydev("from wave import Temp")
> Executing Python code: from wave import Temp
> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> File "/usr/lib/python3.7/wave.py", line 2, in <module>
> import modbus_tk
> ModuleNotFoundError: No module named 'modbus_tk'
> pydev("temp1 = Temp('192.168.0.11','502')")
> Executing Python code: temp1 = Temp('192.168.0.11','502')
> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> NameError: name 'Temp' is not defined
> dbLoadRecords "db/dbWaveform.db", "user=waveioc"
> cd "/home/iocusr/xm/waveioc/iocBoot/waveioc"
> iocInit
> Starting iocInit
> ############################################################################
> ## EPICS R7.0.5
> ## Rev. 2021-09-13T15:44+0800
> ############################################################################
> sevr=info s7plcInit: no stations configured
> drvStreamInit: Warning! STREAM_PROTOCOL_PATH not set. Defaults to "."
> iocRun: All initialization complete
> epics>
> Why can't I get the real temperature value?
>
> Thanks
> xiaomin
- References:
- PyDevice modbus liuxiaomin via Tech-talk
- Navigate by Date:
- Prev:
Re: EPICS on ESP32 Steve Hunt via Tech-talk
- Next:
Building with INSTALL_PATH= Dudley, David 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
- Navigate by Thread:
- Prev:
Re: PyDevice modbus Mark Rivers via Tech-talk
- Next:
ci-scripts 3.4 release: more cross-compiling options, Python hooks Ralph Lange 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
|