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: MDrive - a novice in trouble |
From: | Ron Sluiter <[email protected]> |
To: | James Rezende Piton <[email protected]> |
Cc: | "[email protected]" <[email protected]> |
Date: | Fri, 12 Nov 2010 14:16:08 -0600 |
The error message "card does not exist" is most likely an indication of a communication failure.
I presume you have read the README file describing how to configure the MDrive for the EPICS motor record support. If not, the file is located with the motor distribution here, <motor>/motorApp/ImsSrc/README
Note that the EPICS MDrive driver assumes the MDrive is configured for "party mode communication".
You should also have the following lines in your st.cmd file, as shown in the <motor>/iocBoot/WithAsyn/st.cmd.Vx file.
MDriveSetup(1, 10) MDriveConfig(0, "a-Serial[0]")
If you have configured the MDrive correctly and are still getting the "card does not exits" message, then the easiest way to diagnose a communication problem is, in general, to use an asyn record,
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=<IOCname>:,R=Record,PORT=<serial port name>,ADDR=0,OMAX=0,IMAX=0")
Connect the asyn record to the MDrive's serial port, then send it a message; e.g., "1 PR VR". You should get a response showing you the MDrive firmware version.
Hope this helps, Ron
Hello, Mark
Thank you very much for the reply. I really appreciate your help.
As you told me, I moved back to the basic_asyn_motor.db and the proper C,S values for OUT. So the "syntax" error disappeared. dbDumpRecord shows now the substitution for OUT:
(...) grecord(motor,"IOC:m2") { field(DESC,"motor 2") field(DTYP,"MDrive") field(VELO,"1") (...) field(OUT,"#C0 S1 @") (...) field(HVEL,"0.1") }
But I still have the same result:
Illegal field value PV: IOC:m1 motor_init_record_com(): card does not exist!
I checked:
epics> asynReport L0 multiDevice:No canBlock:Yes autoConnect:Yes Serial line /dev/ttyUSB0: Connected L1 multiDevice:No canBlock:Yes autoConnect:Yes Serial line /dev/ttyS0: Connected
I also dealt with Eos and asynOctetSetOutputEos and asynOctetSetInputEos, just in case.
With asyn-4-13 testGpibSerial I can communicate and send commands through the PV. For instance, I can get the parameter list produced by the controller, showing it's ok.
As a novice, I played around a lot. I printed the variables card, brdcnt and brdptr->exists with that message about motor_init_record_com() (in motorApp/MotorSrc/motordevCom.cc). I added a second serial port (and its needed MDriveConfig) to see the corresponding change in the number of boards:
Illegal field value PV: IOC:m1 motor_init_record_com(): card does not exist! card =0 of 2 cards, existing= 0 (NO=0)
The problem is due to brdptr->exists, that is obviously false. But what should I do to have the "card" 0 available?
Have a nice weekend! James