--- a/LPCManager.py Tue Feb 06 15:33:44 2018 +0100
+++ b/LPCManager.py Tue Feb 06 16:02:40 2018 +0100
@@ -106,222 +106,6 @@
# Add LPCmanager's image folder to searched ones.
AddBitmapFolder(os.path.join(_lpcmanager_path, "images"))
-# from controls.LogViewer import LogViewer
-from VariableExporter import VariableWriter
-from PLCControler import PLCControler, ITEMS_UNEDITABLE, ITEM_POU
-from wx.lib.scrolledpanel import ScrolledPanel
-from types import MethodType
-from IDEFrame import IDEFrame
-from dialogs import SearchInProjectDialog
-from controls import TextCtrlAutoComplete
-from py_ext import PythonFileCTNMixin
-from plcopen.structures import TestIdentifier, IDENTIFIER_MODEL
-def CTNGenerate_C(self, buildpath, locations):
- # location string for that CTN
- location_str = "_".join(map(lambda x: str(x),
- self.GetCurrentLocation()))
- configname = self.GetCTRoot().GetProjectConfigNames()[0]
- pyextname = self.CTNName()
- varinfos = map(lambda variable: {
- "name": variable.getname(),
- "desc": repr(variable.getdesc()),
- "onchangecode": '"' + variable.getonchange() + \
- "('" + variable.getname() + "')\"" \
- if variable.getonchange() else '""',
- "onchange": repr(variable.getonchange()) \
- if variable.getonchange() else None,
- "opts": repr(variable.getopts()),
- "configname": configname.upper(),
- "uppername": variable.getname().upper(),
- "IECtype": variable.gettype(),
- "initial": repr(variable.getinitial()),
- "pyextname": pyextname},
- self.CodeFile.variables.variable)
- # python side PLC global variables access stub
- globalstubs = "\n".join(["""\
-_%(name)s_ctype, _%(name)s_unpack, _%(name)s_pack = \\
- TypeTranslator["%(IECtype)s"]
-_PySafeGetPLCGlob_%(name)s = PLCBinary.__SafeGetPLCGlob_%(name)s
-_PySafeGetPLCGlob_%(name)s.restype = None
-_PySafeGetPLCGlob_%(name)s.argtypes = [ctypes.POINTER(_%(name)s_ctype)]
-_PySafeSetPLCGlob_%(name)s = PLCBinary.__SafeSetPLCGlob_%(name)s
-_PySafeSetPLCGlob_%(name)s.restype = None
-_PySafeSetPLCGlob_%(name)s.argtypes = [ctypes.POINTER(_%(name)s_ctype)]
-_%(pyextname)sGlobalsDesc.append((
- for varinfo in varinfos])
- # Runtime calls (start, stop, init, and cleanup)
- for section in self.SECTIONS_NAMES:
- if section != "globals":
- rtcalls += "def _runtime_%s_%s():\n" % (location_str, section)
- sectiontext = self.GetSection(section).strip()
- sectiontext.replace('\n', '\n ') + "\n\n"
- globalsection = self.GetSection("globals")
-## Code generated by Beremiz python mixin confnode
-## Code for PLC global variable access
-from targets.typemapping import TypeTranslator
-_%(pyextname)sGlobalsDesc = []
-__ext_name__ = "%(pyextname)s"
-PLCGlobalsDesc.append(( "%(pyextname)s" , _%(pyextname)sGlobalsDesc ))
-## User code in "global" scope
-## Beremiz python runtime calls
- # write generated content to python file
- runtimefile_path = os.path.join(buildpath,
- "runtime_%s.py" % location_str)
- runtimefile = open(runtimefile_path, 'w')
- runtimefile.write(PyFileContent.encode('utf-8'))
- # C code for safe global variables access
-extern __IEC_%(IECtype)s_t %(configname)s__%(uppername)s;
-IEC_%(IECtype)s __%(name)s_rbuffer = __INIT_%(IECtype)s;
-IEC_%(IECtype)s __%(name)s_wbuffer;
-long __%(name)s_rlock = 0;
-long __%(name)s_wlock = 0;
-int __%(name)s_wbuffer_written = 0;
-void __SafeGetPLCGlob_%(name)s(IEC_%(IECtype)s *pvalue){
- while(AtomicCompareExchange(&__%(name)s_rlock, 0, 1));
- *pvalue = __%(name)s_rbuffer;
- AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0);
-void __SafeSetPLCGlob_%(name)s(IEC_%(IECtype)s *value){
- while(AtomicCompareExchange(&__%(name)s_wlock, 0, 1));
- __%(name)s_wbuffer = *value;
- __%(name)s_wbuffer_written = 1;
- AtomicCompareExchange((long*)&__%(name)s_wlock, 1, 0);
- vardeconchangefmt = """\
-PYTHON_POLL* __%(name)s_notifier;
- if(!AtomicCompareExchange(&__%(name)s_wlock, 0, 1)){
- if(__%(name)s_wbuffer_written == 1){
- %(configname)s__%(uppername)s.value = __%(name)s_wbuffer;
- __%(name)s_wbuffer_written = 0;
- AtomicCompareExchange((long*)&__%(name)s_wlock, 1, 0);
- if(!AtomicCompareExchange(&__%(name)s_rlock, 0, 1)){
- __%(name)s_rbuffer = __GET_VAR(%(configname)s__%(uppername)s);
- AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0);
- varpubonchangefmt = """\
- if(!AtomicCompareExchange(&__%(name)s_rlock, 0, 1)){
- IEC_%(IECtype)s tmp = __GET_VAR(%(configname)s__%(uppername)s);
- if(__%(name)s_rbuffer != tmp){
- __%(name)s_rbuffer = %(configname)s__%(uppername)s.value;
- PYTHON_POLL_body__(__%(name)s_notifier);
- AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0);
- varinitonchangefmt = """\
- __%(name)s_notifier = __GET_GLOBAL_ON%(uppername)sCHANGE();
- __SET_VAR(__%(name)s_notifier->,TRIG,,__BOOL_LITERAL(TRUE));
- __SET_VAR(__%(name)s_notifier->,CODE,,__STRING_LITERAL(%(onchangelen)d,%(onchangecode)s));
- vardec = "\n".join([(vardecfmt + vardeconchangefmt
- if varinfo["onchange"] else vardecfmt) % varinfo
- for varinfo in varinfos])
- varret = "\n".join([varretfmt % varinfo for varinfo in varinfos])
- varpub = "\n".join([(varpubonchangefmt if varinfo["onchange"] else
- for varinfo in varinfos])
- varinit = "\n".join([varinitonchangefmt % dict(
- onchangelen=len(varinfo["onchangecode"]), **varinfo)
- for varinfo in varinfos if varinfo["onchange"]])
- # TODO : use config name obtained from model instead of default
- # "config.h". User cannot change config name, but project imported
- # or created in older beremiz vesion could use different name.
- * Code generated by Beremiz py_ext confnode
- * for safe global variables access
-#include "iec_types_all.h"
-/* User variables reference */
-/* Beremiz confnode functions */
-int __init_%(location_str)s(int argc,char **argv){
-void __cleanup_%(location_str)s(void){
-void __retrieve_%(location_str)s(void){
-void __publish_%(location_str)s(void){
- Gen_PyCfile_path = os.path.join(buildpath, "PyCFile_%s.c" % location_str)
- pycfile = open(Gen_PyCfile_path, 'w')
- pycfile.write(PyCFileContent)
- matiec_CFLAGS = '"-I%s"' % os.path.abspath(
- self.GetCTRoot().GetIECLibPath())
- return ([(Gen_PyCfile_path, matiec_CFLAGS)],
- ("runtime_%s.py" % location_str, file(runtimefile_path, "rb")))
-PythonFileCTNMixin.CTNGenerate_C = CTNGenerate_C
if __name__ == '__main__':
lpcmanager = LPCManagerLauncher()