EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  <20082009  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  <20082009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: asynRecord immutable fields
From: "Mark Rivers" <[email protected]>
To: "Eric Williams" <[email protected]>
Cc: [email protected]
Date: Wed, 23 Jan 2008 13:59:20 -0600
Eric,
 
The caget and caput commands are not IOC commands, they are utilities provided in EPICS base for the host (Linux, Windows, etc.).  dbpf does database access, not channel access.
 
Can you change the NOWT and TMOD fields from medm or edm?  If so, then you have proof that those fields are not "immutable".
 
>> The TIME field of the asynRecord definitely shows the record is being
>> processed when I try to write the field.
>>    
>
> Which field?
>
>  
> Either TMOD or NOWT.  When I process the genSub record, which triggers
> the write to those fields, the TIME field of the asynRec is updated.
 
That is incorrect behavior, writing to the TMOD or NOWT fields should NOT cause the TIME field to update, because those fields are not defined as PP (Process Passive).  When I test modifying those fields with dbpf the TIME field does NOT update:
 
Here is the proof:
ioc13lab> dbpr "13LAB:serial1",5
ACKS: NO_ALARM      ACKT: YES           ACMD: None          ADDR: 0             
AINP:               AOUT:               AQR: 0              ASG:                
ASP: 0x00000000     AUCT: autoConnect   BAUD: 9600          BINP: 0             
BKPT: 0x00          BOUT: 0             CNCT: Connect       DBIT: 8             
DESC:               DISA: 0             DISP: 0             DISS: NO_ALARM      
DISV: 1             DPVT: 0x0149cfc0    DRVINFO:            DSET: 0x01c758ec    
DTYP: asynRecordDevice                  ENBL: Enable        EOMR: None          
ERRS: 0x0149cc38    EVNT: 0             F64INP: 0           F64IV: 0            
F64OUT: 0           FCTL: None          FLNK:CONSTANT 0     GPIBIV: 0           
I32INP: 0           I32IV: 0            I32OUT: 0           IEOS: \r            
IFACE: asynOctet    IFMT: ASCII         IMAX: 256           IPTR: 0x0149cdb0    
LCNT: 0             LSET: 0x01250f20    MCTL: CLOCAL        
MLIS: 0x000000000000000000000000        MLOK: 0x0149d1a8    NAME: 13LAB:serial1 
NAWT: 0             NORD: 0             NOWT: 3             NRRD: 0             
NSEV: NO_ALARM      NSTA: NO_ALARM      OCTETIV: 1          OEOS: \r            
OFMT: ASCII         OMAX: 256           OPTIONIV: 1         OPTR: 0x0149ceb8    
PACT: 0             PCNCT: Connect      PHAS: 0             PINI: NO            
PORT: serial1       PPN: 0x00000000     PPNR: 0x00000000    PRIO: LOW           
PROC: 0             PRTY: None          PUTF: 0             RDES: 0x01cb2318    
REASON: 0           RPRO: 0             RSET: 0x01c758a0    SBIT: 1             
SCAN: Passive       SDIS:CONSTANT       SEVR: NO_ALARM      SOCK:               
SPR: 0              SPVT: 0x00000000    STAT: NO_ALARM      TB0: On             
TB1: Off            TB2: Off            TB3: Off            TB4: Off            
TFIL: Unknown       TIB0: Off           TIB1: Off           TIB2: Off           
TIME: 0x0000000000000000                TINP:               TIOM: 0             
TMOD: Write/Read    TMOT: 1             TMSK: 1             TPRO: 0             
TSE: 0              TSEL:CONSTANT       TSIZ: 80            UCMD: None          
UDF: 0              UI32INP: 0          UI32IV: 0           UI32MASK: 4294967295
UI32OUT: 0          VAL: G¾Ý«5ìu¢:âß  
value = 0 = 0x0

Note that the TIME field is 0. Now modify the NOWT field:

ioc13lab> dbpf "13LAB:serial1.NOWT","80"
DBR_LONG:           80        0x50                
value = 0 = 0x0
ioc13lab> dbpr "13LAB:serial1",5        
ACKS: NO_ALARM      ACKT: YES           ACMD: None          ADDR: 0             
AINP:               AOUT:               AQR: 0              ASG:                
ASP: 0x00000000     AUCT: autoConnect   BAUD: 9600          BINP: 0             
BKPT: 0x00          BOUT: 0             CNCT: Connect       DBIT: 8             
DESC:               DISA: 0             DISP: 0             DISS: NO_ALARM      
DISV: 1             DPVT: 0x0149cfc0    DRVINFO:            DSET: 0x01c758ec    
DTYP: asynRecordDevice                  ENBL: Enable        EOMR: None          
ERRS: 0x0149cc38    EVNT: 0             F64INP: 0           F64IV: 0            
F64OUT: 0           FCTL: None          FLNK:CONSTANT 0     GPIBIV: 0           
I32INP: 0           I32IV: 0            I32OUT: 0           IEOS: \r            
IFACE: asynOctet    IFMT: ASCII         IMAX: 256           IPTR: 0x0149cdb0    
LCNT: 0             LSET: 0x01250f20    MCTL: CLOCAL        
MLIS: 0x000000000000000000000000        MLOK: 0x0149d1a8    NAME: 13LAB:serial1 
NAWT: 0             NORD: 0             NOWT: 80            NRRD: 0             
NSEV: NO_ALARM      NSTA: NO_ALARM      OCTETIV: 1          OEOS: \r            
OFMT: ASCII         OMAX: 256           OPTIONIV: 1         OPTR: 0x0149ceb8    
PACT: 0             PCNCT: Connect      PHAS: 0             PINI: NO            
PORT: serial1       PPN: 0x00000000     PPNR: 0x00000000    PRIO: LOW           
PROC: 0             PRTY: None          PUTF: 0             RDES: 0x01cb2318    
REASON: 0           RPRO: 0             RSET: 0x01c758a0    SBIT: 1             
SCAN: Passive       SDIS:CONSTANT       SEVR: NO_ALARM      SOCK:               
SPR: 0              SPVT: 0x00000000    STAT: NO_ALARM      TB0: On             
TB1: Off            TB2: Off            TB3: Off            TB4: Off            
TFIL: Unknown       TIB0: Off           TIB1: Off           TIB2: Off           
TIME: 0x0000000000000000                TINP:               TIOM: 0             
TMOD: Write/Read    TMOT: 1             TMSK: 1             TPRO: 0             
TSE: 0              TSEL:CONSTANT       TSIZ: 80            UCMD: None          
UDF: 0              UI32INP: 0          UI32IV: 0           UI32MASK: 4294967295
UI32OUT: 0          VAL: G¾Ý«5ìu¢:âß  
value = 0 = 0x0

Note that the TIME field is still 0. Now modify the TMOD field:

ioc13lab> dbpf "13LAB:serial1.TMOD","Read"
DBR_STRING:          Read     
value = 0 = 0x0
ioc13lab> dbpr "13LAB:serial1",5          
ACKS: NO_ALARM      ACKT: YES           ACMD: None          ADDR: 0             
AINP:               AOUT:               AQR: 0              ASG:                
ASP: 0x00000000     AUCT: autoConnect   BAUD: 9600          BINP: 0             
BKPT: 0x00          BOUT: 0             CNCT: Connect       DBIT: 8             
DESC:               DISA: 0             DISP: 0             DISS: NO_ALARM      
DISV: 1             DPVT: 0x0149cfc0    DRVINFO:            DSET: 0x01c758ec    
DTYP: asynRecordDevice                  ENBL: Enable        EOMR: None          
ERRS: 0x0149cc38    EVNT: 0             F64INP: 0           F64IV: 0            
F64OUT: 0           FCTL: None          FLNK:CONSTANT 0     GPIBIV: 0           
I32INP: 0           I32IV: 0            I32OUT: 0           IEOS: \r            
IFACE: asynOctet    IFMT: ASCII         IMAX: 256           IPTR: 0x0149cdb0    
LCNT: 0             LSET: 0x01250f20    MCTL: CLOCAL        
MLIS: 0x000000000000000000000000        MLOK: 0x0149d1a8    NAME: 13LAB:serial1 
NAWT: 0             NORD: 0             NOWT: 80            NRRD: 0             
NSEV: NO_ALARM      NSTA: NO_ALARM      OCTETIV: 1          OEOS: \r            
OFMT: ASCII         OMAX: 256           OPTIONIV: 1         OPTR: 0x0149ceb8    
PACT: 0             PCNCT: Connect      PHAS: 0             PINI: NO            
PORT: serial1       PPN: 0x00000000     PPNR: 0x00000000    PRIO: LOW           
PROC: 0             PRTY: None          PUTF: 0             RDES: 0x01cb2318    
REASON: 0           RPRO: 0             RSET: 0x01c758a0    SBIT: 1             
SCAN: Passive       SDIS:CONSTANT       SEVR: NO_ALARM      SOCK:               
SPR: 0              SPVT: 0x00000000    STAT: NO_ALARM      TB0: On             
TB1: Off            TB2: Off            TB3: Off            TB4: Off            
TFIL: Unknown       TIB0: Off           TIB1: Off           TIB2: Off           
TIME: 0x0000000000000000                TINP:               TIOM: 0             
TMOD: Read          TMOT: 1             TMSK: 1             TPRO: 0             
TSE: 0              TSEL:CONSTANT       TSIZ: 80            UCMD: None          
UDF: 0              UI32INP: 0          UI32IV: 0           UI32MASK: 4294967295
UI32OUT: 0          VAL: G¾Ý«5ìu¢:âß  
value = 0 = 0x0

Note that the TIME field is still 0. Now write to the AOUT field which is defined as PP:

ioc13lab> dbpf "13LAB:serial1.AOUT", "TEST"
DBR_STRING:          TEST     
value = 0 = 0x0
ioc13lab> dbpr "13LAB:serial1",5           
ACKS: MAJOR         ACKT: YES           ACMD: None          ADDR: 0             
AINP:               AOUT: TEST          AQR: 0              ASG:                
ASP: 0x00000000     AUCT: autoConnect   BAUD: 9600          BINP: 0             
BKPT: 0x00          BOUT: 0             CNCT: Connect       DBIT: 8             
DESC:               DISA: 0             DISP: 0             DISS: NO_ALARM      
DISV: 1             DPVT: 0x0149cfc0    DRVINFO:            DSET: 0x01c758ec    
DTYP: asynRecordDevice                  ENBL: Enable        EOMR: None          
ERRS: 0x0149cc38    EVNT: 0             F64INP: 0           F64IV: 0            
F64OUT: 0           FCTL: None          FLNK:CONSTANT 0     GPIBIV: 0           
I32INP: 0           I32IV: 0            I32OUT: 0           IEOS: \r            
IFACE: asynOctet    IFMT: ASCII         IMAX: 256           IPTR: 0x0149cdb0    
LCNT: 0             LSET: 0x01250f20    MCTL: CLOCAL        
MLIS: 0x000000000000000000000000        MLOK: 0x0149d1a8    NAME: 13LAB:serial1 
NAWT: 0             NORD: 0             NOWT: 80            NRRD: 0             
NSEV: NO_ALARM      NSTA: NO_ALARM      OCTETIV: 1          OEOS: \r            
OFMT: ASCII         OMAX: 256           OPTIONIV: 1         OPTR: 0x0149ceb8    
PACT: 0             PCNCT: Connect      PHAS: 0             PINI: NO            
PORT: serial1       PPN: 0x00000000     PPNR: 0x00000000    PRIO: LOW           
PROC: 0             PRTY: None          PUTF: 0             RDES: 0x01cb2318    
REASON: 0           RPRO: 0             RSET: 0x01c758a0    SBIT: 1             
SCAN: Passive       SDIS:CONSTANT       SEVR: MAJOR         SOCK:               
SPR: 0              SPVT: 0x00000000    STAT: READ          TB0: On             
TB1: Off            TB2: Off            TB3: Off            TB4: Off            
TFIL: Unknown       TIB0: Off           TIB1: Off           TIB2: Off           
TIME: 0x21f8fd83090a203c                TINP:               TIOM: 0             
TMOD: Read          TMOT: 1             TMSK: 1             TPRO: 0             
TSE: 0              TSEL:CONSTANT       TSIZ: 80            UCMD: None          
UDF: 0              UI32INP: 0          UI32IV: 0           UI32MASK: 4294967295
UI32OUT: 0          VAL: G¾Ý«5ìu¢:âß  
value = 0 = 0x0

Note that the TIME field has now changed. I suspect that perhaps you have the attribute PP on your gensub links for the TMOD and NOWT fields, while those should actually be NPP.  But I still don't understand why the fields would not update.

Mark

 

________________________________

From: Eric Williams [mailto:[email protected]]
Sent: Wed 1/23/2008 1:33 PM
To: Mark Rivers
Cc: [email protected]
Subject: Re: asynRecord immutable fields



Sorry, I wasn't explicit enough.

I added 'CA' to the link specifier for the genSub output fields in the
database file, but the NOWT and TMOD fields still won't change.

My IOC doesn't appear to have 'caput' available from the command line,
but 'dbpf' works just fine to change those fields.
--
eric

Mark Rivers wrote:
> Eric,
>
>  
>> I didn't think of that, but I just tried it and the results
>> are the same.
>>    
>
> I am not sure what you my by "tried it" (using channel access?) and "the
> results are the same".  The same as with the gensub record, or the same
> as I reported?  Were you able to change the NOWT and TMOD fields from
> channel access?
>
> I can defintely change them from channel access, using the caget and
> caput commands on Linux:
>
> corvette> caget 13LAB:serial1.TMOD
> 13LAB:serial1.TMOD             Write/Read
> corvette> caput 13LAB:serial1.TMOD Read
> Old : 13LAB:serial1.TMOD             Write/Read
> New : 13LAB:serial1.TMOD             Read
> corvette> caget 13LAB:serial1.TMOD
> 13LAB:serial1.TMOD             Read
> corvette> caput 13LAB:serial1.TMOD "Write/Read"
> Old : 13LAB:serial1.TMOD             Read
> New : 13LAB:serial1.TMOD             Write/Read
> corvette> caget 13LAB:serial1.TMOD
> 13LAB:serial1.TMOD             Write/Read
> corvette> caget 13LAB:serial1.NOWT
> 13LAB:serial1.NOWT             80
> corvette> caput 13LAB:serial1.NOWT 120
> Old : 13LAB:serial1.NOWT             80
> New : 13LAB:serial1.NOWT             120
> corvette> caget 13LAB:serial1.NOWT
> 13LAB:serial1.NOWT             120
> corvette> caput 13LAB:serial1.NOWT 80
> Old : 13LAB:serial1.NOWT             120
> New : 13LAB:serial1.NOWT             80
> corvette> caget 13LAB:serial1.NOWT
> 13LAB:serial1.NOWT             80
>
> Can you do this?
>
>  
>> The TIME field of the asynRecord definitely shows the record is being
>> processed when I try to write the field.
>>    
>
> Which field?
>
> Mark
>
>  
>> -----Original Message-----
>> From: Eric Williams [mailto:[email protected]]
>> Sent: Wednesday, January 23, 2008 12:25 PM
>> To: Mark Rivers
>> Cc: [email protected]
>> Subject: Re: asynRecord immutable fields
>>
>> I didn't think of that, but I just tried it and the results
>> are the same.
>>
>> The TIME field of the asynRecord definitely shows the record is being
>> processed when I try to write the field.
>> --
>> eric
>>
>> Mark Rivers wrote:
>>    
>>> Those fields are definitely writeable from EPICS channel
>>>      
>> access.  Have you tested that?
>>    
>>> 
>>> I can't say that I've ever tried linking to them with
>>>      
>> database links, but I can't see why it would not work.
>>    
>>> 
>>> Mark
>>> 
>>>
>>> ________________________________
>>>
>>> From: [email protected] on behalf of Eric Williams
>>> Sent: Tue 1/22/2008 7:40 PM
>>> To: [email protected]
>>> Subject: asynRecord immutable fields
>>>
>>>
>>>
>>> I'm trying to drive a GPIB device with a genSub record through an
>>> asynRecord, but I've been unable to change some of the
>>>      
>> asynRecord fields
>>    
>>> that I need to perform all the necessary control functions.
>>>
>>> In particular, I've been unable to modify TMOD or NOWT, which I've
>>> linked to output fields of the genSub record.  (There are
>>>      
>> probably other
>>    
>>> asynRecord fields that act similarly, but these are the
>>>      
>> ones I've run
>>    
>>> into so far.)  Writing to AOUT works OK.
>>>
>>> If I link my genSub record output fields instead to "normal" records
>>> (eg: longout), then the values go through just fine.  But they never
>>> show up when linked to the asynRecord fields.  In contrast,
>>>      
>> I'm able to
>>    
>>> modify these fields through dbpf on the console.
>>>
>>> I've looked at the DBD file, and I'm not able to find any
>>>      
>> reason why one
>>    
>>> field would be writable and another isn't.  Anybody have a guess?
>>> --
>>> eric
>>>
>>> Environment:
>>>
>>>     linux-x86
>>>     epics 3.14.9
>>>     asyn 4-8
>>>     genSub 4-6
>>>
>>>
>>>
>>>
>>>  
>>>      
>>    





Replies:
Re: asynRecord immutable fields Eric Williams
References:
RE: asynRecord immutable fields Mark Rivers
Re: asynRecord immutable fields Eric Williams

Navigate by Date:
Prev: Re: asynRecord immutable fields Eric Williams
Next: Re: asynRecord immutable fields Eric Williams
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  <20082009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: asynRecord immutable fields Eric Williams
Next: Re: asynRecord immutable fields Eric Williams
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  <20082009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 02 Sep 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·