That's weird. I can't find what's wrong.
[...]
PI_GCS2_CreateController("PIasyn3", "tcpip_e712",3, 0,0, 10, 250)
2019/04/08 16:29:41.272 read from tcpip_e712: (c)2015 Physik Instrumente (PI) GmbH & Co. KG, E-727, 0118027690, 14.04.01.02
PIasynAxis::PIasynAxis() 0: 1
PIasynAxis::PIasynAxis() 1: 2
PIasynAxis::PIasynAxis() 2: 3
dbLoadRecords("/usr/local/epics/motor-2019-04-02/db/PI_Support.db","P=PIE712:,R=m1:,PORT=PIasyn3,ADDR=0,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/motor-2019-04-02/db/PI_Support.db","P=PIE712:,R=m2:,PORT=PIasyn3,ADDR=1,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/motor-2019-04-02/db/PI_Support.db","P=PIE712:,R=m3:,PORT=PIasyn3,ADDR=2,TIMEOUT=1")
dbLoadRecords("/usr/local/epics/motor-2019-04-02/db/PI_SupportCtrl.db","P=PIE712:,R=m1:,PORT=PIasyn3,ADDR=0,TIMEOUT=1")
asynReport 10 “PIasyn3”
asynManager:report port “PIasyn3” not found
#setIocLogDisable 0
#iocLogInit
iocInit
Starting iocInit
[...]
De: Mark Rivers <[email protected]>
Enviado: segunda-feira, 8 de abril de 2019 15:55:40
Para: Allan Serra Braga Bugyi
Cc: [email protected]
Assunto: RE: asynMotor device support and the motor specific driver (asynMotorContorller)
asynReport says that port PIasyn3 does exist, so the commands I told you do use to set its trace mask should work. Perhaps you put them before the line to create the port,
rather than after?
Try enabling that, and disable the trace for the TCP port to reduce the number of messages.
Mark
asynReport
tcpip_e712 multiDevice:No canBlock:Yes autoConnect:Yes
PIasyn3 multiDevice:Yes canBlock:Yes autoConnect:Yes
Simulation motor driver PIasyn3, numAxes=3
axis 0
axis 1
axis 2
Port: PIasyn3
Please find it attached.
Thanks,
Allan
De: Mark Rivers <[email protected]>
Enviado: segunda-feira, 8 de abril de 2019 15:07:15
Para: Allan Serra Braga Bugyi
Cc: [email protected]
Assunto: Re: asynMotor device support and the motor specific driver (asynMotorContorller)
Turn the asynTrace on the IP port back to 9.
After the IOC boots type this command:
asynReport
I would have expected port PIasyn3 to exist.
Mark
Sent from my iPhone
On Apr 8, 2019, at 1:00 PM, Allan Serra Braga Bugyi <[email protected]<mailto:[email protected]>> wrote:
It says:
asynManager:report port “PIasyn3” not found
Please find attached the log.
Allan
<http://lnls.cnpem.br>
________________________________
De: Mark Rivers <[email protected]<mailto:[email protected]>>
Enviado: segunda-feira, 8 de abril de 2019 14:10:13
Para: Allan Serra Braga Bugyi
Cc: [email protected]<mailto:[email protected]>
Assunto: RE: asynMotor device support and the motor specific driver (asynMotorContorller)
Hi Allan,
What does the following command show?
asynReport 10 “PIasyn3”
You can also add these commands to your asynMotor.E-712.cmd script after PI_GCS2_CreateController("PIasyn3", "tcpip_e712",3, 0,0, 10, 250)
asynSetTraceIOMask("PIasyn3", -1, 0x2)
asynSetTraceMask("PIasyn3", -1, 0xff)
This will show lots more debugging info.
Mark
From: Allan Serra Braga Bugyi <[email protected]<mailto:[email protected]>>
Sent: Monday, April 8, 2019 9:59 AM
To: Mark Rivers <[email protected]<mailto:[email protected]>>
Cc: [email protected]<mailto:[email protected]>
Subject: Re: asynMotor device support and the motor specific driver (asynMotorContorller)
Hi Mark,
Yes, I already instantiated the driver and it's the one you thought. Below I'm showing you the files used to run the IOC. However, the stage is not responding when I do a caput to its VAL field of the motor record, in order to move. I believe that the device
support is not able to load the PI commands, the reason for the stage not responding. Besides, I'm not sure if the PI's sources are a complete validated solution, since I didn't find the command set (used by start/build/end transaction) defined anywhere. What
I did find were several methods inside the PIGCSController class which use the send/receive message function from asynOctetSyncIO interface in order to communicate with the stage. So I'm confused about using this driver:
- Calling these methods separately using the asynPortDriver methodology of pasynUnser->reason and OUT and INP fields;
- Or letting the device support to do all the job, in case of having the GCS command list loaded.
Since the intention is to obviously use the motor record, I'm obliged to go with the second approach.
Also, please find a log file attached.
--
EPICS IOC's files
* st.cmd
#!/usr/local/epics/synApps_6_0/support/motor-R6-10-1/motorExApp/WithAsyn/O.linux-x86_64/WithAsyn
< envPaths
## Register all support components
dbLoadDatabase("${TOP}/dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
drvAsynIPPortConfigure("tcpip_e712","10.0.9.74:50000",0,0,0)
asynOctetConnect("tcpip_e712", "tcpip_e712")
asynOctetSetInputEos("tcpip_e712",0,"\n")
< asynMotor.E-712.cmd
iocInit
* asynMotor.E-712.cmd
dbLoadTemplate("asynMotor.substitutions.E-712")
PI_GCS2_CreateController("PIasyn3", "tcpip_e712",3, 0,0, 10, 250)
dbLoadRecords("${TOP}/db/PI_Support.db","P=PIE712:,R=m1:,PORT=PIasyn3,ADDR=0,TIMEOUT=1")
dbLoadRecords("${TOP}/db/PI_Support.db","P=PIE712:,R=m2:,PORT=PIasyn3,ADDR=1,TIMEOUT=1")
dbLoadRecords("${TOP}/db/PI_Support.db","P=PIE712:,R=m3:,PORT=PIasyn3,ADDR=2,TIMEOUT=1")
dbLoadRecords("${TOP}/db/PI_SupportCtrl.db","P=PIE712:,R=m1:,PORT=PIasyn3,ADDR=0,TIMEOUT=1")
* asynMotor.substitutions.E-712
file "$(MOTOR)/motorApp/Db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT, RTRY}
{PIE712:, 1, "m$(N)", "asynMotor", "PIasyn3", 0, "PI-STAGE-725-X", um, Pos, 1, .1, .2, 0, 1, .2, 0.000001, 7, 0, 300, "", ""}
{PIE712:, 2, "m$(N)", "asynMotor", "PIasyn3", 1, "PI-STAGE-725-Y", um, Pos, 1, .1, .2, 0, 1, .2, 0.000001, 7, 0, 300, "", ""}
{PIE712:, 3, "m$(N)", "asynMotor", "PIasyn3", 2, "PI-STAGE-725-Z", um, Pos, 1, .1, .2, 0, 1, .2, 0.000001, 7, 0, 300, "", ""}
}
Thank you!
Best regards,
Allan S. B. Bugyi
Technology Development Analyst
[email protected]<mailto:[email protected]>
(+55 19) 3512-3520
SOL/Beamline Software Group
Brazilian Synchrotron Light Laboratory (LNLS)
Center of Research in Energy and Materials (CNPEM)
http://lnls.cnpem.br
________________________________
De: Mark Rivers <[email protected]<mailto:[email protected]>>
Enviado: segunda-feira, 8 de abril de 2019 11:30:23
Para: Allan Serra Braga Bugyi
Cc: [email protected]<mailto:[email protected]>
Assunto: Re: asynMotor device support and the motor specific driver (asynMotorContorller)
Hi Allan,
I am not sure I fully understand your question. Have you tried to instantiate a controller and load a template file, and received errors, or are you not that far along?
Unfortunately motor does not seem to contain an example for your controller, but it does contain examples for lots of other controllers that use devMotorAsyn.c and asynMotorController.cpp.
Look in motor/iocBoot/iocWithAsyn/st.cmd.mcb4b for a simple example.
It creates a controller object with
MCB4BCreateController("MCB4B1", "serial1", 4, 100, 5000)
In your case I believe this would be:
PI_GCS2_CreateController(const char *portName, const char* asynPort, int numAxes, int priority, int stackSize, int movingPollingRate, int idlePollingRate)
and then loads a template file with several motor records:
dbLoadTemplate "motor.substitutions.mcb4b"
You need to create a template file for your motors.
The motor module is being split into separate repositories for each controller type. Each repository will contain an example IOC to help with these types of questions. These example IOCs will require help from the community, since at the APS we don't have
all of the types of controllers that are supported, so we can't test examples.
Mark
________________________________
From:
[email protected]<mailto:[email protected]> <[email protected]<mailto:[email protected]>> on behalf of Allan Serra
Braga Bugyi via Tech-talk <[email protected]<mailto:[email protected]>>
Sent: Monday, April 8, 2019 8:39 AM
To: [email protected]<mailto:[email protected]>
Subject: asynMotor device support and the motor specific driver (asynMotorContorller)
Hello all,
I need a clarification about the motor module. The asynMotor device support (defined in 'motorApp/MotorSrc/devMotorAsyn.c') tries to find an asynDrvUser interface in init_record function, so that it can find the driver commands with findDrvInfo function. I'm
using the asynMotorController driver that implements the PI's command set GCS. How can I connect this driver with the motor record through asynMotor device support?
Additional information:
A class diagram of the PI sources (please ignore the error message; using motor 6-11 now)
[cid:b8eb7e61-f6f9-41d6-8500-6813e6d2e809]
Thank you!
Allan S. B. Bugyi
Technology Development Analyst
[email protected]<mailto:[email protected]>
(+55 19) 3512-3520
SOL/Beamline Software Group
Brazilian Synchrotron Light Laboratory (LNLS)
Center of Research in Energy and Materials (CNPEM)
http://lnls.cnpem.br
<http://lnls.cnpem.br>
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.
<pi563_iocLog_motor6-11_08-04.log>
|