Mit default zusammenführen

This commit is contained in:
2017-09-19 14:09:01 +02:00
7 changed files with 58 additions and 39 deletions

View File

@@ -4,6 +4,6 @@
<name replace-wildcards="yes">%h</name>
<service protocol="ipv4">
<type>_revpipyload._tcp</type>
<port>55239</port>
<port>55123</port>
</service>
</service-group>

View File

@@ -3,13 +3,14 @@ autoreload = 1
autostart = 1
plcworkdir = /var/lib/revpipyload
plcprogram = program.py
plcarguments =
plcarguments =
plcuid = 1000
plcgid = 1000
plcslave = 0
plcslaveacl =
plcslaveport = 55234
pythonversion = 3
rtlevel = 1
xmlrpc = 0
xmlrpcacl =
zeroonerror = 0

View File

@@ -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)

View File

@@ -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:

View File

@@ -164,6 +164,8 @@ class RevPiPyLoad():
int(self.globalconfig["DEFAULT"].get("plcslaveport", 55234))
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))
@@ -195,7 +197,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
@@ -223,10 +225,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
@@ -295,6 +297,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
@@ -489,10 +492,9 @@ class RevPiPyLoad():
dc["plcslaveacl"] = self.plcslaveacl
dc["plcslaveport"] = self.plcslaveport
dc["pythonversion"] = self.pythonver
dc["rtlevel"] = self.rtlevel
dc["xmlrpc"] = self.xmlrpc
dc["xmlrpcacl"] = self.xmlrpcacl
dc["xmlrpcport"] = \
self.globalconfig["DEFAULT"].get("xmlrpcport", 55239)
dc["zeroonerror"] = self.zeroonerror
dc["zeroonexit"] = self.zeroonexit
return dc
@@ -664,9 +666,9 @@ class RevPiPyLoad():
"plcslaveacl": re_ipacl,
"plcslaveport": "[0-9]{,5}",
"pythonversion": "[23]",
"rtlevel": "[0-2]",
"xmlrpc": "[0-3]",
"xmlrpcacl": re_ipacl,
"xmlrpcport": "[0-9]{,5}",
"zeroonerror": "[01]",
"zeroonexit": "[01]"
}

View File

@@ -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},
)

View File

@@ -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