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: Heinz Junkes via Tech-talk <[email protected]>
To: "Arms, Dohn A." <[email protected]>
Cc: "[email protected]" <[email protected]>
Date: Thu, 7 Mar 2019 09:12:03 +0100
Dohn,

this does the trick

asynOctetSetInputEos("MOXA_4",0,"\n")
asynOctetSetOutputEos("MOXA_4",0,"\n”)

\n instead of \r as the terminator.

Thank you very much for your driver. I just made myself too stupid to use it correctly ;-)
Danke, Heinz
 
> On 6. Mar 2019, at 18:54, Arms, Dohn A. <[email protected]> wrote:
> 
> I don't see where you are setting the end of string terminators and, assuming "\r",  I would add:
> 
> asynOctetSetOutputEos("MOXA_4",0,"\r")
> asynOctetSetInputEos("MOXA_4",0,"\r")
> 
> The driver does not set those behind the scenes, as the hardware lets you change them.
> 
> 
> 
> 
> Just as a comparison, the setup I have for a device while using a Moxa is:
> 
> drvAsynIPPortConfigure("ip_ca1","164.54.118.20:4001", 0, 0, 0)
> asynOctetSetInputEos("ip_ca1",0,"\r")
> asynOctetSetOutputEos("ip_ca1",0,"\r")
> 
> drvAsynKeithley648x( "6485", "CA1","ip_ca1",-1);
> dbLoadRecords("$(TOP)/29idbApp/Db/Keithley6485.db","P=29idb:,CA=ca1:,PORT=CA1")
> 
> 
> 
> Dohn
> 
> 
> 
> On 3/6/19 11:38 AM, Heinz Junkes wrote:
>> I'm unsure about creating the different ports. Am I doing something wrong in the startup?
>> 
>> Danke, Heinz
>> 
>> 
>>> On 6. Mar 2019, at 16:59, Arms, Dohn A. via Tech-talk <[email protected]>
>>>  wrote:
>>> 
>>> Hi Heinz,
>>> 
>>> Sorry that my driver didn't communicate for you.
>>> 
>>> I just added to my github repo the boot directory I use for testing the 
>>> 6485
>>> and 6487 devices we have, which I forgot to add before.
>>> 
>>> Dohn
>>> 
>>> 
>>> 
>>> On 3/6/19 9:41 AM, Heinz Junkes via Tech-talk wrote:
>>> 
>>>> 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
>>>>>>> 
> 

Attachment: smime.p7s
Description: S/MIME cryptographic signature


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
Re: epics-Keithley_648x, drvAsynKeithley648x Arms, Dohn A. via Tech-talk
Re: epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes via Tech-talk
Re: epics-Keithley_648x, drvAsynKeithley648x Arms, Dohn A. via Tech-talk

Navigate by Date:
Prev: Re: Questions about channel access C API programming Johnson, Andrew N. 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 
Navigate by Thread:
Prev: Re: epics-Keithley_648x, drvAsynKeithley648x Arms, Dohn A. via Tech-talk
Next: RE: epics-Keithley_648x, drvAsynKeithley648x Mark Rivers 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 ·