Experimental Physics and
| |||||||||||||||||||||||||
|
- How have you measured the 50 microseconds between steps 5 and 9?
- What evidence do you have that the delay has anything to do with EPICS record processing, and is not just the time required for the Linux driver to do the hardware I/O? Thank you for your explanation. With Regards Vishnu From: Mark Rivers <[email protected]> Sent: Sat, 15 Feb 2014 00:59:22 To: "'[email protected]'" <[email protected]> Cc: techtalk <[email protected]> Subject: Re: record processing time Hi Vishnu, You said: > The recored TEST:OUT0-O is connected to hardware all output records are not synchronous. That is not true, they are synchronous. That is because when you created your driver pasynManager->registerPort(pDrvPvt->portName, ASYN_MULTIDEVICE , 1, /* autoconnect */ 0, /* medium priority */ 0); /* default stacksize */ You only set the flag ASYN_MULTIDEVICE, not ASYN_MULTIDEVICE | ASYN_CANBLOCK. Since you did not ASYN_CANBLOCK you have created a synchronous driver, not an asynchronous driver. In a synchronous driver the following steps will all happen in the same thread that processes the dfanout record: 1) Start processing dfanout record 2) Process dfanout record OUTA, i.e. process record TEST:OUT0-O 3) Call device support for TEST:OUT0-O 4) Call driver for TEST:OUT0-O 5) Do the I/O to your hardware for TEST:OUT0-O 6) Process dfanout record OUTB, i.e. process record TEST:OUT1-O 7) Call device support for TEST:OUT1-O 8) Call driver for TEST:OUT1-O 9) Do the I/O to your hardware for TEST:OUT1-O … I believe that you are saying that the time between steps 5 and 9 above is 50 microseconds. This is definitely possible, since this includes the time to call the driver and do the actual hardware I/O on your Linux system.
Here are my questions. - How have you measured the 50 microseconds between steps 5 and 9? - What evidence do you have that the delay has anything to do with EPICS record processing, and is not just the time required for the Linux driver to do the hardware I/O? Mark From: [email protected] [mailto:[email protected]]
Dear Mark, Thank you. pasynManager->registerPort? Are you using asynPortDriver base class? pasynManager->registerPort(pDrvPvt->portName, ASYN_MULTIDEVICE , 1, /* autoconnect */ 0, /* medium priority */ 0); /* default stacksize */
What do you mean by that? How have you measured it? With using API of linux driver no delay.
field(OUTA, "TEST:OUT0-O PP") field(OUTB, "TEST:OUT1-O PP") field(OUTC, "TEST:OUT2-O PP") in the above dfanout record, what would be the time difference between processing OUTA, "TEST:OUT0-O PP" and OUTB, "TEST:OUT1-O PP". Thanks & regards
> The recored TEST:OUT0-O is connected to hardware all output records are not synchronous. Are you sure they are not synchronous? What flags did you use in your asyn driver when calling pasynManager->registerPort? Are you using asynPortDriver base class? > Hardware also having no delay. What do you mean by that? How have you measured it? > is dfanout record execute each link one by one or all simultaneously? It processes one link at a time. How could it do them simultaneously? Mark From:
[email protected] [mailto:[email protected]]
The recored TEST:OUT0-O is connected to hardware all output records are not synchronous. I am using asynDriver. and all these records have same asyn intereface as they are similar. Hardware also having no delay. is dfanout record execute each link one by one or all simultaneously? Thank you Vishnu
Hi Vishnu, Please tell us about your output records, TEST:OUT0-O, etc. Are they connected to hardware? If so, is the device support synchronous or asynchronous, and what driver are you using? If they are connected to hardware and the device support
is synchronous, then 50 microseconds may just be the time it takes the driver to do the I/O. If the records are not connected to hardware then how did you measure the 50 microseconds? Mark From:
[email protected] [mailto:[email protected]]
Hi, In my application i am putting value on 4 output port lines simultaneously with dfanout record. record (dfanout,"TEST:EVENT1-FOUT") { field(DESC, "stop all event simaltanously") field(DOL, "TEST:WAIT-EVENT") field(HOPR, "1") field(LOPR, "0") field(OMSL, "closed_loop") field(OUTA, "TEST:OUT0-O PP") field(OUTB, "TEST:OUT1-O PP") field(OUTC, "TEST:OUT2-O PP") field(OUTD, "TEST:OUT3-O PP") } "TEST:OUT0-O, TEST:OUT1-O, TEST:OUT2-O, and TEST:OUT3-O are 4 output record putting the values on output port lines. The TEST:WAIT-EVENT is the taking value from User interface. 0 or 1. I observed the delay between each output is approximately 50 micro second. so total delay from first to last PV is ~200 micro second. The OS running the IOC is RHEL. I would like to know this delay time is normal in EPICS or i can even get better with some mechanism. Thank you
| ||||||||||||||||||||||||
ANJ, 17 Dec 2015 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing · |