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> 2025 | 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> 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: Output record with TSE=-2 and info(asyn:READBACK, "1") returns <undefined> time. |
From: | Mark Rivers via Tech-talk <tech-talk at aps.anl.gov> |
To: | Yann Mandza <yann.mandza at ess.eu>, Torsten Bögershausen <tboegi at edom.se>, "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov> |
Date: | Sat, 11 May 2024 17:13:00 +0000 |
What do you observe with the code you showed in the last message?
Mark
From: Yann Mandza <yann.mandza at ess.eu>
Sent: Saturday, May 11, 2024 11:50 AM To: Torsten Bögershausen <tboegi at edom.se>; tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>; Mark Rivers <rivers at cars.uchicago.edu> Subject: RE: Output record with TSE=-2 and info(asyn:READBACK, "1") returns <undefined> time. Hey Torsten, Mark pitched in, but I forgot to add you in my response.
> Do you call setTimeStamp() ?
Here the implementation for my write method. Testing for normal async with caput first.
asynStatus drvAsynIsegHalService::writeFloat64( asynUser *pasynUser, epicsFloat64 value )
{
static const char *functionName = "writeFloat64";
const char *propertyName;
epicsTimeStamp timeStamp;
char sVal[WRITE_BUF_LEN];
int function = pasynUser->reason;
asynStatus status = asynSuccess;
epicsSnprintf( sVal, WRITE_BUF_LEN, "%f", value );
/*call driver methods and return asynError if write operation fails*/
// Get current IOC time.
epicsTimeGetCurrent( &timeStamp );
// tried this without success.
setTimeStamp(&timeStamp);
// update value of parameter
status = ( asynStatus ) setDoubleParam( function, value );
status = ( asynStatus ) callParamCallbacks( );
if( status )
epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize,
"%s:%s: status=%d, function=%d, value=%f",
session_, functionName, status, function, value );
else
asynPrint( pasynUser, ASYN_TRACEIO_DEVICE,
"%s:%s: function=%d, value=%f\n",
session_, functionName, function, value );
return status;
}
Regards,
Yann
-----Original Message-----
From: Torsten Bögershausen <tboegi at edom.se> Sent: Saturday, May 11, 2024 4:57 PM To: Yann Mandza <yann.mandza at ess.eu>; tech-talk at aps.anl.gov Subject: Re: Output record with TSE=-2 and info(asyn:READBACK, "1") returns <undefined> time. On 2024-05-11 13:39, Yann Mandza via Tech-talk wrote:
> Dear all,
>
> I am working onan Asyn Port driver using with asynR4-42 on a Linux
> machine. Am trying to add timing support for Output record using
> TSE=-2 and
>
> and info(asyn:READBACK, "1"). When I caget an output PV with TSE=-2
> after caput to it the time obtained is <undefined> though the value is
> well written to the device.
>
> A camonitor on a PV with TSE=-2 and info(asyn:READBACK, "1") show an
> <undefined> time too though the read value is correct. I would like to
> associate the device timestamp to the record for output readback, and
> the current time return by epicsTimeGetCurrent to the record after a
> caput. In my poller thread this is how I set the time stamp:
>
> epicsUInt32 seconds = 0;
>
> epicsUInt32 microsecs = 0;
>
> epicsTimeStamp time;
>
> sscanf( timeStampLastChanged/*hardware time string*, "%u.%u",
> &seconds, µsecs ) != 2 )
>
> time.secPastEpoch = seconds - POSIX_TIME_AT_EPICS_EPOCH;
>
> time.nsec = microsecs * 100000;
>
> pasynUser->timestamp = time;
Do you call setTimeStamp() ?
|