# HG changeset patch # User Edouard Tisserant # Date 1434356392 -7200 # Node ID b7e610672eed62b8f7f1c8a729d90072f30e7e5e # Parent 4ba27ed51e4814b031bd9ab403fa0fd7222dffdf# Parent c9065fb5de0ad1febb9274ea985ae335626633be merged forgotten changesets diff -r 4ba27ed51e48 -r b7e610672eed Beremiz_service.py --- a/Beremiz_service.py Fri Apr 03 17:08:13 2015 +0200 +++ b/Beremiz_service.py Mon Jun 15 10:19:52 2015 +0200 @@ -354,7 +354,7 @@ def __init__(self, servicename, ip_addr, port, workdir, argv, autostart=False, statuschange=None, evaluator=default_evaluator, - website=None): + pyruntimevars=None): self.continueloop = True self.daemon = None self.servicename = servicename @@ -367,7 +367,7 @@ self.autostart = autostart self.statuschange = statuschange self.evaluator = evaluator - self.website = website + self.pyruntimevars = pyruntimevars def Loop(self): while self.continueloop: @@ -387,7 +387,7 @@ self.daemon=pyro.Daemon(host=self.ip_addr, port=self.port) self.plcobj = PLCObject(self.workdir, self.daemon, self.argv, self.statuschange, self.evaluator, - self.website) + self.pyruntimevars) uri = self.daemon.connect(self.plcobj,"PLCObject") print "Pyro port :",self.port diff -r 4ba27ed51e48 -r b7e610672eed runtime/PLCObject.py --- a/runtime/PLCObject.py Fri Apr 03 17:08:13 2015 +0200 +++ b/runtime/PLCObject.py Mon Jun 15 10:19:52 2015 +0200 @@ -137,10 +137,15 @@ Load PLC library Declare all functions, arguments and return values """ + md5 = open(self._GetMD5FileName(), "r").read() try: self._PLClibraryHandle = dlopen(self._GetLibFileName()) self.PLClibraryHandle = ctypes.CDLL(self.CurrentPLCFilename, handle=self._PLClibraryHandle) + self.PLCID = ctypes.c_char_p.in_dll(self.PLClibraryHandle, "PLCID") + if len(md5) == 32 : + self.PLCID.value = md5 + self._startPLC = self.PLClibraryHandle.startPLC self._startPLC.restype = ctypes.c_int self._startPLC.argtypes = [ctypes.c_int, ctypes.POINTER(ctypes.c_char_p)] diff -r 4ba27ed51e48 -r b7e610672eed targets/Linux/plc_Linux_main.c --- a/targets/Linux/plc_Linux_main.c Fri Apr 03 17:08:13 2015 +0200 +++ b/targets/Linux/plc_Linux_main.c Mon Jun 15 10:19:52 2015 +0200 @@ -232,6 +232,14 @@ pthread_mutex_lock(&python_mutex); } +void InitRetain(void) +{ +} + +void CleanupRetain(void) +{ +} + int CheckRetainBuffer(void) { return 1; diff -r 4ba27ed51e48 -r b7e610672eed targets/Win32/plc_Win32_main.c --- a/targets/Win32/plc_Win32_main.c Fri Apr 03 17:08:13 2015 +0200 +++ b/targets/Win32/plc_Win32_main.c Mon Jun 15 10:19:52 2015 +0200 @@ -244,6 +244,14 @@ WaitForSingleObject(python_sem, INFINITE); } +void InitRetain(void) +{ +} + +void CleanupRetain(void) +{ +} + int CheckRetainBuffer(void) { return 1; diff -r 4ba27ed51e48 -r b7e610672eed targets/Xenomai/plc_Xenomai_main.c --- a/targets/Xenomai/plc_Xenomai_main.c Fri Apr 03 17:08:13 2015 +0200 +++ b/targets/Xenomai/plc_Xenomai_main.c Mon Jun 15 10:19:52 2015 +0200 @@ -363,23 +363,3 @@ } /* as plc does not wait for lock. */ } -int CheckRetainBuffer(void) -{ - return 1; -} - -void ValidateRetainBuffer(void) -{ -} - -void InValidateRetainBuffer(void) -{ -} - -void Retain(unsigned int offset, unsigned int count, void *p) -{ -} - -void Remind(unsigned int offset, unsigned int count, void *p) -{ -} diff -r 4ba27ed51e48 -r b7e610672eed targets/Xenomai/plc_Xenomai_noretain.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/Xenomai/plc_Xenomai_noretain.c Mon Jun 15 10:19:52 2015 +0200 @@ -0,0 +1,20 @@ +int CheckRetainBuffer(void) +{ + return 1; +} + +void ValidateRetainBuffer(void) +{ +} + +void InValidateRetainBuffer(void) +{ +} + +void Retain(unsigned int offset, unsigned int count, void *p) +{ +} + +void Remind(unsigned int offset, unsigned int count, void *p) +{ +} diff -r 4ba27ed51e48 -r b7e610672eed targets/__init__.py --- a/targets/__init__.py Fri Apr 03 17:08:13 2015 +0200 +++ b/targets/__init__.py Mon Jun 15 10:19:52 2015 +0200 @@ -38,7 +38,10 @@ targets = dict([(name, {"xsd":path.join(_base_path, name, "XSD"), "class":_GetLocalTargetClassFactory(name), - "code": path.join(path.split(__file__)[0],name,"plc_%s_main.c"%name)}) + "code": { fname: path.join(_base_path, name, fname) + for fname in listdir(path.join(_base_path, name)) + if fname.startswith("plc_%s_main"%name) and + fname.endswith(".c")}}) for name in listdir(_base_path) if path.isdir(path.join(_base_path, name)) and not name.startswith("__")]) @@ -67,7 +70,9 @@ return targetchoices def GetTargetCode(targetname): - return open(targets[targetname]["code"]).read() + codedesc = targets[targetname]["code"] + code = "\n".join([open(fpath).read() for fname, fpath in sorted(codedesc.items())]) + return code def GetHeader(): filename = path.join(path.split(__file__)[0],"beremiz.h") diff -r 4ba27ed51e48 -r b7e610672eed targets/plc_debug.c --- a/targets/plc_debug.c Fri Apr 03 17:08:13 2015 +0200 +++ b/targets/plc_debug.c Mon Jun 15 10:19:52 2015 +0200 @@ -111,6 +111,7 @@ } extern int CheckRetainBuffer(void); +extern void InitRetain(void); void __init_debug(void) { @@ -118,13 +119,19 @@ buffer_cursor = debug_buffer; retain_offset = 0; buffer_state = BUFFER_FREE; + InitRetain(); /* Iterate over all variables to fill debug buffer */ - if(CheckRetainBuffer()) + if(CheckRetainBuffer()){ __for_each_variable_do(RemindIterator); + }else{ + char mstr[] = "RETAIN memory invalid - defaults used"; + LogMessage(LOG_WARNING, mstr, sizeof(mstr)); + } retain_offset = 0; } extern void InitiateDebugTransfer(void); +extern void CleanupRetain(void); extern unsigned long __tick; @@ -132,6 +139,7 @@ { buffer_cursor = debug_buffer; InitiateDebugTransfer(); + CleanupRetain(); } void __retrieve_debug(void) diff -r 4ba27ed51e48 -r b7e610672eed targets/plc_main_head.c --- a/targets/plc_main_head.c Fri Apr 03 17:08:13 2015 +0200 +++ b/targets/plc_main_head.c Mon Jun 15 10:19:52 2015 +0200 @@ -25,6 +25,7 @@ IEC_TIME __CURRENT_TIME; IEC_BOOL __DEBUG = 0; unsigned long __tick = 0; +char *PLCID = NULL; /* * Variable generated by C softPLC and plugins diff -r 4ba27ed51e48 -r b7e610672eed tests/python/c_code@c_ext/cfile.xml --- a/tests/python/c_code@c_ext/cfile.xml Fri Apr 03 17:08:13 2015 +0200 +++ b/tests/python/c_code@c_ext/cfile.xml Mon Jun 15 10:19:52 2015 +0200 @@ -14,6 +14,7 @@ volatile char PtoC=1,CtoP=2; extern long AtomicCompareExchange(long*,long, long); +extern char *PLCID; int Simple_C_Call(int val){ return val+1; @@ -34,6 +35,7 @@ res=1; } printf("C code called by Python: toC %d fromC %d\n",toC,*fromC); + printf("PLCID id %s\n",PLCID); return res; } diff -r 4ba27ed51e48 -r b7e610672eed tests/python/plc.xml --- a/tests/python/plc.xml Fri Apr 03 17:08:13 2015 +0200 +++ b/tests/python/plc.xml Mon Jun 15 10:19:52 2015 +0200 @@ -1,7 +1,7 @@ - +