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: | SNC Sequencer 2.2 not working when reading remote IOC variables? |
From: | "keith.thorne" <[email protected]> |
To: | EPICS mailing list <[email protected]> |
Date: | Wed, 23 Aug 2017 11:49:26 -0500 |
Dear EPICS team At LIGO, we use the EPICS SNC Sequencer to provide communication between our real-time code and the user variables, expressed in an EPICS IOC. We use auto-generated SNC files to build and compile our EPICS executable. We had been using SNC version 2.1 and all was working (even with latest 2.1 revision). However, if we use SNC version 2.2, we are not able to get data from EPICS PVs on IOCs on other computers. Our existing SNC code (elided for relevancy - see attached x2hpiboot.i ) is ss monitorFilt{ state init { when() { ... pvGet(evar_X2_CDS_EXTERNAL_TEST); ... } state daqInit } state daqInit { when() { ... pvGet(evar_X2_CDS_EXTERNAL_TEST); evar_X2_CDS_EXTERNAL_TEST_ERR = pvConnected(evar_X2_CDS_EXTERNAL_TEST); ... } state daqProcess } This gets converted to (again elided - see attached snctest_2-2.c) # line 4369 "x2hpiboot.i" seq_pvGetTmo(seqg_env, 552/*evar_X2_CDS_EXTERNAL_TEST*/, DEFAULT, DEFAULT_TIMEOUT); ... # line 6196 "x2hpiboot.i" seq_pvGetTmo(seqg_env, 552/*evar_X2_CDS_EXTERNAL_TEST*/, DEFAULT, DEFAULT_TIMEOUT); # line 6198 "x2hpiboot.i" evar_X2_CDS_EXTERNAL_TEST_ERR = seq_pvConnected(seqg_env, 552/*evar_X2_CDS_EXTERNAL_TEST*/); However, when we run it, we get X2_CDS_EXTERNAL_TEST_ERR become 1, but we never get any updates to the variable, but continuous log messages like sevr=major pvGet(ss monitorFilt, var evar_X2_CDS_EXTERNAL_TEST, pv X2:CDS-EXTERNAL_TEST): user error (there is already a pvGet pending for this channel/state set combination) sevr=major pvGet(ss monitorFilt, var evar_X2_CDS_EXTERNAL_TEST, pv X2:CDS-EXTERNAL_TEST): user error (there is already a pvGet pending for this channel/state set combination) sevr=major pvGet(ss monitorFilt, var evar_X2_CDS_EXTERNAL_TEST, pv X2:CDS-EXTERNAL_TEST): user error (there is already a pvGet pending for this channel/state set combination) I had thought the change to seq_pvGetTmo() merely implemented the existing behavior, but perhaps I am wrong? How should we code thing that monitor external IOC variables for changes? Sincerely Keith Thorne
Attachment:
x2hpiboot.i
Description: Binary data
Attachment:
snctest_2-2.c
Description: Binary data
------ Keith Thorne <[email protected]> CDS Software Engineer LIGO Livingston Laboratory Livingston, LA 70754 Phone: (225)686-3168 Fax: (225)686-7189