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  <20192020  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  <20192020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: epics-Keithley_648x, drvAsynKeithley648x
From: Mark Rivers via Tech-talk <[email protected]>
To: 'Heinz Junkes' <[email protected]>
Cc: "[email protected]" <[email protected]>
Date: Wed, 6 Mar 2019 17:50:39 +0000
Since you are using a MOXA device I assume the hardware is RS-232?  If so I would expect your startup command file to be setting the input and output terminators, but I don't see that in your command script?  That could explain this error:

> 2019/03/06 14:47:24.055 Keithley6485 writeRead: error 1 wrote "*IDN?"
> drvAsynKeithley648x::drvAsynKeithley6485 port Keithley6485 failed to acquire identification

It appears to have sent the IDN? command, but not received a response.  That could well be because you have not set the terminators.

Mark


-----Original Message-----
From: Heinz Junkes <[email protected]> 
Sent: Wednesday, March 6, 2019 9:42 AM
To: Mark Rivers <[email protected]>
Cc: [email protected]
Subject: Re: epics-Keithley_648x, drvAsynKeithley648x

Unfortunately, I had to give up here due to lack of time. I couldn't communicate 
with this Keithley IP-asyn-driver.

I am now on Streamdevice 

(Danke Christoph)

“
not sure what driver you are trying to use, but you can also use the
Streamdevice support from LBNL:
https://epics.anl.gov/download/modules/index.php
https://epics.anl.gov/download/modules/Keithley6487-1.1.tar.gz

the Keithley 6485 is basically a Keithley 6487 with fewer functionality
(no limit Tests and Voltage source). Most commands are supported by the
6485 as well.
It's used like any other Streamdevice support.

Best regards,
Christoph
“

Gruss,
Heinz



> On 6. Mar 2019, at 14:51, Heinz Junkes via Tech-talk <[email protected]> wrote:
> 
> Looks much better.
> 
> Now I get it. The function drvAsynKeithley648x returns a port for communicating. I hadn't understood that.
> 
> ...
> drvAsynIPPortConfigure("MOXA_4", "172.24.192.29:4004", 0, 0, 0)
> drvAsynKeithley648x("6485", "Keithley6485", "MOXA_4",0)
> 2019/03/06 14:47:24.055 Keithley6485 writeRead: error 1 wrote "*IDN?"
> drvAsynKeithley648x::drvAsynKeithley6485 port Keithley6485 failed to acquire identification
> asynSetTraceIOMask("MOXA_4", 0, 0x2)
> asynSetTraceMask("MOXA_4", 0, 0x9)
> dbLoadRecords("db/Keithley6485.db", "P=trARPES:, CA=Sample:, PORT=Keithley6485”)
> …
> 
> 2019/03/06 14:48:46.391 trARPES:Sample:read devAsynFloat64::processCallbackInput process read error 
> 2019/03/06 14:48:46.391 trARPES:Sample:readStatusOverflow devAsynInt32::processCallbackInput process read error 
> 2019/03/06 14:48:46.391 trARPES:Sample:readStatusFilter devAsynInt32::processCallbackInput process read error 
> 2019/03/06 14:48:46.392 trARPES:Sample:readStatusMath devAsynInt32::processCallbackInput process read error 
> 2019/03/06 14:48:46.392 trARPES:Sample:readStatusNull devAsynInt32::processCallbackInput process read error 
> 2019/03/06 14:48:46.392 trARPES:Sample:readStatusLimits devAsynInt32::processCallbackInput process read error 
> 2019/03/06 14:48:46.392 trARPES:Sample:readStatusOvervoltage devAsynInt32::processCallbackInput process read error 
> …
> 
> Now I have to check if the device is connected ;-)
> 
> Danke,
> Heinz
> 
>> On 6. Mar 2019, at 14:28, Mark Rivers <[email protected]> wrote:
>> 
>> OK, so the actual code to create the port is this, it does take 4 arguments:
>> 
>> int drvAsynKeithley648x(const char *type, const char *myport,
>>                       const char *ioport, int ioaddr)
>> 
>> 
>> So your code should call
>> 
>> 
>> drvAsynIPPortConfigure("MOXA_4", "172.24.192.29:4004", 0, 0, 0)
>> drvAsynKeithley648x("6485", "Keithley6485", "MOXA_4",0)
>> 
>> asynSetTraceIOMask("MOXA_4", 0, 0x2)
>> asynSetTraceMask("MOXA_4", 0, 0x9)
>> dbLoadRecords("db/Keithley6485.db", "P=trARPES:, CA=Sample:, PORT=Kiethley6485")
>> 
>> What do you see if you try that?
>> 
>> 
>> ________________________________
>> From: Heinz Junkes <[email protected]>
>> Sent: Wednesday, March 6, 2019 7:09 AM
>> To: Mark Rivers
>> Cc: [email protected]
>> Subject: Re: epics-Keithley_648x, drvAsynKeithley648x
>> 
>> Hello, Mark,
>> 
>> thank you for your answers. Unfortunately it doesn't work that way either:
>> 
>> startup
>> ...
>> drvAsynIPPortConfigure("MOXA_4", "172.24.192.29:4004", 0, 0, 0)
>> drvAsynKeithley648x("6485", "MOXA_4",0)
>> drvAsynKeithley648x::drvAsynKeithley6485 port MOXA_4 can't connect to asynCommon on Octet server 0 address 0.
>> asynSetTraceIOMask("MOXA_4", 0, 0x2)
>> asynSetTraceMask("MOXA_4", 0, 0x9)
>> dbLoadRecords("db/Keithley6485.db", "P=trARPES:, CA=Sample:, PORT=6485")
>> ...
>> 
>> The driver is from https://github.com/dohnarms/epics-Keithley_648x
>> 
>> In the driver there seems to be a mismatch
>> 
>> ...
>> 
>> /* Public interface forward references */
>> int drvAsynKeithley648x(const char* myport,const char* ioport, int ioaddr);
>> ...
>> 
>> 
>> /****************************************************************************
>> * Define public interface methods
>> ****************************************************************************/
>> int drvAsynKeithley648x(const char *type, const char *myport,
>>                       const char *ioport, int ioaddr)
>> {
>> int status = asynSuccess;
>> Port* pport;
>> //  int i;
>> asynStandardInterfaces *pInterfaces;
>> 
>> char inpBuf[BUFFER_SIZE];
>> int eomReason;
>> 
>> pport = (Port*)callocMustSucceed(1,sizeof(Port),"drvAsynKeithley6485");
>> 
>> ...
>> 
>> /****************************************************************************
>> * Register public methods
>> ****************************************************************************/
>> 
>> /* Initialization method definitions */
>> static const iocshArg arg0 = {"type",iocshArgString};
>> static const iocshArg arg1 = {"myport",iocshArgString};
>> static const iocshArg arg2 = {"ioport",iocshArgString};
>> static const iocshArg arg3 = {"ioaddr",iocshArgInt};
>> static const iocshArg* args[]= {&arg0,&arg1,&arg2,&arg3};
>> static const iocshFuncDef drvAsynKeithley648xFuncDef =
>> {"drvAsynKeithley648x",4,args};
>> static void drvAsynKeithley648xCallFunc(const iocshArgBuf* args)
>> {
>> drvAsynKeithley648x(args[0].sval,args[1].sval,args[2].sval,args[3].ival);
>> }
>> 
>> /* Registration method */
>> static void drvAsynKeithley648xRegister(void)
>> {
>> static int firstTime = 1;
>> 
>> if( firstTime )
>>   {
>>     firstTime = 0;
>>     iocshRegister( &drvAsynKeithley648xFuncDef,drvAsynKeithley648xCallFunc );
>>   }
>> }
>> epicsExportRegistrar( drvAsynKeithley648xRegister );
>> 
>> 
>> That is why I have given four arguments in the st.cmd.
>> 
>> Danke,
>> Heinz
>> 
>> 
>> 
>>> On 6. Mar 2019, at 13:51, Mark Rivers <[email protected]> wrote:
>>> 
>>> My comments are:
>>> Your original message says that drvAsynKeithley6845 take 3 arguments.  Your actual commands call drvAsynKeithey648x with 4 arguments.  Why the difference?  Does 648x take an initial argument with the exact model number, or is that the name of the new port?
>>> 
>>> I don't see the need for the asynOctetConnect line.
>>> 
>>> Maybe this will work:
>>> 
>>> drvAsynIPPortConfigure("MOXA_4", "172.24.192.29:4004", 0, 0, 0)
>>> drvAsynKeithley648x("6485", "MOXA_4",0)
>>> asynSetTraceIOMask("MOXA_4", 0, 0x2)
>>> asynSetTraceMask("MOXA_4", 0, 0x9)
>>> dbLoadRecords("db/Keithley6485.db", "P=trARPES:, CA=Sample:, "6845")
>>> 
>>> I deleted the asynOctetConnect, deleted the 3 argument to drvKeithley648x, and changed the port passed in dbLoadRecords.
>>> 
>>> Is this driver code on Github or somewhere else we can look at it?
>>> 
>>> Mark
>> 
> 


References:
epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes via Tech-talk
Re: epics-Keithley_648x, drvAsynKeithley648x Mark Rivers via Tech-talk
Re: epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes via Tech-talk
Re: epics-Keithley_648x, drvAsynKeithley648x Mark Rivers via Tech-talk
Re: epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes via Tech-talk
Re: epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes via Tech-talk

Navigate by Date:
Prev: Re: epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes via Tech-talk
Next: Re: epics-Keithley_648x, drvAsynKeithley648x Arms, Dohn A. 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  <20192020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes via Tech-talk
Next: Multi-axis sequenced move using asynMotor pseudo axis David Vine 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  <20192020  2021  2022  2023  2024 
ANJ, 07 Mar 2019 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·