Project: Gas3

VFSM type: CMD(predefined vfsm)
Object name: Flow1:MyCmd

Properties
NameValue
Typeflow

Object name: Flow2:MyCmd

Properties
NameValue
Typeflow

Object name: Flow3:MyCmd

Properties
NameValue
Typeflow

Object name: Gas:MyCmd

Properties
NameValue
Typegas3

Object name: Press:MyCmd

Properties
NameValue
Typepress

VFSM type: TI(predefined vfsm)
Object name: Flow1:Ti:Busy

Properties
NameValue
Const10
Clocksec

Object name: Flow1:Ti:Opening

Properties
NameValue
Const3
Clocksec

Object name: Flow2:Ti:Busy

Properties
NameValue
Const10
Clocksec

Object name: Flow2:Ti:Opening

Properties
NameValue
Const3
Clocksec

Object name: Flow3:Ti:Busy

Properties
NameValue
Const10
Clocksec

Object name: Flow3:Ti:Opening

Properties
NameValue
Const3
Clocksec

Object name: Press:Ti:Busy

Properties
NameValue
Const8
Clocksec

VFSM type: AL(predefined vfsm)
Object name: Flow1:Al:OpeningError

Properties
NameValue
Category0
TextOpening too long

Object name: Flow1:Al:RegulatingError

Properties
NameValue
Category0
TextFlow not OK

Object name: Flow2:Al:OpeningError

Properties
NameValue
Category0
TextOpening too long

Object name: Flow2:Al:RegulatingError

Properties
NameValue
Category0
TextFlow not OK

Object name: Flow3:Al:OpeningError

Properties
NameValue
Category0
TextOpening too long

Object name: Flow3:Al:RegulatingError

Properties
NameValue
Category0
TextFlow not OK

Object name: Press:Al:PressureNotOk

Properties
NameValue
Category0
TextPressure not OK

VFSM type: DO(predefined vfsm)
Object name: Flow1:Do:FlowValve
Object name: Flow1:Do:Regulating
Object name: Flow2:Do:FlowValve
Object name: Flow2:Do:Regulating
Object name: Flow3:Do:FlowValve
Object name: Flow3:Do:Regulating
Object name: Press:Do:PressureOk

VFSM type: NO(predefined vfsm)
Object name: Flow1:No:FlowSetValue

Properties
NameValue
Formatfloat
UnitV
ScaleModeLin
ScaleFactor1.5
Offset0
OutDataFlow1:Par:FlowSetValue

Object name: Flow2:No:FlowSetValue

Properties
NameValue
Formatfloat
UnitV
ScaleModeLin
ScaleFactor1.5
Offset0
OutDataFlow1:Par:FlowSetValue

Object name: Flow3:No:FlowSetValue

Properties
NameValue
Formatfloat
UnitV
ScaleModeLin
ScaleFactor1.5
Offset0
OutDataFlow1:Par:FlowSetValue

VFSM type: NI(predefined vfsm)
Object name: Flow1:Ni:ActualFlowValue

Properties
NameValue
Formatfloat
UnitV
ScaleModeLin
ScaleFactor0.2
Offset0
Threshold0

Object name: Flow2:Ni:ActualFlowValue

Properties
NameValue
Formatfloat
UnitV
ScaleModeLin
ScaleFactor0.2
Offset0
Threshold0

Object name: Flow3:Ni:ActualFlowValue

Properties
NameValue
Formatfloat
UnitV
ScaleModeLin
ScaleFactor0.2
Offset0
Threshold0

Object name: Press:Ni:ActualPressureValue

Properties
NameValue
Formatshort
UnitmBar
ScaleModeExp
ScaleFactor0.005
Offset0
Threshold0

VFSM type: SWIP(predefined vfsm)
Object name: Flow1:Swip:FlowRange

Properties
NameValue
InputFlow1:Ni:ActualFlowValue
LimitLow200
LimitHigh240

Object name: Flow2:Swip:FlowRange

Properties
NameValue
InputFlow2:Ni:ActualFlowValue
LimitLow200
LimitHigh240

Object name: Flow3:Swip:FlowRange

Properties
NameValue
InputFlow3:Ni:ActualFlowValue
LimitLow200
LimitHigh240

Object name: Press:Swip:Pressure

Properties
NameValue
InputPress:Ni:ActualPressureValue
LimitLow5
LimitHigh7

VFSM type: PAR(predefined vfsm)
Object name: Flow1:Par:FlowSetValue

Properties
NameValue
CategoryPP
Formatfloat
UnitV
LimitLow300
LimitHigh700
InitValue500

Object name: Flow2:Par:FlowSetValue

Properties
NameValue
CategoryPP
Formatfloat
UnitV
LimitLow300
LimitHigh700
InitValue500

Object name: Flow3:Par:FlowSetValue

Properties
NameValue
CategoryPP
Formatfloat
UnitV
LimitLow300
LimitHigh700
InitValue500

VFSM type: CNT(predefined vfsm)
Object name: Flow1:Cnt:FlowRangeExceeds

Properties
NameValue
Const4

Object name: Flow2:Cnt:FlowRangeExceeds

Properties
NameValue
Const4

Object name: Flow3:Cnt:FlowRangeExceeds

Properties
NameValue
Const4

VFSM type: Flow(user vfsm)
Flow ------- Flow controls a gas flow attenuator. The Flow state machine accepts commands (numbers) and sets an analog signal Ao and a digital signal Do. As a feedback from the attenuator the state machine receives the actual gas flow values as an analog signal Ai and a digital signal Di indicating the attenuator position (open/closed). Three commands determine attenuator operations: 1: open the gas flow by setting the High value of the digital output Do, 2: close the gas flow by setting the Low value of the digital output Do, 3: set the gas flow to the value determined by the numerical output Ao. Opening the flow valve is supervised by a timer TimO. If the valve does not open before the TimO timer expires an alarm AlaO is generated. The gas flow actual value is reached some time after setting the gas flow value and it is supervised by a timer TimR. If the gas flow value does not reach the set value before the TimR timer expires an alarm AlaR is generated. The actual gas flow is measured and its value delivered as an analog input signal Ai to the control system. Normally, it is required that the flow value stays within a certain limits. If the flow value exceeds the required range the state machine should after some delay issue an alarm and count this event. If it happens more than a certain number the state machine should issue immediately the alarm if the flow value exceeds the range. This last situation signalled to a Master by a state FlowNotOK.

Prefix: FLO

Object name: Flow1

Properties
NameValue
MyCmdFlow1:MyCmd
TimBFlow1:Ti:Busy
TimOFlow1:Ti:Opening
AlaOFlow1:Al:OpeningError
AlaRFlow1:Al:RegulatingError
DoRegulatingFlow1:Do:Regulating
DoValveFlow1:Do:FlowValve
AoFlow1:No:FlowSetValue
AiFlow1:Ni:ActualFlowValue
SwipFFlow1:Swip:FlowRange
CntFlow1:Cnt:FlowRangeExceeds

Object name: Flow2

Properties
NameValue
MyCmdFlow2:MyCmd
TimBFlow2:Ti:Busy
TimOFlow2:Ti:Opening
AlaOFlow2:Al:OpeningError
AlaRFlow2:Al:RegulatingError
DoRegulatingFlow2:Do:Regulating
DoValveFlow2:Do:FlowValve
AoFlow2:No:FlowSetValue
AiFlow2:Ni:ActualFlowValue
SwipFFlow2:Swip:FlowRange
CntFlow2:Cnt:FlowRangeExceeds

Object name: Flow3

Properties
NameValue
MyCmdFlow3:MyCmd
TimBFlow3:Ti:Busy
TimOFlow3:Ti:Opening
AlaOFlow3:Al:OpeningError
AlaRFlow3:Al:RegulatingError
DoRegulatingFlow3:Do:Regulating
DoValveFlow3:Do:FlowValve
AoFlow3:No:FlowSetValue
AiFlow3:Ni:ActualFlowValue
SwipFFlow3:Swip:FlowRange
CntFlow3:Cnt:FlowRangeExceeds

IOid name: MyCmd (type: CMD-IN)
-->Virtual Input: CmdClose (2)
-->Virtual Input: CmdOpen (1)
-->Virtual Input: CmdRegulate (3)

IOid name: TimB (type: TI)
-->Virtual Input: TimB_OVER (OVER)
-->Virtual Output: TimB_ResetStart (ResetStart)
-->Virtual Output: TimB_Stop (Stop)

IOid name: TimO (type: TI)
-->Virtual Input: TimO_OVER (OVER)
-->Virtual Output: TimO_ResetStart (ResetStart)
-->Virtual Output: TimO_Stop (Stop)

IOid name: AlaO (type: AL)
-->Virtual Output: AlaO_Coming (Coming)
-->Virtual Output: AlaO_Going (Going)

IOid name: AlaR (type: AL)
-->Virtual Output: AlaF_Coming (Coming)
-->Virtual Output: AlaF_Going (Going)

IOid name: DoRegulating (type: DO)
-->Virtual Output: BadFlow (Low)
-->Virtual Output: RegulatingFlow (High)

IOid name: DoValve (type: DO)
-->Virtual Output: CloseFlow (Low)
-->Virtual Output: OpenFlow (High)

IOid name: Ao (type: NO)
-->Virtual Output: ResetFlowValue (Off)
-->Virtual Output: SetFlowValue (On)

IOid name: Ai (type: NI)

IOid name: SwipF (type: SWIP)
-->Virtual Input: FlowControl_OFF (OFF)
-->Virtual Input: Flow_HIGH (HIGH)
-->Virtual Input: Flow_IN (IN)
-->Virtual Input: Flow_LOW (LOW)
-->Virtual Input: NOT_Flow_IN (~IN)
-->Virtual Output: FlowSupervision_Off (Off)
-->Virtual Output: FlowSupervision_On (On)

IOid name: Cnt (type: CNT)
-->Virtual Input: Cnt_OVER (OVER)
-->Virtual Output: Cnt_Inc (Inc)
-->Virtual Output: Cnt_ResetStart (ResetStart)

State transition table, state ' Init ':
After startup Flow goes always to the state Closing: the inital state will be determined by inputs.

Init
EntryAction:
ExitAction:
Closing
always

State transition table, state ' Busy ':
Entering this state Flow starts gas flow control by switching on the flow supervision and setting the gas flow value. A timer TimR is started and the counter Cnt is incremented. If the flow control functions properly the gas flow value is in range before the timer expires and Flow goes to the state Regulating. If it is not the case and the timer expires before the flow control is in range Flow goes to the state FlowNotOK. The same happens immediately by entering the state (remember the counter is incremented) if the counter Cnt is OVER signalling that Flow has entered the state Busy too many times (obviuosly, there are problems with the gas flow control). Flow reacts also in this state to commands Close and Open. Leaving the state Flow stops the timer.

Busy
EntryAction:
FlowSupervision_On
SetFlowValue
TimB_ResetStart
Cnt_Inc
ExitAction:
TimB_Stop
Closing
CmdClose
FlowNotOK
TimB_OVER or Cnt_OVER
Opening
CmdOpen
Regulating
Flow_IN

State transition table, state ' FlowNotOK ':
This is an error state. Entering the state an alarm AlaR is issued. The alarm signals to the operator that the gas flow control does not work correctly. The state itself signals to the Master the same information. Depending on the entire design of the control system the Master may take automatically some action (sending for instance command Close). In addition, operator receives the information and is alerted. If the flow control repairs by itself (the flow value returns to the required range) Flow returns to the state Regulating. Flow reacts also in this state to commands Close and Open.

FlowNotOK
EntryAction:
AlaF_Coming
ExitAction:
AlaF_Going
Flow_IN
AlaF_Going
Closing
CmdClose
Opening
CmdOpen
Regulating
Flow_IN

State transition table, state ' Regulating ':
This is a stable state. Staying in this state Flow signals that gas flow is correct. If the gas flow exceeds the required range Flow goes to the state Busy. Flow reacts also in this state to commands Close and Open. The RegulatingFlow and BadFlow are just to signal (fo instance a lamp) that the Flow state machine is in the state Regulating, i.e. the flow is regulated.

Regulating
EntryAction:
RegulatingFlow
ExitAction:
BadFlow
Closing
CmdClose
Opening
CmdOpen
Busy
NOT_Flow_IN

State transition table, state ' Standby ':
Entering the state the supervision of the gas flow is switched off and the counter is reset. It is a stable state; Flow leaves this state only receiving commands: Open or Regulate.

Standby
EntryAction:
FlowSupervision_Off
Cnt_ResetStart
ExitAction:
Opening
CmdOpen
Busy
CmdRegulate

State transition table, state ' Closing ':
Entering the state the Flow valve is closed and the gas flow value is set to 0 (off). In addition, the supervision of the actual gas flow is activated (FlowSupervision_On). Flow goes to Standby if the gas flow drops low enough (valve is closed). Cmd Regulate starts the gas flow control (Flow goes to the state Busy). receiving cmd Open Flow goes to the state Opening.

Closing
EntryAction:
CloseFlow
ResetFlowValue
FlowSupervision_On
ExitAction:
Standby
Flow_LOW or FlowControl_OFF
Opening
CmdOpen
Busy
CmdRegulate

State transition table, state ' Opening ':
Entering this state Flow starts opening of the flow valve: the supervison of the gas flow is switched on and the valve is open. To control the opening time a timer TimO is started. In addition, the counter is started (we need it later by gas flow control). The opening of the valve is signalled by high flow value. If the valve opens before the timer expires Flow goes to the state Open: this is a correct control sequence. If the timer expires before the valve is open an alarm AlaO is generated but we stay in the state as there is difficult to do something sensible. The operator should react to the alarm, check why the valve does not open and take some action. The alarm is cancelled if the valve opens in the meantime (supervision signals high value of the flow). Alternatively, Flow could return automatically to the state Standby. Command Close and Regulate force Flow to go correspondigly to states Closing and Busy.

Opening
EntryAction:
FlowSupervision_On
ResetFlowValue
OpenFlow
TimO_ResetStart
Cnt_ResetStart
ExitAction:
TimO_Stop
TimO_OVER
AlaO_Coming
Flow_HIGH
AlaO_Going
Open
Flow_HIGH
Closing
CmdClose
Busy
CmdRegulate

State transition table, state ' Open ':
This is a stable state; Flow reacts here only to commands Close and Regulate.

Open
EntryAction:
ExitAction:
Closing
CmdClose
Busy
CmdRegulate
Total number of states: 8

VFSM type: Press(user vfsm)
Press -------- PRES state machine does not perform any true control - it does not have any output like Do or No. It rather supervisers the pressure and represents the result to the Master with its state. The actual pressure value delived by numerical input Ai is controlled by a switchpoint SwipPress and by a Timer. If the measurement is on the timer is started. If the timer expires before the pressure (Ai) reaches the required range Press signals the bad pressure with it state and issues an alarm. If the pressure returns to the required value Press signals it with its state. Thus, during measurement Press changes among states: Busy, PressOK and BadPress signalling to the Master the pressure value.

Prefix: PRE

Object name: Press

Properties
NameValue
MyCmdPress:MyCmd
TimerPress:Ti:Busy
AlarmPress:Al:PressureNotOk
DoPress:Do:PressureOk
AiPress:Ni:ActualPressureValue
SwipPressPress:Swip:Pressure

IOid name: MyCmd (type: CMD-IN)
-->Virtual Input: Cmd_Disable (2)
-->Virtual Input: Cmd_Enable (1)

IOid name: Timer (type: TI)
-->Virtual Input: Timer_OVER (OVER)
-->Virtual Output: Timer_ResetStart (ResetStart)
-->Virtual Output: Timer_Stop (Stop)

IOid name: Alarm (type: AL)
-->Virtual Output: Alarm_Coming (Coming)
-->Virtual Output: Alarm_Going (Going)

IOid name: Do (type: DO)
-->Virtual Output: Di_PressureNotOk (Low)
-->Virtual Output: Di_PressureOk (High)

IOid name: Ai (type: NI)

IOid name: SwipPress (type: SWIP)
-->Virtual Input: NOT_SwipPress_IN (~IN)
-->Virtual Input: SwipPress_IN (IN)
-->Virtual Output: SwipPress_Off (Off)
-->Virtual Output: SwipPress_On (On)

State transition table, state ' Init ':
Init
EntryAction:
ExitAction:
Off
always

State transition table, state ' Off ':
By entering the state the switchpoint (supervison) is switched off which means that the pressure measurement is ceased. Receiving the command CmdEnable the vfsm changes to the state Busy.

Off
EntryAction:
SwipPress_Off
ExitAction:
Busy
Cmd_Enable

State transition table, state ' Busy ':
By entering the state the switchpoint is switched on starting the pressure measurement. The vfsm expects that the pressure reaches the correct range within a certain period. Hence, the Timer is started. If the pressure is in the correct range the vfsm changes to the state PressOK. If the Timer expires the vfsm changes to the state BadPress. The pressure measurement can be discontinued by the command CmdDisable that forces the vfsm to change to the state Off.

Busy
EntryAction:
SwipPress_On
Timer_ResetStart
ExitAction:
Timer_Stop
PressOK
SwipPress_IN
BadPress
Timer_OVER
Off
Cmd_Disable

State transition table, state ' PressOK ':
This state means that the pressure is correct. The pressure measurement can be discontinued by the command CmdDisable that forces the vfsm to change to the state Off. If the pressure is too low or too high the vfsm changes to the state Busy.

PressOK
EntryAction:
Di_PressureOk
ExitAction:
Di_PressureNotOk
Busy
NOT_SwipPress_IN
Off
Cmd_Disable

State transition table, state ' BadPress ':
Entering the state the Alarm is issued to warn that the pressure is not ok. If the pressure improves the vfsm cancels the Alarm and changes to the state PressOK. The pressure measurement can be discontinued by the command CmdDisable that forces the vfsm to change to the state Off.

BadPress
EntryAction:
Alarm_Coming
ExitAction:
SwipPress_IN
Alarm_Going
PressOK
SwipPress_IN
Off
Cmd_Disable
Total number of states: 5

VFSM type: Gas3(user vfsm)
Gas ------ The state machine controls a gas inlet of a vacuum chamber. It does not do it directly but is a Master of two Slave state machines: Flow and Press which effectively control the hardware. Gas "sees" only the two state machines and coordinates their activity. The Press state machine represents through its state the pressure value. The Press state values interesting for Gas are: Off, BadPress and PressOK. The Flow state machine represents through its state the gas flow value. The Flow state values interesting for Gas are: Busy, Regulating and Standby. If Press is in the state PressOK and Flow in the state Regulating Gas should be in the state OK which signals the required situation in the control system. Gas controls the Slaves by sending them commands: Close/Regulate to Flow and Disable/Enable to Press.

Prefix: GAS

Object name: Gas3

Properties
NameValue
MyCmdGas:MyCmd
Flow1Flow1
Flow2Flow2
Flow3Flow3
PressPress
Flow1CmdFlow1:MyCmd
Flow2CmdFlow2:MyCmd
Flow3CmdFlow3:MyCmd
PressCmdPress:MyCmd

IOid name: MyCmd (type: CMD-IN)
-->Virtual Input: MyCmd_Off (1)
-->Virtual Input: MyCmd_On (2)
-->Virtual Output: MyCmd_Clear (0)

IOid name: Flow1 (type: VFSM)
flow

-->Virtual Input: Flow1_Regulating ( Regulating )
-->Virtual Input: Flow1_Standby ( Standby )
-->Virtual Input: NOT_Flow1_Regulating ( ~Regulating )

IOid name: Flow2 (type: VFSM)
flow

-->Virtual Input: Flow2_Regulating ( Regulating )
-->Virtual Input: Flow2_Standby ( Standby )
-->Virtual Input: NOT_Flow2_Regulating ( ~Regulating )

IOid name: Flow3 (type: VFSM)
flow

-->Virtual Input: Flow3_Regulating ( Regulating )
-->Virtual Input: Flow3_Standby ( Standby )
-->Virtual Input: NOT_Flow3_Regulating ( ~Regulating )

IOid name: Press (type: VFSM)
press

-->Virtual Input: Press_BadPress ( BadPress )
-->Virtual Input: Press_Off ( Off )
-->Virtual Input: Press_PressOK ( PressOK )

IOid name: Flow1Cmd (type: CMD-OUT)
flow

-->Virtual Output: Flow1Cmd_Close (2)
-->Virtual Output: Flow1Cmd_Regulate (3)

IOid name: Flow2Cmd (type: CMD-OUT)
flow

-->Virtual Output: Flow2Cmd_Close (2)
-->Virtual Output: Flow2Cmd_Regulate (3)

IOid name: Flow3Cmd (type: CMD-OUT)
flow

-->Virtual Output: Flow3Cmd_Close (2)
-->Virtual Output: Flow3Cmd_Regulate (3)

IOid name: PressCmd (type: CMD-OUT)
press

-->Virtual Output: PressCmd_Disable (2)
-->Virtual Output: PressCmd_Enable (1)

State transition table, state ' Init ':
Init
EntryAction:
ExitAction:
OffBusy
always

State transition table, state ' OffBusy ':
Entering the state Gas sends commands Close to Flow and Disable to Press. Receiving from both slaves an acknowledgment (Flow in Standby and Press in Off) Gas goes to the state Off (note that this condition is realized as a complexed condition). Receiving command On Gas goes to the state OnBusy.

OffBusy
EntryAction:
Flow1Cmd_Close
Flow2Cmd_Close
Flow3Cmd_Close
PressCmd_Disable
ExitAction:
Off
Flow1_Standby and Flow2_Standby and Flow3_Standby and Press_Off
OnBusy
MyCmd_On

State transition table, state ' OK ':
This is a stable state. If Gas reaches this state it means that the true goal of the control has been realized: the system has a proper gas flow value and the vacuum pressure is correct. Disturbances in the gas flow signalled by state Busy of the Flow state machine forces Gas to return to the state OnBusy. The bad pressure is a more serious problem and in such a case Gas leaves this state returning to the state OffBusy where it will try to repeat the control sequence. The transition to the state OffBusy can be also enforced by the command Off.

OK
EntryAction:
ExitAction:
OffBusy
MyCmd_Off or Press_BadPress
OnBusy
NOT_Flow1_Regulating or NOT_Flow2_Regulating or NOT_Flow3_Regulating

State transition table, state ' Off ':
This is a stable state. Gas reacts here only to the command On going to the state OnBusy.

Off
EntryAction:
ExitAction:
OnBusy
MyCmd_On

State transition table, state ' OnBusy ':
Entering the state Gas starts Flow regulating and disables Press. It waits here for an acknowledgement from Flow that it is regulating. It reacts also to a command Off going to the state OffBusy.

OnBusy
EntryAction:
Flow1Cmd_Regulate
Flow2Cmd_Regulate
Flow3Cmd_Regulate
PressCmd_Disable
MyCmd_Clear
ExitAction:
OffBusy
MyCmd_Off
On
Flow1_Regulating and Flow2_Regulating and Flow3_Regulating

State transition table, state ' On ':
As Gas can enter this state only from the state OnBusy it means that the Flow is now regulating. Therefore, entering this state Gas enables Press and waits whether the Press is OK. If the Press is OK Gas go to the state OK. If in the meantime the Flow is not regulating (signalling it with the state Busy) Gas returns to the state On Busy. A bad pressure value or the command Off force Gas to go to the state OffBusy.

On
EntryAction:
PressCmd_Enable
ExitAction:
OnBusy
NOT_Flow1_Regulating or NOT_Flow2_Regulating or NOT_Flow3_Regulating
OK
Press_PressOK
OffBusy
MyCmd_Off or Press_BadPress
Total number of states: 6

VFSM type: Ni4(unit)
Prefix: NI4

Object name: NI4_Unit5

Properties
NameValue
CommPort0
PhysAddr5
Ni0Press:Ni:ActualPressureValue
Ni1Flow1:Ni:ActualFlowValue
Ni2Flow2:Ni:ActualFlowValue
Ni3Flow3:Ni:ActualFlowValue

IOid name: Ni0 (type: NI)

IOid name: Ni1 (type: NI)

IOid name: Ni2 (type: NI)

IOid name: Ni3 (type: NI)

VFSM type: No4(unit)
Prefix: NO4

Object name: NO4_Unit7

Properties
NameValue
CommPort0
PhysAddr7
No0Flow1:No:FlowSetValue
No1Flow2:No:FlowSetValue
No2Flow3:No:FlowSetValue
No3

IOid name: No0 (type: NO)

IOid name: No1 (type: NO)

IOid name: No2 (type: NO)

IOid name: No3 (type: NO)

VFSM type: DO8(unit)
Prefix: DOU

Object name: DO8_Unit3

Properties
NameValue
CommPort0
PhysAddr3
Do0Press:Do:PressureOk
Do1Flow1:Do:Regulating
Do2Flow2:Do:Regulating
Do3Flow3:Do:Regulating
Do4Flow1:Do:FlowValve
Do5Flow2:Do:FlowValve
Do6Flow3:Do:FlowValve
Do7

IOid name: Do0 (type: DO)

IOid name: Do1 (type: DO)

IOid name: Do2 (type: DO)

IOid name: Do3 (type: DO)

IOid name: Do4 (type: DO)

IOid name: Do5 (type: DO)

IOid name: Do6 (type: DO)

IOid name: Do7 (type: DO)