nanotec.h


1
#ifndef NANOTEC_H_
2
#define NANOTEC_H_
3
4
void Reset()
5
{
6
  InOut.Controlword = InOut.Controlword | 0x80;
7
  yield(); 
8
}
9
10
void Quickstop()
11
{
12
  while ((In.Statusword & 0x20) != 0x00) 
13
  {
14
    InOut.Controlword = InOut.Controlword& 0xFF70;
15
    yield(); 
16
  }  
17
  yield();
18
}
19
20
void Shutdown()
21
{
22
  while ((In.Statusword & 0xEF) != 0x21) 
23
  {
24
    InOut.Controlword = (InOut.Controlword& 0xFF76)|0x0006;
25
    yield(); 
26
  }
27
  yield();
28
}
29
30
void SwitchOn()
31
{
32
  while ((In.Statusword & 0xE9) != 0x21) 
33
  {
34
    InOut.Controlword = (InOut.Controlword& 0xFF76)|0x0006;
35
    yield(); 
36
  }
37
  while ((In.Statusword & 0xEF) != 0x23) 
38
  {
39
    InOut.Controlword = (InOut.Controlword& 0xFF77)|0x0007;
40
    yield(); 
41
  }
42
  yield();
43
}
44
45
void EnableOperation()
46
{
47
  while ((In.Statusword & 0xE9) != 0x21) 
48
  {
49
    InOut.Controlword = (InOut.Controlword& 0xFF76)|0x0006;
50
    yield(); 
51
  }
52
  while ((In.Statusword & 0xEB) != 0x23) 
53
  {
54
    InOut.Controlword = (InOut.Controlword& 0xFF77)|0x0007;
55
    yield(); 
56
  }
57
  while ((In.Statusword & 0xEF) != 0x27) 
58
  {
59
    InOut.Controlword = (InOut.Controlword& 0xFF7F)|0x000F;              
60
    yield(); 
61
  }  
62
  yield();
63
}  
64
65
void RelativeMovement()
66
{  
67
  InOut.Controlword = InOut.Controlword | 0x0040;
68
  yield();
69
}
70
71
void AbsoluteMovement()
72
{
73
  InOut.Controlword = InOut.Controlword & 0xFFBF;
74
  yield();
75
}
76
77
void NewSetPoint(bool newsetpoint)
78
{
79
  if(newsetpoint)
80
  {  
81
    InOut.Controlword = InOut.Controlword | 0x0010;
82
    yield();
83
  }
84
  else
85
  {
86
    InOut.Controlword = InOut.Controlword & 0xFFEF;
87
    yield();
88
  }
89
}
90
91
void Halt(bool halt)
92
{
93
  if(halt)
94
  {
95
    InOut.Controlword = InOut.Controlword | 0x0100;
96
    yield();
97
  }
98
  else
99
  {
100
    InOut.Controlword = InOut.Controlword & 0xFEFF;
101
    yield();
102
  }  
103
}
104
105
void ChangeSetPointImmediately(bool changesetpointimmediately)
106
{
107
  if(changesetpointimmediately)
108
  {
109
    InOut.Controlword = InOut.Controlword | 0x0020;
110
    yield();
111
  }
112
  else
113
  {
114
    InOut.Controlword = InOut.Controlword & 0xFFDF;
115
    yield();
116
  }  
117
}
118
119
void ChangeOnSetPoint(bool changeonsetpoint)
120
{
121
  if(changeonsetpoint)
122
  {
123
    InOut.Controlword = InOut.Controlword | 0x0200;
124
    yield();
125
  }
126
  else
127
  {
128
    InOut.Controlword = InOut.Controlword & 0xFDFF;
129
    yield();
130
  }  
131
}
132
133
bool TargetReached()
134
{
135
  if((In.Statusword & 0x400) == 0x400)
136
  {
137
    return true;
138
  }
139
  else
140
  {
141
    return false;
142
  }  
143
}    
144
145
bool NewSetPointAcknowledge()
146
{
147
  if((In.Statusword & 0x1000) == 0x1000)
148
  {
149
    return true;
150
  }
151
  else
152
  {
153
    return false;
154
  }  
155
}  
156
157
bool DigitalInput(U08 inputs)
158
{
159
  if(In.Inputs & (1 << (15+inputs)))
160
  {
161
    return true;
162
  }
163
  else
164
  {
165
    return false;  
166
  }    
167
}
168
169
void SetDigitalOutput(U08 outputs)
170
{
171
  U32 OutputBit = 1 << (15+outputs);
172
  InOut.Outputs = InOut.Outputs | OutputBit;  
173
}
174
175
void ClearDigitalOutput(U08 outputs)
176
{
177
  U32 OutputBit = 1 << (15+outputs);
178
  InOut.Outputs = InOut.Outputs & ~OutputBit;    
179
}
180
181
void ModesOfOperation(S08 Mode)
182
{
183
  Out.ModesOfOperation = Mode;
184
}  
185
186
S08 ModesOfOperationDisplay()
187
{
188
  return In.ModesOfOperationDisplay;
189
}  
190
191
S16 AnalogInput()
192
{
193
  return In.AnalogInput;
194
}  
195
196
197
 #endif /*NANOTEC_H_*/