next up previous contents 5
Next: Observers Up: Scripted Device Family Relationships Previous: Children and Parents   Contents

Siblings

Very often several scripted devices can be written to describe different relationships between the same real motors. If the user expects to be able to move each scripted device without affecting the position of the other scripted device, then the set_siblings command can be used to declare this desired relationship between two parent devices.

For example, the average position of table_vert_1 and table_vert_2 can be written into a scripted device called table_vert. Moving this table_vert ``motor'' would move table_vert_1 and table_vert_2 by an equal amount. However, table_vert_1 and table_vert_2 can also be described in terms of an angle, table_pitch. With the table_vert and table_pitch motors now defined, a user may expect to be able to move table_vert without changing table_pitch. On the other hand, a user may also expect to be able to move table_pitch without changing table_vert.

A problem arises with this scenario when one considers that the table_vert motor issues two independent move commands to two real motors. These two motors may travel at slightly different speeds, thus altering the table_pitch motor during the move. At the end of the move, the table_pitch should once again be back to its original position before the move was started. This by itself is probably acceptable, as the limits of table_pitch are continuously checked and the move would be aborted if the limits were exceeded.

However, if a move of table_vert is aborted, either by a user or by a scripted device that has had its limits violated, the position of table_pitch will have been altered at the end of the move. Further moves of table_vert would maintain the new altered position of table_pitch. This is unacceptable because the table_pitch motor was altered simply because of an interrupted move of table_vert.

The set_siblings command can help the scripting engine overcome this problem by doing the following:

With table_pitch defined as a sibling of table_vert, aborting table_vert during a move will not update table_pitch's last good position. When table_vert is moved again, the table_pitch motor will first be moved to its last good position before table_vert is allowed to move.


next up previous contents 5
Next: Observers Up: Scripted Device Family Relationships Previous: Children and Parents   Contents
Scott McPhillips 2011-07-06