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: devAsynFloat64::initCommon findInterface asynFloat64Type |
From: | "Heesterman, Peter J" <[email protected]> |
To: | "Mark Rivers" <[email protected]>, <[email protected]> |
Date: | Fri, 31 Oct 2014 18:21:12 -0000 |
Thank you, Mark. I was very unsure about this. I did my best to copy the logic of your existing file from your test project, but it’s kinda complicated, and I wouldn’t be surprised if I made a mistake. I’ll study this in more detail next week. Cheers, Peter. From: Mark Rivers [mailto:[email protected]] I see the problem: LeyboldTurboPortDriverConfigure(TURBO:1) drvAsynSerialPortConfigure(PUMP:1, COM1:, 0, 0, 0) ## Load record instances dbLoadRecords("db/LeyboldTurbo.db", "P=PUMP:1:,PORT=PUMP:1") You have connected the record to the PUMP:1 port, but you should connect it to the TURBO:1 port. PUMP:1 is the underlying serial port, which does not implement asynFloat64. You need to connect it to your LeyboldTurboPortDriver port, TURBO:1. Mark From: Heesterman, Peter J [mailto:[email protected]] Hi Mark, Attached. Cheers, Peter. From: Mark Rivers [mailto:[email protected]] Please send the complete output when the IOC starts up. Also send the output of the command asynReport 10 Mark From: Heesterman, Peter J [mailto:[email protected]] Hi Mark, Here is this constructor (unashamedly copied from your TestAsynPortDriver class): CLeyboldTurboPortDriver::CLeyboldTurboPortDriver(const char *AsynPortName) : asynPortDriver(AsynPortName, 1, /* maxAddr */ NUM_PARAMS, asynInt8ArrayMask | asynInt32Mask | asynFloat64Mask | asynFloat64ArrayMask | asynEnumMask | asynDrvUserMask, /* Interface mask */ asynInt8ArrayMask | asynInt32Mask | asynFloat64Mask | asynFloat64ArrayMask | asynEnumMask, /* Interrupt mask */ 0, /* asynFlags. This driver does not block and it is not multi-device, so flag is 0 */ 1, /* Autoconnect */ 0, /* Default priority */ 0) /* Default stack size*/ Cheers, Peter. From: Mark Rivers [mailto:[email protected]] I suspect that in the constructor for your driver you did not set the asynFloat64Mask bit in the interfaceMask argument to the asynPortDriver constructor. If your driver will do callbacks on the asynFloat64 interface you also need to set that bit in the interruptMask argument to the asynPortDriver constructor. Mark From: [email protected] [mailto:[email protected]] On Behalf Of Heesterman, Peter J Hi all, I’m developing a device that needs to read out a floating point value that forms part of a 24-byte structure read from the serial port. I’m doing this as an AsynPortDriver device. I get the above error on my record definition, but I’m not sure why. I’m still new as an EPICS user, so my question is: can you give me some advice as to what I’m missing? Many thanks, Peter. |