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
<2008>
2009
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
<2008>
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|