CanFestival plugin fills master's DCF to prepare PDO mappings in a way conform to DSP-301
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PyFile>
<variables>
<variable name="Test_Python_Var" type="INT" initial="4"/>
<variable name="Second_Python_Var" type="INT" initial="5"/>
</variables>
<globals>
<![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()
"""
]]>
</globals>
<init>
<![CDATA[
global x, y
x = 2
y = 5
print "py_runtime init:", x, ",", y
]]>
</init>
<cleanup>
<![CDATA[
print "py_runtime cleanup"
]]>
</cleanup>
<start>
<![CDATA[
global x, y
print "py_runtime start", x * x + y * y
]]>
</start>
<stop>
<![CDATA[
print "py_runtime stop"
]]>
</stop>
</PyFile>