beremiz

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
import os
import sys
import unittest
import wx
import time
import traceback
from xvfbwrapper import Xvfb
vdisplay = None
def setUpModule():
vdisplay = Xvfb(width=1280, height=720)
vdisplay.start()
def tearDownModule():
if vdisplay is not None:
vdisplay.stop()
class UserApplicationTest(unittest.TestCase):
def InstallExceptionHandler(self):
def handle_exception(e_type, e_value, e_traceback):
# traceback.print_exception(e_type, e_value, e_traceback)
self.exc_info = [e_type, e_value, e_traceback]
self.exc_info = None
self.old_excepthook = sys.excepthook
sys.excepthook = handle_exception
def StartApp(self):
self.app = None
def FinishApp(self):
wx.CallAfter(self.app.frame.Close)
self.app.MainLoop()
# time.sleep(0.2)
self.app = None
def tearDown(self):
if self.app is not None and self.app.frame is not None:
self.FinishApp()
def RunUIActions(self, actions):
for act in actions:
wx.CallAfter(*act)
self.ProcessEvents()
def CheckForErrors(self):
if self.exc_info is not None:
# reraise catched previously exception
raise self.exc_info[0], self.exc_info[1], self.exc_info[2]
def ProcessEvents(self):
for i in range(0, 30):
self.CheckForErrors()
wx.Yield()
time.sleep(0.01)
class BeremizApplicationTest(UserApplicationTest):
"""Test Beremiz as whole application"""
def StartApp(self):
self.app = Beremiz.BeremizIDELauncher()
# disable default exception handler in Beremiz
self.app.InstallExceptionHandler = lambda: None
self.InstallExceptionHandler()
self.app.PreStart()
def FinishApp(self):
wx.CallAfter(self.app.frame.Close)
self.app.MainLoop()
time.sleep(1)
self.app = None
def OpenAllProjectElements(self):
# open every object in the project tree
self.app.frame.ProjectTree.ExpandAll()
self.ProcessEvents()
item = self.app.frame.ProjectTree.GetRootItem()
while item is not None:
self.app.frame.ProjectTree.SelectItem(item, True)
self.ProcessEvents()
id = self.app.frame.ProjectTree.GetId()
event = wx.lib.agw.customtreectrl.TreeEvent(
wx.lib.agw.customtreectrl.wxEVT_TREE_ITEM_ACTIVATED,
id, item)
self.app.frame.OnProjectTreeItemActivated(event)
self.ProcessEvents()
item = self.app.frame.ProjectTree.GetNextVisible(item)
def CheckTestProject(self, project):
sys.argv = ["", project]
self.StartApp()
self.OpenAllProjectElements()
user_actions = [
[self.app.frame.SwitchFullScrMode, None],
[self.app.frame.SwitchFullScrMode, None],
[self.app.frame.CTR._Clean],
[self.app.frame.CTR._Build],
[self.app.frame.CTR._Connect],
[self.app.frame.CTR._Transfer],
[self.app.frame.CTR._Run],
[self.app.frame.CTR._Stop],
[self.app.frame.CTR._Disconnect],
]
# user_actions.append([self.app.frame.OnCloseProjectMenu, None])
self.RunUIActions(user_actions)
self.FinishApp()
def GetProjectPath(self, project):
return os.path.abspath(os.path.join(os.path.dirname(__file__), "..", project))
# @unittest.skip("")
def testStartUp(self):
"""Checks whether the app starts and finishes correctly"""
self.StartApp()
self.FinishApp()
# @unittest.skip("")
def testOpenExampleProjects(self):
"""Opens, builds and runs user PLC examples from tests directory"""
prj = [
"first_steps",
"logging",
"svgui",
"traffic_lights",
"wxGlade",
"python",
"wiimote",
"wxHMI",
]
for name in prj:
project = self.GetProjectPath(name)
print "Testing example " + name
self.CheckTestProject(project)
if __name__ == '__main__':
if __package__ is None:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
global Beremiz
import Beremiz
unittest.main()