targets/plc_main_head.c
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Mon, 13 Aug 2018 18:19:17 +0300
changeset 2282 73f95ba6d3af
parent 1981 d0718654d9b0
child 2503 6ffeffb6d635
permissions -rw-r--r--
Rename extension instance 'wxHMI' to 'wxglade_hmi'

It is necessary because of following commit 7f59aa398669 ('WxGlade HMI extension now does
only instanciate wx object who's name match extension's name. If no
object match the name and no code is provided in 'start' user python
code section, then a warning is issued')
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
     1
/**
985
cd8dadcef426 Re-organized C code templates for plc_main. Moved logging out of plc_debug. Factorized redundant _common_ticktime external declaration
Edouard Tisserant
parents: 568
diff changeset
     2
 * Head of code common to all C targets
332
4f0e1d66bba5 add utf-8 and save shortcut support in PythonST
greg
parents: 289
diff changeset
     3
 **/
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
     4
1001
3f966bbb3fba Added beremiz.h header file for extensions
Edouard Tisserant
parents: 985
diff changeset
     5
#include "beremiz.h"
1391
f6818bb5e292 Added <string.h> to plc_main_head.c to avoid warnings.
Edouard Tisserant
parents: 1001
diff changeset
     6
#include <string.h>
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
     7
/*
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
     8
 * Prototypes of functions provided by generated C softPLC
332
4f0e1d66bba5 add utf-8 and save shortcut support in PythonST
greg
parents: 289
diff changeset
     9
 **/
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    10
void config_run__(unsigned long tick);
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    11
void config_init__(void);
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    12
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    13
/*
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    14
 * Prototypes of functions provided by generated target C code
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    15
 * */
1392
7d295f013061 More gcc warning avoided
Edouard Tisserant
parents: 1391
diff changeset
    16
long long AtomicCompareExchange64(long long*, long long, long long);
235
a66e150f2888 Improved debug data feedback.
etisserant
parents: 209
diff changeset
    17
void __init_debug(void);
a66e150f2888 Improved debug data feedback.
etisserant
parents: 209
diff changeset
    18
void __cleanup_debug(void);
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    19
/*void __retrieve_debug(void);*/
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    20
void __publish_debug(void);
235
a66e150f2888 Improved debug data feedback.
etisserant
parents: 209
diff changeset
    21
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    22
/*
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    23
 *  Variables used by generated C softPLC and plugins
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    24
 **/
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    25
IEC_TIME __CURRENT_TIME;
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    26
IEC_BOOL __DEBUG = 0;
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 423
diff changeset
    27
unsigned long __tick = 0;
1463
de311ffe3961 Changed runtime's global PLCID to PLC_ID, working around redefinition in windoze' headers.
Edouard Tisserant
parents: 1457
diff changeset
    28
char *PLC_ID = NULL;
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    29
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    30
/*
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    31
 *  Variable generated by C softPLC and plugins
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    32
 **/
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    33
extern unsigned long greatest_tick_count__;
985
cd8dadcef426 Re-organized C code templates for plc_main. Moved logging out of plc_debug. Factorized redundant _common_ticktime external declaration
Edouard Tisserant
parents: 568
diff changeset
    34
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    35
/* Help to quit cleanly when init fail at a certain level */
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    36
static int init_level = 0;
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    37
1981
d0718654d9b0 Added logging in Xenomai init phase.
Edouard Tisserant
parents: 1463
diff changeset
    38
/* Prototype for Logging to help spotting errors at init */
d0718654d9b0 Added logging in Xenomai init phase.
Edouard Tisserant
parents: 1463
diff changeset
    39
int LogMessage(uint8_t level, char* buf, uint32_t size);
d0718654d9b0 Added logging in Xenomai init phase.
Edouard Tisserant
parents: 1463
diff changeset
    40
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    41
/*
332
4f0e1d66bba5 add utf-8 and save shortcut support in PythonST
greg
parents: 289
diff changeset
    42
 * Prototypes of functions exported by plugins
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    43
 **/
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    44
%(calls_prototypes)s
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    45
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    46
/*
332
4f0e1d66bba5 add utf-8 and save shortcut support in PythonST
greg
parents: 289
diff changeset
    47
 * Retrieve input variables, run PLC and publish output variables
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    48
 **/
423
4d7ac355701d Fix some warnings during compilation
greg
parents: 397
diff changeset
    49
void __run(void)
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    50
{
236
a32817e81f5e Now debug all ticks, not only odd ones :-)
etisserant
parents: 235
diff changeset
    51
    __tick++;
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    52
    if (greatest_tick_count__)
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    53
        __tick %%= greatest_tick_count__;
236
a32817e81f5e Now debug all ticks, not only odd ones :-)
etisserant
parents: 235
diff changeset
    54
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    55
    %(retrieve_calls)s
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    56
239
112b4bc523b3 Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents: 236
diff changeset
    57
    /*__retrieve_debug();*/
332
4f0e1d66bba5 add utf-8 and save shortcut support in PythonST
greg
parents: 289
diff changeset
    58
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    59
    config_run__(__tick);
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    60
239
112b4bc523b3 Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents: 236
diff changeset
    61
    __publish_debug();
332
4f0e1d66bba5 add utf-8 and save shortcut support in PythonST
greg
parents: 289
diff changeset
    62
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    63
    %(publish_calls)s
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    64
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    65
}
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    66
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    67
/*
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 386
diff changeset
    68
 * Initialize variables according to PLC's default values,
332
4f0e1d66bba5 add utf-8 and save shortcut support in PythonST
greg
parents: 289
diff changeset
    69
 * and then init plugins with that values
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    70
 **/
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    71
int __init(int argc,char **argv)
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    72
{
386
2932b0dd437c Applying patch from Iztok for old gcc versions
laurent
parents: 366
diff changeset
    73
    int res = 0;
423
4d7ac355701d Fix some warnings during compilation
greg
parents: 397
diff changeset
    74
    init_level = 0;
985
cd8dadcef426 Re-organized C code templates for plc_main. Moved logging out of plc_debug. Factorized redundant _common_ticktime external declaration
Edouard Tisserant
parents: 568
diff changeset
    75
    
1428
e14003eb4d42 Simplified use of runtime's global variable __common_ticktime accross extensions.
Edouard Tisserant
parents: 1392
diff changeset
    76
    /* Effective tick time with 1ms default value */
e14003eb4d42 Simplified use of runtime's global variable __common_ticktime accross extensions.
Edouard Tisserant
parents: 1392
diff changeset
    77
    if(!common_ticktime__)
e14003eb4d42 Simplified use of runtime's global variable __common_ticktime accross extensions.
Edouard Tisserant
parents: 1392
diff changeset
    78
        common_ticktime__ = 1000000;
985
cd8dadcef426 Re-organized C code templates for plc_main. Moved logging out of plc_debug. Factorized redundant _common_ticktime external declaration
Edouard Tisserant
parents: 568
diff changeset
    79
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    80
    config_init__();
235
a66e150f2888 Improved debug data feedback.
etisserant
parents: 209
diff changeset
    81
    __init_debug();
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    82
    %(init_calls)s
386
2932b0dd437c Applying patch from Iztok for old gcc versions
laurent
parents: 366
diff changeset
    83
    return res;
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    84
}
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    85
/*
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    86
 * Calls plugin cleanup proc.
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    87
 **/
423
4d7ac355701d Fix some warnings during compilation
greg
parents: 397
diff changeset
    88
void __cleanup(void)
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    89
{
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    90
    %(cleanup_calls)s
235
a66e150f2888 Improved debug data feedback.
etisserant
parents: 209
diff changeset
    91
    __cleanup_debug();
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    92
}
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    93
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    94
void PLC_GetTime(IEC_TIME *CURRENT_TIME);
518
8e61b0066859 Fixed confusion about __common_ticktime type, redesigned LPC PLC timer support
edouard
parents: 446
diff changeset
    95
void PLC_SetTimer(unsigned long long next, unsigned long long period);
209
08dc3d064cb5 Moved template C code to targets dir. Cleaned up some forgotten print.
etisserant
parents:
diff changeset
    96
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 245
diff changeset
    97
985
cd8dadcef426 Re-organized C code templates for plc_main. Moved logging out of plc_debug. Factorized redundant _common_ticktime external declaration
Edouard Tisserant
parents: 568
diff changeset
    98