tests/python/python@py_ext/pyfile.xml
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Tue, 12 Sep 2017 16:49:35 +0300
changeset 1800 1711339585ce
parent 1401 611fded24ce4
child 2680 6bfed6757495
permissions -rw-r--r--
make possible to turn off at compile time online debugging, logging
and external sync functionality

Defines TARGET_DEBUG_DISABLE, TARGET_LOGGING_DISABLE, TARGET_EXT_SYNC_DISABLE
allow to use generated PLC code in low-cost microcontrollers,
integrate into external programs and so on.

main.c:
extern void __run(void);
int main(void)
{
for(;;) {
__run();
// sleep common_ticktime__ ns
// add common_ticktime__ ns to __CURRENT_TIME
}
return 0;
}

Compile for example for arm bare-metal:
../build$ arm-none-eabi-gcc \
-DTARGET_DEBUG_DISABLE -DTARGET_LOGGER_DISABLE
-DTARGET_EXT_SYNC_DISABLE \
-flto -ffunction-sections -fdata-sections -I../../../../matiec/lib/C \
*.c \
-nodefaultlibs --specs=nano.specs -Wl,--static -Wl,--gc-section -Wl,--start-group -lc -lm -lnosys -lgcc -Wl,--end-group
<?xml version='1.0' encoding='utf-8'?>
<PyFile xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <variables>
    <variable name="Test_Python_Var" type="INT" initial="4"/>
    <variable name="Second_Python_Var" type="INT" initial="5"/>
  </variables>
  <globals>
    <xhtml:p><![CDATA[
import time,sys,ctypes
Python_to_C_Call = PLCBinary.Python_to_C_Call
Python_to_C_Call.restype = ctypes.c_int
Python_to_C_Call.argtypes = [ctypes.c_int, ctypes.POINTER(ctypes.c_int)]

def MyPythonFunc(arg):
    i = ctypes.c_int()
    if(Python_to_C_Call(arg, i)):
        res = i.value
        print "toC:", arg, "from C:", res, "FBID:", FBID
    else:
        print "Failed Python_to_C_Call failed"
        res = None
    print "Python read PLC global :",PLCGlobals.Test_Python_Var
    PLCGlobals.Second_Python_Var = 789
    sys.stdout.flush()
    return res

async_error_test_code = """
def badaboom():
    tuple()[0]

import wx
def badaboomwx():
    wx.CallAfter(badaboom)

from threading import Timer
a = Timer(3, badaboom)
a.start()

b = Timer(6, badaboomwx)
b.start()
"""
]]></xhtml:p>
  </globals>
  <init>
    <xhtml:p><![CDATA[
global x, y
x = 2
y = 5
print "py_runtime init:", x, ",", y
]]></xhtml:p>
  </init>
  <cleanup>
    <xhtml:p><![CDATA[
print "py_runtime cleanup"
]]></xhtml:p>
  </cleanup>
  <start>
    <xhtml:p><![CDATA[
global x, y
print "py_runtime start", x * x + y * y
]]></xhtml:p>
  </start>
  <stop>
    <xhtml:p><![CDATA[
print "py_runtime stop"
]]></xhtml:p>
  </stop>
</PyFile>