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
|