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 | 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 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: Help: Asyn record getting incomplete input |
From: | Mark Rivers via Tech-talk <tech-talk at aps.anl.gov> |
To: | "Siddons, David" <siddons at bnl.gov>, "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>, "Marco A. Barra Montevechi Filho" <marco.filho at lnls.br> |
Cc: | SWC <swc at lnls.br> |
Date: | Mon, 9 Jan 2023 14:58:15 +0000 |
>
How about EPICS_CA_MAX_ARRAY_BYTES? Is it big enough?
All
of the diagnostics Marco is reporting are IOC commands, not using Channel Access, so this should not matter.
Mark
From: Siddons, David <siddons at bnl.gov>
Sent: Monday, January 9, 2023 8:54 AM To: Mark Rivers <rivers at cars.uchicago.edu>; tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>; Marco A. Barra Montevechi Filho <marco.filho at lnls.br> Cc: SWC <swc at lnls.br> Subject: Re: Help: Asyn record getting incomplete input Hi Marco,
How about EPICS_CA_MAX_ARRAY_BYTES? Is it big enough?
Pete.
From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Marco A. Barra Montevechi Filho via Tech-talk <tech-talk at aps.anl.gov>
Sent: Monday, January 9, 2023 9:50 AM To: Mark Rivers <rivers at cars.uchicago.edu>; tech-talk at aps.anl.gov <tech-talk at aps.anl.gov> Cc: SWC <swc at lnls.br> Subject: Re: Help: Asyn record getting incomplete input Hi Mark, thanks for the quick answer!
I did comment out the PI_GCS2_CreateController("E873", "E873_ETH", 1, 0, 0, 50, 1000) Line and the error itself stopped showing but the table keeps comming incomplete, chopped off exactly in the same place. I tried messing with asynSetQueueLockPortTimeout but the IOC sigfaulted (i suppose i have to update asyn version). With the motorcontroller line commented out, i can see: epics> dbpf $(DEV)asynEth.AOUT "DRR?" DBR_STRING: "DRR?"
epics> 2023/01/09 11:43:56.764 MGN:A:E873:DIAG:A:asynEth: nwrite=4, status=0, nawt=4
DRR?
epics> dbgf $(DEV)asynEth.BINP #(Nothing came yet)
epics> dbgf $(DEV)asynEth.BINP #(Nothing came yet)
epics> 2023/01/09 11:44:10.270 MGN:A:E873:DIAG:A:asynEth: inlen=265337, nbytesTransfered=265337, ntranslate=272968epics>epics> dbgf $(DEV)asynEth.BINP #(Now i have info) DBR_CHAR[800]:
"# REM E-873
#
# VERSION = 1
# TYPE = 1
# SEPARATOR = 32 (Etc.) Also, NORD field is now with value 265337, which kinda makes sense but isnt this much more bytes than the 860 characters that i got in the table shown? The fact that the table always comes with the values truncated in the exact same number of chars leads me to believe that im naively forgetting some parameter that tells the BINP field how much it should store or show to the user... From: Mark Rivers <rivers at cars.uchicago.edu>
Sent: 09 January 2023 10:56 To: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>; Marco A. Barra Montevechi Filho <marco.filho at lnls.br> Cc: SWC <swc at lnls.br> Subject: Re: Help: Asyn record getting incomplete input Hi Marco,
>
But i just get a small part of the table, which start right but just cuts out after some chars. It seems to always cut at 860 chars. I tried messing with IMAX but this doesnt seem to be the problem.
This is the error you get:
epics> 2023/01/09 09:40:39.129 PIInterface::sendAndReceive error calling writeRead, output=4 status=3, error=asynManager::queueLockPort queueRequest timed out Note that the error is that queueLockPort timed out. That means that someone else has the port locked
for longer than the timeout, probably the motor driver.
You said:
>
Since im not trying to actually control the motor for now but just get some information from it, i didnt even load the motor records.
But you did load the motor driver itself, so it is polling the controller:
PI_GCS2_CreateController("E873", "E873_ETH", 1, 0, 0, 50, 1000) In order to understand what is going on you should uncomment these lines:
#asynSetTraceMask("E873_ETH",0,3) and change them to this:
asynSetTraceMask("E873_ETH",0,ERROR|DRIVER)
asynSetTraceIOMask("E873_ETH",0,ESCAPE)
You might want to comment out the line that starts the controller to see if you still have problems.
Mark
From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Marco A. Barra Montevechi Filho via Tech-talk <tech-talk at aps.anl.gov>
Sent: Monday, January 9, 2023 6:44 AM To: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov> Cc: SWC <swc at lnls.br> Subject: Help: Asyn record getting incomplete input Hello all and happy new year
🙂
We are using an IOC to control an E873 motor controller from Physik Instrumente (PI) with the gcs commands. The IOC comes from the motor-R7-1 motorPIGCS2-R1-1 module (synApps/R6.1/support/motor-R7-1/modules/motorPIGCS2-R1-1/iocs/pigcs2IOC). We want to query some data from the controller using GCS commands that work in a common python socket script. For that we ended up setting an asyn record to the same asyn port that the motor module uses, so the st.cmd file looks something like (I append the full IOC initialization log at the end): drvAsynIPPortConfigure("E873_ETH","<IP>:<PORT>",0,0,0) PI_GCS2_CreateController("E873", "E873_ETH", 1, 0, 0, 50, 1000) dbLoadRecords("$(ASYN)/db/asynRecord.db","P=$(DEV),R=asynEth,PORT=E873_ETH,ADDR=0,OMAX=256,IMAX=520000") Since im not trying to actually control the motor for now but just get some information from it, i didnt even load the motor records. When the IOC is disconnected, i have a python script that does:
import socket,
time
so =
socket.socket()
so.connect(("CDE5B3D.abtlus.org.br",50000))
so.send("DRR?\n".encode())
time.sleep(3)
print(so.recv(2**30))and it retrieves an enormous table, which is what i want. Im trying to retrieve the same information from the aynPort: dbpf MGN:A:E873:DIAG:A:asynEth.OEOS "\n" dbpf MGN:A:E873:DIAG:A:asynEth.IFMT 2 dbpf MGN:A:E873:DIAG:A:asynEth.IEOS "" dbpf MGN:A:E873:DIAG:A:asynEth.AOUT "DRR? #(wait some time...) dbgf MGN:A:E873:DIAG:A:asynEth.BINP But i just get a small part of the table, which start right but just cuts out after some chars. It seems to always cut at 860 chars. I tried messing with IMAX but this doesnt seem to be the problem. Is there anything im doing wrong? Thanks in advance. Attached file "python.txt" is table acquired with python socket. "asyn.txt" is table acquired with asyn. I noticed the acquisition is not always perfect in python too, but its far better than with asyn record. Full IOC init log (and dbgf in .BINP made manually by me): #!/usr/local/epics/apps/pigcs2IOC/bin/linux-x86_64/pigcs2 < /usr/local/epics/apps/pigcs2IOC/iocBoot/iocPIGCS2/envPaths
epicsEnvSet("IOC","iocPIGCS2")
epicsEnvSet("TOP","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/motor-R7-1/modules/motorPIGCS2-R1-1/iocs/pigcs2IOC")
epicsEnvSet("SUPPORT","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support")
epicsEnvSet("ASYN","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/asyn-R4-36")
epicsEnvSet("STREAM","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/StreamDevice-2-8-9")
epicsEnvSet("CALC","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/calc-R3-7-3")
epicsEnvSet("RECCASTER","/usr/local/epics-nfs/apps/recsync/1.4_epics_3.15/client")
epicsEnvSet("SNCSEQ","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/seq-2-2-6")
epicsEnvSet("BUSY","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/busy-R1-7-2")
epicsEnvSet("IPAC","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/ipac-2-15")
epicsEnvSet("MOTOR","/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/motor-R7-1")
epicsEnvSet("EPICS_BASE","/usr/local/epics-nfs/base/R3.15.6")
cd "/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/motor-R7-1/modules/motorPIGCS2-R1-1/iocs/pigcs2IOC"
## Set up environment
epicsEnvSet("DEV","MGN:A:E873:DIAG:A:")
epicsEnvSet("BL", "MGN:A:E873:DIAG:A")
epicsEnvSet("IOCNAME", "MGN-A-E873A-DIAG-A")
# protocol file paths
epicsEnvSet ("STREAM_PROTOCOL_PATH", ".:/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/motor-R7-1/db")
## Register all support components
dbLoadDatabase "dbd/pigcs2.dbd"
pigcs2_registerRecordDeviceDriver pdbbase
cd "/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/motor-R7-1/modules/motorPIGCS2-R1-1/iocs/pigcs2IOC/iocBoot/iocPIGCS2"
## motorUtil (allstop & alldone)
dbLoadRecords("/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/motor-R7-1/db/motorUtil.db", "P=MGN:A:E873:DIAG:A:")
# PI GCS2 support
#dbLoadTemplate("/usr/local/epics/apps/config/PIGCS2/e873a.substitutions")
drvAsynIPPortConfigure("E873_ETH","CDE5B3D.abtlus.org.br:50000",0,0,0)
# Turn on asyn trace
#asynSetTraceMask("E873_ETH",0,3)
#asynSetTraceIOMask("E873_ETH",0,1)
# PI_GCS2_CreateController(portName, asynPort, numAxes, priority, stackSize, movingPollingRate, idlePollingRate)
# speedup debug
PI_GCS2_CreateController("E873", "E873_ETH", 1, 0, 0, 50, 1000)
2023/01/09 09:40:33.436 read from E873_ETH: (c)2016-2020 Physik Instrumente (PI) GmbH & Co. KG, E-873.1AT, 120040762, 03.033
PIasynAxis::PIasynAxis() 0: 1
----------------- axis num: 0 createCLParams() m_szAxisName: 1-------------------
# Turn off asyn trace
#asynSetTraceMask("E873_ETH",0,1)
#asynSetTraceIOMask("E873_ETH",0,0)
# Set end-of-string terminators (port, addr, terminator)
asynOctetSetInputEos("E873_ETH", 0, "\n")
asynOctetSetOutputEos("E873_ETH", 0, "\n")
#dbLoadRecords("$(TOP)/db/PI_Support.db","P=$(DEV),R=m1:,PORT=E873,ADDR=0,TIMEOUT=1")
# asyn record for troubleshooting
# Old IMAX in next line was 256. Might be convenient to revert value.
dbLoadRecords("/usr/local/epics-nfs/modules/R3.15.6/synApps/R6.1/support/asyn-R4-36/db/asynRecord.db","P=MGN:A:E873:DIAG:A:,R=asynEth,PORT=E873_ETH,ADDR=0,OMAX=256,IMAX=520000")
# RECSYNC
dbLoadRecords("/usr/local/epics-nfs/apps/recsync/1.4_epics_3.15/client/db/reccaster.db", "P=MGN:A:E873:DIAG:A:REC:")
iocInit
Starting iocInit
############################################################################
## EPICS R3.15.6
## EPICS Base built Sep 27 2021
############################################################################
cas warning: Configured TCP port was unavailable.
cas warning: Using dynamically assigned TCP port 41815,
cas warning: but now two or more servers share the same UDP port.
cas warning: Depending on your IP kernel this server may not be
cas warning: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST)
iocRun: All initialization complete
## motorUtil (allstop & alldone)
motorUtilInit("MGN:A:E873:DIAG:A:")
# Boot complete
# fix, PI default is '\r'
dbpf "MGN:A:E873:DIAG:A:asynEth.OEOS" "\n"
DBR_STRING: "\n"
dbpf "MGN:A:E873:DIAG:A:asynEth.IEOS" "\n"
DBR_STRING: "\n"
# DEBUGGING ASYN
dbpf MGN:A:E873:DIAG:A:asynEth.IFMT 2
DBR_STRING: "Binary"
dbpf MGN:A:E873:DIAG:A:asynEth.IEOS ""
DBR_STRING:
dbpf MGN:A:E873:DIAG:A:asynEth.AOUT "DRR?"
DBR_STRING: "DRR?"
epics> 2023/01/09 09:40:39.129 PIInterface::sendAndReceive error calling writeRead, output=4 status=3, error=asynManager::queueLockPort queueRequest timed out
dbgf MGN:A:E873:DIAG:A:asynEth.BINP
epics> 2023/01/09 09:40:44.130 PIGCSController:sendAndReceive error calling write, output=POS? 1 status=3, error=asynManager::queueLockPort queueRequest timed out
dbgf MGN:A:E873:DIAG:A:asynEth.BINP
DBR_CHAR[800]:
"# REM E-873
#
# VERSION = 1
# TYPE = 1
# SEPARATOR = 32
# DIM = 4
# S" +
"AMPLE_TIME = 0.00050
# NDATA = 7616
#
# NAME0 = Commanded Position of Ax" +
"is AXIS:1
# NAME1 = Actual Position of Axis AXIS:1
# NAME2 = Motor Curr" +
"ent AXIS:1
# NAME3 = Signal Status Register of Axis AXIS:1
#
# END_HEA" +
"DER
-0.000001 0.000001 -0.0015 36877
-0.000001 -0.000001 -0.0015 36877
-" +
"0.000001 -0.000001 -0.0015 36877
-0.000001 -0.000001 -0.0015 36877
-0.000" +
"001 -0.000001 -0.0015 36877
-0.000001 0.000000 -0.0015 36877
-0.000001 0." +
"000001 -0.0015 36877
-0.000001 -0.000001 -0.0015 36877
-0.000001 -0.00000" +
"1 -0.0015 36877
-0.000001 -0.000001 -0.0015 36877
-0.000001 -0.000001 -0." +
"0015 36877
-0.000001 0.000001 -0.0015 36877
-0.000001 0.000001 -0.0015 36" +
"877
-0.000001 0.000000 -0.0015 36877
-0.000001 0"
epics> dbpf "MGN:A:E873:DIAG:A:asynEth.AOUT" "POS? 1"
DBR_STRING: "POS? 1"
epics> dbgf MGN:A:E873:DIAG:A:asynEth.BINP
DBR_CHAR[11]: "1=0.000001
"Aviso Legal: Esta mensagem e seus anexos podem conter informações confidenciais e/ou de uso restrito. Observe atentamente seu conteúdo e considere eventual consulta ao remetente antes de copiá-la, divulgá-la ou distribuí-la. Se você recebeu esta mensagem por engano, por favor avise o remetente e apague-a imediatamente. Disclaimer: This email and its attachments may contain confidential and/or privileged information. Observe its content carefully and consider possible querying to the sender before copying, disclosing or distributing it. If you have received this email by mistake, please notify the sender and delete it immediately. |