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: | SSEQ record does not "appear" to be demanding callback completion from an asynchronous record forward-linked to another asynchronous record |
From: | "Wang, Andrew via Tech-talk" <tech-talk at aps.anl.gov> |
To: | EPICS tech-talk <tech-talk at aps.anl.gov> |
Date: | Tue, 28 Mar 2023 03:58:10 +0000 |
Hi all, Today I encountered something kind of interesting and would like to get some outside opinions. To begin with, I have an IOC for an instrument that I shall call DemoInstr. I have a “setter” and “getter” record for one of its properties. The two records are shown below. record(ao, “SET_PROP”) { field(SCAN, “Passive”) field(DTYP, “stream”) field(PRIO, "HIGH") field(OUT, "@DemoInstr.proto setProp $(PORT)") field(FLNK, “GET_PROP”) } record(ai, “GET_PROP”) { field(SCAN, “Passive”) field(DTYP, “stream”) field(INP, "@DemoInstr.proto getProp $(PORT)") } In a separate IOC that I shall call Setup, I declared a SEQ record called “WRITE_INST” that should write a value into “setProp” when it is processed. Then, “PROCESS_INST”, a SSEQ record, will process because it is forward-linked to “WRITE_INST”.
“PROCESS_INST” should wait for a completion callback with the way it is written. However, when “PRINT_SET_AND_GET” processes, it reports that GET_PROP still contains the previous value. Shouldn’t GET_PROP have been updated because of the completion callback?
I feel like I am missing something in my understanding of completion callbacks. record(ao, “VAL”) { field(SCAN, “Passive”) } record(seq, "WRITE_INST") { field(SCAN, "Passive") field(SELM, "All") field(DOL1, “VAL") field(LNK1, "SET_PROP") field(FLNK, “PROCESS_INST ") } record(sseq, “PROCESS_INST") { field(SCAN, "Passive") field(SELM, "All") field(LNK1, "SET_PROP.PROC CA") field(WAIT1, "Wait") field(FLNK, “PRINT_SET_AND_GET”) } record(aSub, “PRINT_SET_AND_GET") { field(SCAN, "Passive") field(SNAM, “print_set_and_get”) field(INPA, “SET_PROP”) field(INPB, “GET_PROP”) } Thank you, Andy |