diff --git a/data/etc/avahi/services/revpipyload.service b/data/etc/avahi/services/revpipyload.service
index 666966a..280aaad 100644
--- a/data/etc/avahi/services/revpipyload.service
+++ b/data/etc/avahi/services/revpipyload.service
@@ -4,6 +4,6 @@
%h
_revpipyload._tcp
- 55239
+ 55123
diff --git a/data/etc/revpipyload/revpipyload.conf b/data/etc/revpipyload/revpipyload.conf
index 3731ac9..8bc228d 100644
--- a/data/etc/revpipyload/revpipyload.conf
+++ b/data/etc/revpipyload/revpipyload.conf
@@ -3,11 +3,12 @@ autoreload = 1
autostart = 1
plcworkdir = /var/lib/revpipyload
plcprogram = program.py
-plcarguments =
+plcarguments =
plcuid = 1000
plcgid = 1000
plcslave = 0
pythonversion = 3
+rtlevel = 1
xmlrpc = 0
zeroonerror = 0
zeroonexit = 0
diff --git a/revpipyload/plcsystem.py b/revpipyload/plcsystem.py
index bc3ae2c..d2a0037 100644
--- a/revpipyload/plcsystem.py
+++ b/revpipyload/plcsystem.py
@@ -41,6 +41,7 @@ class RevPiPlc(Thread):
self.exitcode = None
self.gid = 65534
self.uid = 65534
+ self.rtlevel = 1
self.zeroonerror = False
self.zeroonexit = False
@@ -103,19 +104,32 @@ class RevPiPlc(Thread):
"""Fuehrt PLC-Programm aus und ueberwacht es."""
proginit.logger.debug("enter RevPiPlc.run()")
- if self._pversion == 2:
- lst_proc = shlex.split("/usr/bin/env python2 -u {} {}".format(
- self._program, self._arguments
- ))
- else:
- lst_proc = shlex.split("/usr/bin/env python3 -u {} {}".format(
- self._program, self._arguments
- ))
+ # Befehlstliste aufbauen
+ lst_proc = shlex.split("/usr/bin/env {} -OO -u {} {}".format(
+ "python2" if self._pversion == 2 else "python3",
+ self._program,
+ self._arguments
+ ))
# Prozess erstellen
proginit.logger.info("start plc program {}".format(self._program))
self._procplc = self._spopen(lst_proc)
+ # RealTime Scheduler nutzen
+ if self.rtlevel > 0 and self._procplc.poll() is None:
+ proginit.logger.info(
+ "set scheduler profile of pid {}".format(self._procplc.pid)
+ )
+ ec = os.system("/usr/bin/env chrt -p {} {}".format(
+ 20 if self.rtlevel == 2 else 1,
+ self._procplc.pid
+ ))
+ if ec != 0:
+ proginit.logger.error(
+ "could not set scheduler profile of pid {}"
+ "".format(self._procplc.pid)
+ )
+
# LogWriter starten und Logausgaben schreiben
if self._plw is not None:
self._plw.logline("-" * 55)
diff --git a/revpipyload/procimgserver.py b/revpipyload/procimgserver.py
index 627c801..a2cb0b7 100644
--- a/revpipyload/procimgserver.py
+++ b/revpipyload/procimgserver.py
@@ -13,7 +13,7 @@ IO-Check bei Inbetriebname durchzufuehren.
"""
import pickle
import proginit
-import revpimodio
+import revpimodio2
from xmlrpc.client import Binary
@@ -47,7 +47,6 @@ class ProcimgServer():
"ps_devices": self.devices,
"ps_inps": lambda: self.ios("inp"),
"ps_outs": lambda: self.ios("out"),
- "ps_mems": lambda: self.ios("mem"),
"ps_values": self.values,
}
self.xmlwritefuncs = {
@@ -62,7 +61,7 @@ class ProcimgServer():
"""Generiert Deviceliste mit Position und Namen.
@return list() mit Tuple (pos, name)"""
return [
- (dev.position, dev.name) for dev in self.rpi.devices
+ (dev.position, dev.name) for dev in self.rpi.device
]
def ios(self, type):
@@ -70,16 +69,14 @@ class ProcimgServer():
@param type IO Typ inp/out
@return pickled dict()"""
dict_ios = {}
- for dev in self.rpi.devices:
+ for dev in self.rpi.device:
dict_ios[dev.position] = []
# IO Typen auswerten
if type == "inp":
- lst_io = dev.get_inps()
+ lst_io = dev.get_inputs()
elif type == "out":
- lst_io = dev.get_outs()
- elif type == "mem":
- lst_io = dev.get_mems()
+ lst_io = dev.get_outputs()
else:
lst_io = []
@@ -87,7 +84,7 @@ class ProcimgServer():
dict_ios[dev.position].append([
io.name,
1 if io._bitlength == 1 else int(io._bitlength / 8),
- io.slc_address.start + dev.offset,
+ io._slc_address.start + dev.offset,
io.bmk,
io._bitaddress,
])
@@ -100,9 +97,9 @@ class ProcimgServer():
if self.rpi is not None:
self.rpi.cleanup()
- proginit.logger.debug("create revpimodio class")
+ proginit.logger.debug("create revpimodio2 object")
try:
- self.rpi = revpimodio.RevPiModIO(
+ self.rpi = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg
)
@@ -111,8 +108,8 @@ class ProcimgServer():
proginit.logger.error("piCtory configuration not loadable")
return False
- self.rpi.devices.syncoutputs(device=0)
- proginit.logger.debug("created revpimodio class")
+ self.rpi.syncoutputs(device=0)
+ proginit.logger.debug("created revpimodio2 object")
return True
def setvalue(self, device, io, value):
@@ -135,30 +132,31 @@ class ProcimgServer():
if type(value) == Binary:
value = value.data
- self.rpi.devices.syncoutputs(device=device)
+ self.rpi.syncoutputs(device=device)
try:
# Neuen Wert übernehmen
if type(value) == bytes or type(value) == bool:
- self.rpi.devices[device][io].set_value(value)
+ self.rpi.io[io].set_value(value)
else:
- self.rpi.devices[device][io].set_value(
+ self.rpi.io[io].set_value(
value.to_bytes(
- self.rpi.devices[device][io].length, byteorder="little"
+ self.rpi.io[io].length,
+ byteorder=self.rpi.io[io].byteorder
)
)
except Exception as e:
return [device, io, False, str(e)]
- self.rpi.devices.writeprocimg(device=device)
+ self.rpi.writeprocimg(device=device)
return [device, io, True, ""]
def values(self):
"""Liefert Prozessabbild an Client.
@return Binary() bytes or None"""
- if self.rpi.devices.readprocimg() and self.rpi.devices.syncoutputs():
+ if self.rpi.readprocimg() and self.rpi.syncoutputs():
bytebuff = b''
- for dev in self.rpi.devices:
+ for dev in self.rpi.device:
bytebuff += bytes(dev)
return Binary(bytebuff)
else:
diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py
index e14b899..8703150 100755
--- a/revpipyload/revpipyload.py
+++ b/revpipyload/revpipyload.py
@@ -123,6 +123,8 @@ class RevPiPyLoad():
int(self.globalconfig["DEFAULT"].get("plcslave", 0))
self.pythonver = \
int(self.globalconfig["DEFAULT"].get("pythonversion", 3))
+ self.rtlevel = \
+ int(self.globalconfig["DEFAULT"].get("rtlevel", 1))
self.xmlrpc = \
int(self.globalconfig["DEFAULT"].get("xmlrpc", 0))
self.zeroonerror = \
@@ -142,7 +144,7 @@ class RevPiPyLoad():
self.xsrv = SimpleXMLRPCServer(
(
"",
- int(self.globalconfig["DEFAULT"].get("xmlrpcport", 55239))
+ int(self.globalconfig["DEFAULT"].get("xmlrpcport", 55123))
),
logRequests=False,
allow_none=True
@@ -170,10 +172,10 @@ class RevPiPyLoad():
except:
self.xml_ps = None
proginit.logger.warning(
- "can not load revpimodio module. maybe its not installed "
- "or an old version (required at least 0.15.0). if you "
+ "can not load revpimodio2 module. maybe its not installed "
+ "or an old version (required at least 2.0.5). if you "
"like to use the process monitor feature, update/install "
- "revpimodio: 'apt-get install python3-revpimodio'"
+ "revpimodio2: 'apt-get install python3-revpimodio2'"
)
# XML Modus 2 Einstellungen lesen und Programm herunterladen
@@ -236,6 +238,7 @@ class RevPiPyLoad():
th_plc.autoreload = self.autoreload
th_plc.gid = int(self.globalconfig["DEFAULT"].get("plcgid", 65534))
th_plc.uid = int(self.globalconfig["DEFAULT"].get("plcuid", 65534))
+ th_plc.rtlevel = self.rtlevel
th_plc.zeroonerror = self.zeroonerror
th_plc.zeroonexit = self.zeroonexit
@@ -395,9 +398,8 @@ class RevPiPyLoad():
dc["plcarguments"] = self.plcarguments
dc["plcslave"] = self.plcslave
dc["pythonversion"] = self.pythonver
+ dc["rtlevel"] = self.rtlevel
dc["xmlrpc"] = self.xmlrpc
- dc["xmlrpcport"] = \
- self.globalconfig["DEFAULT"].get("xmlrpcport", 55239)
dc["zeroonerror"] = self.zeroonerror
dc["zeroonexit"] = self.zeroonexit
return dc
@@ -567,8 +569,8 @@ class RevPiPyLoad():
"plcarguments": ".*",
"plcslave": "[01]",
"pythonversion": "[23]",
+ "rtlevel": "[0-2]",
"xmlrpc": "[0-3]",
- "xmlrpcport": "[0-9]{,5}",
"zeroonerror": "[01]",
"zeroonexit": "[01]"
}
diff --git a/setup.py b/setup.py
index e365178..37cae22 100644
--- a/setup.py
+++ b/setup.py
@@ -31,7 +31,7 @@ setup(
scripts=["data/revpipyload"],
- install_requires=["revpimodio"],
+ install_requires=["revpimodio2"],
data_files=[
("/etc/avahi/services", [
@@ -56,9 +56,13 @@ setup(
"Tool zur Laufzeit überwacht werden.",
classifiers=[
+ "Development Status :: 5 - Production/Stable",
+ "Environment :: No Input/Output (Daemon)",
+ "Intended Audience :: Manufacturing",
"License :: OSI Approved :: "
"GNU Lesser General Public License v3 (LGPLv3)",
"Operating System :: POSIX :: Linux",
+ "Topic :: System :: Operating System",
],
cmdclass={"install_egg_info": MyEggInfo},
)
diff --git a/stdeb.cfg b/stdeb.cfg
index b6c3754..191693a 100644
--- a/stdeb.cfg
+++ b/stdeb.cfg
@@ -1,6 +1,6 @@
[DEFAULT]
Debian-Version: 1
-Depends3: python3-revpimodio (>= 0.11.0)
+Depends3: python3-revpimodio2 (>= 2.0.0)
Package: revpipyload
Suite: stable
X-Python3-Version: >=3.2