1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FLY.Simulation.Flyad7
{
public class DriveManage
{
ISimDrive mSimDrive;
private void Init(ISimDrive simDrive)
{
mSimDrive = simDrive;
}
public void OnPoll()
{
}
class ORDER_Runto
{
ISimDrive mSimDrive;
enum STATE
{
Init,
Forw,
Backw,
Idle
}
STATE State;
public void Start(int targetpos)
{
State = STATE.Init;
}
public int TargetPos;
public void OnPoll()
{
if (mSimDrive is SimDrive_VF0)
{
SimDrive_VF0 vf0 = mSimDrive as SimDrive_VF0;
switch (State)
{
case STATE.Init:
{
if (TargetPos > mSimDrive.Pos)
{
vf0.PIN_OUT_FORW = false;
vf0.PIN_OUT_BACKW = true;
State = STATE.Forw;
}
else if (TargetPos < mSimDrive.Pos)
{
vf0.PIN_OUT_FORW = true;
vf0.PIN_OUT_BACKW = false;
State = STATE.Backw;
}
else
{
vf0.PIN_OUT_FORW = true;
vf0.PIN_OUT_BACKW = true;
State = STATE.Idle;
}
} break;
case STATE.Forw:
{
if (vf0.Pos >= TargetPos)
{
vf0.PIN_OUT_FORW = true;
vf0.PIN_OUT_BACKW = true;
State = STATE.Idle;
}
} break;
case STATE.Backw:
{
if (vf0.Pos <= TargetPos)
{
vf0.PIN_OUT_FORW = true;
vf0.PIN_OUT_BACKW = true;
State = STATE.Idle;
}
} break;
case STATE.Idle:
break;
}
}
}
}
}
}