CompileDES 3.14
Executable-Code Generation from Synchronised libFAUDES Automata
cgp_iec61131st.h
Go to the documentation of this file.
1
3/*
4 FAU Discrete Event Systems Library (libFAUDES)
5
6 Copyright (C) 2010, 2016, 2017 Thomas Moor
7
8*/
9
10
11
12#ifndef FAUDES_IEC61131stCode_H
13#define FAUDES_IEC61131stCode_H
14
15#include "libfaudes.h"
16#include "cgp_codeprimitives.h"
17
18using namespace faudes;
19
20
21
130
131public:
132
133 /*****************************************
134 *****************************************
135 *****************************************
136 *****************************************/
137 enum IECVariableType { LOCAL, TEMP, INPUT, OUTPUT, INOUT, EXTERNAL, GLOBAL, ACCESS, NONE };
138
139
147
151 virtual ~Iec61131stCodeGenerator(void);
152
153
158 virtual void Clear(void);
159
160
163protected:
164
167
170
173
175 std::string mLiteralCyclic;
176
178 void DoCompile(void);
179
181 void DoGenerate(void);
182
184 virtual void DoGenerateFunction(void);
185
187 virtual void DoGenerateLookups(void);
188
190 virtual void DecrementTimers(void);
191
193 void BeginCyclicCode(void);
194
196 void EndCyclicCode(void);
197
199 virtual std::string TargetAddress(const AA& address);
200
202 virtual AX TargetExpression(const AA& address);
203
204
210 /* re-implement primitives */
211 virtual void Comment(const std::string& text);
212
213 /* re-implement primitives */
214 virtual void VariableDeclare(const std::string& laddr, const std::string& ltype);
215 virtual void VariableDeclare(const std::string& laddr, const std::string& ltype, const std::string& lval);
216
217 /* re-implement primitives */
218 virtual void IntegerDeclare(const AA& address);
219 virtual void IntegerDeclare(const AA& address, int val);
220 virtual void IntegerAssign(const AA& address, int val);
221 virtual void IntegerAssign(const AA& address, const AX& expression);
222 virtual void IntegerIncrement(const AA& address, int val);
223 virtual AX IntegerQuotient(const AX& expression, int val);
224 virtual AX IntegerRemainder(const AX& expression, int val);
225 virtual AX IntegerBitmask(const AX& expression);
226 virtual AX IntegerIsEq(const AA& address, int val);
227 virtual AX IntegerIsEq(const AA& address, const AX& expression);
228 virtual AX IntegerIsNotEq(const AA& address, int val);
229 virtual AX IntegerIsNotEq(const AA& address, const AX& expression);
230 virtual AX IntegerIsGreater(const AA& address, int val);
231 virtual AX IntegerIsLess(const AA& address, int val);
232 virtual AX IntegerConstant(int val);
233
234 /* re-implement primitives */
235 virtual bool HasIntmaths(void);
236 virtual void WordDeclare(const AA& address);
237 virtual void WordDeclare(const AA& address, word_t val);
238 virtual void WordAssign(const AA& address, word_t val);
239 virtual void WordAssign(const AA& address, const AX& expression);
240 virtual void WordOr(const AA& address, word_t val);
241 virtual void WordOr(const AA& address, const AX& expression);
242 virtual void WordOr(const AA& address, const AA& op1, const AA& op2);
243 virtual void WordOr(const AA& address, const AA& op1, word_t op2);
244 virtual void WordAnd(const AA& address, word_t val);
245 virtual void WordAnd(const AA& address, const AX& expression);
246 virtual void WordAnd(const AA& address, const AA& op1, const AA& op2);
247 virtual void WordAnd(const AA& address, const AA& op1, word_t op2);
248 virtual void WordNand(const AA& address, const AX& expression);
249 virtual AX WordIsBitSet(const AA& address, int idx);
250 virtual AX WordIsBitClr(const AA& address, int idx);
251 virtual AX WordIsMaskSet(const AA& address, word_t mask);
252 virtual AX WordIsEq(const AA& address, word_t val);
253 virtual AX WordIsNotEq(const AA& address, word_t val);
254 virtual AX WordConstant(word_t val);
255
256 /* re-implement primitives */
257 virtual void BooleanDeclare(const AA& address);
258 virtual void BooleanDeclare(const AA& address, int val);
259 virtual void BooleanAssign(const AA& address, int val);
260 virtual void BooleanAssign(const AA& address, const AX& expression);
261 virtual AX BooleanIsEq(const AA& op1, const AA& op2);
262 virtual AX BooleanIsNotEq(const AA& op1, const AA& op2);
263
264 /* re-implement primitives */
265 virtual void CintarrayDeclare(const AA& address, int offset, const std::vector<int>& val);
266 virtual AA CintarrayAccess(const AA& address, int index);
267 virtual AA CintarrayAccess(const AA& address, const AA& indexaddr);
268 virtual bool HasCintarray(void);
269 virtual void CwordarrayDeclare(const AA& address, int offset, const std::vector<word_t>& val);
270 virtual AA CwordarrayAccess(const AA& address, int index);
271 virtual AA CwordarrayAccess(const AA& address, const AA& indexaddr);
272 virtual bool HasCwordarray(void);
273 virtual void CstrarrayDeclare(const AA& address, int offset, const std::vector<std::string>& val);
274 virtual AA CstrarrayAccess(const AA& address, int index);
275 virtual AA CstrarrayAccess(const AA& address, const AA& indexaddr);
276 virtual bool HasCstrarray(void);
277 virtual void IntarrayDeclare(const AA& address, int offset, int len);
278 virtual void IntarrayDeclare(const AA& address, int offset, const std::vector<int>& val);
279 virtual AA IntarrayAccess(const AA& address, int index);
280 virtual AA IntarrayAccess(const AA& address, const AA& indexaddr);
281 virtual bool HasIntarray(void);
282 virtual void WordarrayDeclare(const AA& address, int offset, int len);
283 virtual void WordarrayDeclare(const AA& address, int offset, const std::vector<word_t>& val);
284 virtual AA WordarrayAccess(const AA& address, int index);
285 virtual AA WordarrayAccess(const AA& address, const AA& indexaddr);
286 virtual bool HasWordarray(void);
287
288
289 /* re-implement primitives */
290 virtual void IfTrue(const AX& expression);
291 virtual void IfFalse(const AX& expression);
292 virtual void IfWord(const AX& expression);
293 virtual void IfElse(void);
294 virtual void IfElseIfTrue(const AX& expression);
295 virtual void IfEnd(void);
296
297 /* re-implement primitives */
298 virtual void SwitchBegin(const AA& address);
299 virtual void SwitchCase(const AA& address, int val);
300 virtual void SwitchCases(const AA& address, int from, int to);
301 virtual void SwitchCases(const AA& address, const std::set< int >& vals);
302 virtual void SwitchBreak(void);
303 virtual void SwitchEnd(void);
304 virtual bool HasMultiCase(void);
305
306 /* re-implement primitives */
307 virtual void LoopBegin(void);
308 virtual void LoopBreak(const AX& expression);
309 virtual void LoopEnd(void);
310 virtual void FunctionReturn(void);
311
312
313 /* re-implement primitives */
314 virtual void RunActionSet(const std::string& address);
315 virtual void RunActionClr(const std::string& address);
316 virtual void RunActionExe(const AX& expression);
317
318 /* re-implement primitives */
319 virtual void TimerDeclare(const AA& address, const std::string& val);
320 virtual void TimerStart(const AA& address);
321 virtual void TimerStop(const AA& address);
322 virtual void TimerReset(const AA& address, const std::string& val);
323 virtual AX TimerIsElapsed(const AA& address);
324
325 /* re-implement primitives */
326 virtual void DeclareTimers(void);
327 virtual void ResetState(void);
328
329
330 /* code generator primitives, iec-specific helper */
331 virtual AX TimeConstant(int val);
332 virtual AX IntarrayConstant(const std::vector<int>& val);
333 virtual AX WordarrayConstant(const std::vector<word_t>& val);
334 virtual AX StringConstant(const std::string& val);
335 virtual AX StrarrayConstant(const std::vector<std::string>& val);
336
337 virtual void DeclareImportPhysicalIo(void);
338 virtual void DeclareImportSymbolicIo(void);
339 virtual int CountImportPhysicalIo(void);
340 virtual int CountImportSymbolicIo(void);
341 virtual void LiteralCyclic(void);
342 virtual void DeclareSystime(void);
343 virtual void UpdateSystime(void);
344 virtual void InsertExecHooks(void);
345
346
347
363 virtual void DoReadTargetConfiguration(TokenReader& rTr);
364
376 virtual void DoWriteTargetConfiguration(TokenWriter& rTw) const;
377
378 void CurrentVariableType(const IECVariableType& type);
379 IECVariableType CurrentVariableType(void);
380
381private:
382 IECVariableType mCurrentVariableType;
383 bool mDeclareIOVars;
384
385};
386
387
388#endif
Code-generator with abstract types and operations.
unsigned long word_t
Code-generator internal data type of target words.
Abstract address; see also Absstract_Addresses.
Abstract expression; see also Absstract_Addresses.
Execution semantics in terms of code primitives.
Implementation of primitives by IEC 61131 ST.
virtual void WordNand(const AA &address, const AX &expression)
generate code: conditionals
virtual AX IntegerIsEq(const AA &address, int val)
generate code: conditionals
virtual void DoReadTargetConfiguration(TokenReader &rTr)
File i/o.
virtual void RunActionSet(const std::string &address)
generate code: conditionals
virtual void IfElseIfTrue(const AX &expression)
generate code: conditionals
virtual void DoWriteTargetConfiguration(TokenWriter &rTw) const
File i/o.
virtual AX IntegerIsLess(const AA &address, int val)
generate code: conditionals
virtual void DeclareImportPhysicalIo(void)
generate code: conditionals
virtual void UpdateSystime(void)
generate code: conditionals
virtual AX BooleanIsNotEq(const AA &op1, const AA &op2)
generate code: conditionals
virtual void CintarrayDeclare(const AA &address, int offset, const std::vector< int > &val)
generate code: conditionals
virtual void IfFalse(const AX &expression)
generate code: conditionals
virtual bool HasCintarray(void)
generate code: conditionals
virtual void WordDeclare(const AA &address)
generate code: conditionals
virtual bool HasWordarray(void)
generate code: conditionals
virtual void IfTrue(const AX &expression)
generate code: conditionals
virtual void BooleanDeclare(const AA &address)
generate code: conditionals
virtual ~Iec61131stCodeGenerator(void)
Explicit destructor.
virtual AX BooleanIsEq(const AA &op1, const AA &op2)
generate code: conditionals
virtual void BooleanAssign(const AA &address, int val)
generate code: conditionals
virtual void IfWord(const AX &expression)
generate code: conditionals
virtual AX WordIsEq(const AA &address, word_t val)
generate code: conditionals
virtual void InsertExecHooks(void)
generate code: conditionals
virtual void TimerDeclare(const AA &address, const std::string &val)
generate code: conditionals
void DoGenerate(void)
code generation hook (overall)
virtual void Clear(void)
Clear all data.
void EndCyclicCode(void)
reimplemented code snippets
void BeginCyclicCode(void)
reimplemented code snippets
virtual void SwitchEnd(void)
generate code: conditionals
virtual void LoopEnd(void)
generate code: conditionals
virtual AX WordarrayConstant(const std::vector< word_t > &val)
generate code: conditionals
virtual AX StrarrayConstant(const std::vector< std::string > &val)
generate code: conditionals
virtual void TimerStart(const AA &address)
generate code: conditionals
virtual void WordAssign(const AA &address, word_t val)
generate code: conditionals
virtual AA CstrarrayAccess(const AA &address, int index)
generate code: conditionals
virtual void DeclareSystime(void)
generate code: conditionals
virtual AX WordIsNotEq(const AA &address, word_t val)
generate code: conditionals
virtual void WordarrayDeclare(const AA &address, int offset, int len)
generate code: conditionals
virtual AX StringConstant(const std::string &val)
generate code: conditionals
virtual void Comment(const std::string &text)
generate code: conditionals
virtual void TimerReset(const AA &address, const std::string &val)
generate code: conditionals
virtual AX IntegerConstant(int val)
generate code: conditionals
virtual void DecrementTimers(void)
code snippet
virtual AX IntegerRemainder(const AX &expression, int val)
generate code: conditionals
std::string mLiteralCyclic
option: extra cyclic code
virtual void IfEnd(void)
generate code: conditionals
virtual bool HasIntarray(void)
generate code: conditionals
virtual AA CintarrayAccess(const AA &address, int index)
generate code: conditionals
void DoCompile(void)
add my preferences to DoCompile
virtual void DeclareImportSymbolicIo(void)
generate code: conditionals
virtual AX IntarrayConstant(const std::vector< int > &val)
generate code: conditionals
virtual AX WordIsMaskSet(const AA &address, word_t mask)
generate code: conditionals
virtual std::string TargetAddress(const AA &address)
abstract address conversion
virtual bool HasCwordarray(void)
generate code: conditionals
virtual int CountImportPhysicalIo(void)
generate code: conditionals
virtual AX IntegerIsGreater(const AA &address, int val)
generate code: conditionals
virtual void RunActionClr(const std::string &address)
generate code: conditionals
virtual AX TimeConstant(int val)
generate code: conditionals
virtual AX WordIsBitSet(const AA &address, int idx)
generate code: conditionals
virtual bool HasIntmaths(void)
generate code: conditionals
virtual AA WordarrayAccess(const AA &address, int index)
generate code: conditionals
virtual void DoGenerateLookups(void)
code generation hook (lookup functions)
virtual AX TimerIsElapsed(const AA &address)
generate code: conditionals
virtual void LoopBegin(void)
generate code: conditionals
virtual void WordOr(const AA &address, word_t val)
generate code: conditionals
virtual void ResetState(void)
generate code: conditionals
virtual void SwitchBegin(const AA &address)
generate code: conditionals
virtual void RunActionExe(const AX &expression)
generate code: conditionals
virtual void CstrarrayDeclare(const AA &address, int offset, const std::vector< std::string > &val)
generate code: conditionals
virtual AX WordIsBitClr(const AA &address, int idx)
generate code: conditionals
virtual void LoopBreak(const AX &expression)
generate code: conditionals
virtual void SwitchBreak(void)
generate code: conditionals
virtual AA IntarrayAccess(const AA &address, int index)
generate code: conditionals
virtual AX IntegerIsNotEq(const AA &address, int val)
generate code: conditionals
virtual void IntegerAssign(const AA &address, int val)
generate code: conditionals
virtual void IfElse(void)
generate code: conditionals
virtual void WordAnd(const AA &address, word_t val)
generate code: conditionals
virtual void IntegerDeclare(const AA &address)
generate code: conditionals
virtual void SwitchCases(const AA &address, int from, int to)
generate code: conditionals
virtual void DeclareTimers(void)
generate code: conditionals
bool mHasIecTimeOperators
option: overloaded operators for time maths
virtual void VariableDeclare(const std::string &laddr, const std::string &ltype)
generate code: conditionals
virtual AX IntegerBitmask(const AX &expression)
generate code: conditionals
virtual void IntegerIncrement(const AA &address, int val)
generate code: conditionals
Iec61131stCodeGenerator(void)
Constructor.
virtual bool HasMultiCase(void)
generate code: conditionals
std::string mIecDeclareSymbolic
option: formal declaration of io variables
virtual void CwordarrayDeclare(const AA &address, int offset, const std::vector< word_t > &val)
generate code: conditionals
virtual AX WordConstant(word_t val)
generate code: conditionals
virtual bool HasCstrarray(void)
generate code: conditionals
virtual AA CwordarrayAccess(const AA &address, int index)
generate code: conditionals
virtual void IntarrayDeclare(const AA &address, int offset, int len)
generate code: conditionals
virtual void SwitchCase(const AA &address, int val)
generate code: conditionals
virtual void DoGenerateFunction(void)
code generation hook (function block)
virtual void TimerStop(const AA &address)
generate code: conditionals
virtual int CountImportSymbolicIo(void)
generate code: conditionals
virtual void FunctionReturn(void)
generate code: conditionals
virtual AX TargetExpression(const AA &address)
abstract address conversion
std::string mIecDeclarePhysical
option: formal declaration of io lines
virtual AX IntegerQuotient(const AX &expression, int val)
generate code: conditionals
virtual void LiteralCyclic(void)
generate code: conditionals