AnsweredAssumed Answered

VRf:Bug NOt, Timers:

Question asked by VRFuser on Sep 15, 1997
Item Subject: VRf-Bug_Not
     Greg, and Vee Users.
    
        We've certainly seen this before with timers, and I think it would
     be helpful to post a solution, the only one I know of is to Always
     (always) drive a timer with a "Do" if there will be a parallel thread
     (note that the "break" is a parallel thread).  Then continue control
     from the sequence out of the "Do".  I find that "do's" are much more
     important to use in Vee 4, in these parallel thread cases.
    
     Joel.


______________________________ Reply Separator _________________________________
Subject: VRf-Bug_Not
Author:  gvg-at-lvld (gvg@hpislsup.lvld.hp.com) at HP-Sonoma,shargw1
Date:    9/14/97 10:47 AM


send q VRf-Bug_Not ww liron_n vrf
    
from: Greg Goebel / HP-MXD
      gvg@lvld.hp.com / 970-679-3030 / FAX 970-679-5971
      website:  ftp://fcext3.external.hp.com/dist/mxd/index.html
to:   VRf-Noli Liron
date: Sunday, 14 September 1997 1146 MDT
    
> To: HP-VEE USER GROUP <hpvxd_xc@hpislsup.lvld.hp.com>
> Subject: Is It A Bug?
>
> I use HP-VEE 4.01 on a Pentium Machine runs under Windows 95.
> To my knowledge, the same program should run the same, no matter which
> line you connect first. Well, suprisingly it isn't so!!
> Can you explain the problem occurred in the attached file?
> --
> Noli Liron,
> 9 Harakafot Street, Haifa 34745 Israel
> Home Tel: 972-4-838-9741, 972-4-838-1394
> Work Tel: 972-4-879-2112, 972-4-879-5023, Work Fax: 972-4-879-2746
> Email: lironno@rafael.co.il
    
Sir:
    
Considering your program:
    
   +-------+
   | Start |
   +---+---+
       |
   +---+---+
   | Until |
   | Break +---+----------+
   +---+---+   |          |
       |       |      +---+---+
       |       |      | Break |
       |       |      +-------+
       |       |
       |       |  +------------+
       |       |  |   Timer    |
       |       |  +------------+
       |       +->| T1         |
       +--------->| T2         |
                  +------------+
    
The fact that you are getting an error that says that T2 is being executed
before T1 is logical -- we've seen it before.
    
What happens is that the Break object is being executed before the T1 pin of
the Timer object; this forces an *immediate* exit of the Until Break loop,
meaning the T1 pin is not pinged.  It fires its Sequence Out pin and pings
the T2 pin of the Timer object, forcing the error.
    
This is as per VEE operational specifications (and can be seen if the program
is traced; without constraints, there is no way to tell which object on the
output of the Until Break will be executed first.  That is why tinkering with
the wiring will get things to work (and is, in fact, a good indication of a
propagation ambiguity like this one).
    
Many programs that worked in VEE 3.0 were dependent on a specific propagation
order that was actually undefined in practice.  VEE 4.0's compiled mode in
general follows the same rules of propagation, but that doesn't mean it will
choose the same arbitrary order of propagation when there is an ambiguity.
    
If you have more questions, please let us know.
    
[<>] regards -- gvg

Outcomes