mirror of
https://github.com/naruxde/revpipycontrol.git
synced 2025-11-08 15:43:52 +01:00
Watchmode wertet nun auch byteorder und signed aus
This commit is contained in:
@@ -3,3 +3,5 @@ include stdeb.cfg
|
|||||||
recursive-include data *
|
recursive-include data *
|
||||||
recursive-include revpipycontrol *
|
recursive-include revpipycontrol *
|
||||||
global-exclude *.pyc
|
global-exclude *.pyc
|
||||||
|
include LICENSE.txt
|
||||||
|
|
||||||
|
|||||||
@@ -87,6 +87,9 @@ Methods</h3>
|
|||||||
<td><a style="color:#0000FF" href="#RevPiCheckClient.maxint">maxint</a></td>
|
<td><a style="color:#0000FF" href="#RevPiCheckClient.maxint">maxint</a></td>
|
||||||
<td>Errechnet maximalen int() Wert für Bytes max 22.</td>
|
<td>Errechnet maximalen int() Wert für Bytes max 22.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiCheckClient.minint">minint</a></td>
|
||||||
|
<td>Errechnet maximalen int() Wert für Bytes max 22.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiCheckClient.readvalues">readvalues</a></td>
|
<td><a style="color:#0000FF" href="#RevPiCheckClient.readvalues">readvalues</a></td>
|
||||||
<td>Ruft nur Input Werte von RevPi ab und aktualisiert Fenster.</td>
|
<td>Ruft nur Input Werte von RevPi ab und aktualisiert Fenster.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -244,13 +247,29 @@ Versteckt alle Fenster.
|
|||||||
</p><a NAME="RevPiCheckClient.maxint" ID="RevPiCheckClient.maxint"></a>
|
</p><a NAME="RevPiCheckClient.maxint" ID="RevPiCheckClient.maxint"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
RevPiCheckClient.maxint</h3>
|
RevPiCheckClient.maxint</h3>
|
||||||
<b>maxint</b>(<i>bytelen</i>)
|
<b>maxint</b>(<i>io</i>)
|
||||||
<p>
|
<p>
|
||||||
Errechnet maximalen int() Wert für Bytes max 22.
|
Errechnet maximalen int() Wert für Bytes max 22.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>bytelen</i></dt>
|
<dt><i>io</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Anzahl Bytes
|
IO-Liste, deren Wert berechnet werden soll
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
int() max oder 0 bei Überschreitung
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="RevPiCheckClient.minint" ID="RevPiCheckClient.minint"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiCheckClient.minint</h3>
|
||||||
|
<b>minint</b>(<i>io</i>)
|
||||||
|
<p>
|
||||||
|
Errechnet maximalen int() Wert für Bytes max 22.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>io</i></dt>
|
||||||
|
<dd>
|
||||||
|
IO-Liste, deren Wert berechnet werden soll
|
||||||
</dd>
|
</dd>
|
||||||
</dl><dl>
|
</dl><dl>
|
||||||
<dt>Returns:</dt>
|
<dt>Returns:</dt>
|
||||||
|
|||||||
@@ -53,7 +53,8 @@ revpicheckclient.RevPiCheckClient._onfrmconf?5(canvas)
|
|||||||
revpicheckclient.RevPiCheckClient._warnwrite?5()
|
revpicheckclient.RevPiCheckClient._warnwrite?5()
|
||||||
revpicheckclient.RevPiCheckClient._workvalues?5(io_dicts=None, writeout=False)
|
revpicheckclient.RevPiCheckClient._workvalues?5(io_dicts=None, writeout=False)
|
||||||
revpicheckclient.RevPiCheckClient.hideallwindows?4()
|
revpicheckclient.RevPiCheckClient.hideallwindows?4()
|
||||||
revpicheckclient.RevPiCheckClient.maxint?4(bytelen)
|
revpicheckclient.RevPiCheckClient.maxint?4(io)
|
||||||
|
revpicheckclient.RevPiCheckClient.minint?4(io)
|
||||||
revpicheckclient.RevPiCheckClient.readvalues?4()
|
revpicheckclient.RevPiCheckClient.readvalues?4()
|
||||||
revpicheckclient.RevPiCheckClient.refreshvalues?4()
|
revpicheckclient.RevPiCheckClient.refreshvalues?4()
|
||||||
revpicheckclient.RevPiCheckClient.tmr_workvalues?4()
|
revpicheckclient.RevPiCheckClient.tmr_workvalues?4()
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||||
<!-- eric project file for project revpipycontrol -->
|
<!-- eric project file for project revpipycontrol -->
|
||||||
<!-- Saved: 2019-06-27, 14:10:32 -->
|
<!-- Saved: 2019-09-15, 22:15:53 -->
|
||||||
<!-- Copyright (C) 2019 Sven Sager, akira@narux.de -->
|
<!-- Copyright (C) 2019 Sven Sager, akira@narux.de -->
|
||||||
<Project version="5.1">
|
<Project version="5.1">
|
||||||
<Language>en_US</Language>
|
<Language>en_US</Language>
|
||||||
<Hash>66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275</Hash>
|
<Hash>66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275</Hash>
|
||||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||||
<ProjectType>Console</ProjectType>
|
<ProjectType>Console</ProjectType>
|
||||||
<Version>0.7.2</Version>
|
<Version>0.8.0</Version>
|
||||||
<Author>Sven Sager</Author>
|
<Author>Sven Sager</Author>
|
||||||
<Email>akira@narux.de</Email>
|
<Email>akira@narux.de</Email>
|
||||||
<Eol index="1"/>
|
<Eol index="1"/>
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
try:
|
try:
|
||||||
newvalue = io[5].get()
|
newvalue = io[5].get()
|
||||||
# Wertebereich prüfen
|
# Wertebereich prüfen
|
||||||
if newvalue < 0 or newvalue > self.maxint(io[1]):
|
if not self.minint(io) <= newvalue <= self.maxint(io):
|
||||||
raise ValueError("too big")
|
raise ValueError("too big")
|
||||||
|
|
||||||
self.__chval(device, io)
|
self.__chval(device, io)
|
||||||
@@ -168,7 +168,7 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
# IOs generieren
|
# IOs generieren
|
||||||
rowcount = 0
|
rowcount = 0
|
||||||
for io in lst_io:
|
for io in lst_io:
|
||||||
# io = [name,bytelen,byteaddr,bmk,bitaddress,(tkinter_var)]
|
# io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
|
||||||
|
|
||||||
tkinter.Label(s_frame, text=io[0]).grid(
|
tkinter.Label(s_frame, text=io[0]).grid(
|
||||||
column=1, row=rowcount, sticky="w"
|
column=1, row=rowcount, sticky="w"
|
||||||
@@ -185,7 +185,11 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
check.grid(column=0, row=rowcount)
|
check.grid(column=0, row=rowcount)
|
||||||
else:
|
else:
|
||||||
var = tkinter.IntVar()
|
var = tkinter.IntVar()
|
||||||
txt = tkinter.Spinbox(s_frame, to=self.maxint(io[1]))
|
txt = tkinter.Spinbox(
|
||||||
|
s_frame,
|
||||||
|
from_=self.minint(io),
|
||||||
|
to=self.maxint(io),
|
||||||
|
)
|
||||||
txt.bind(
|
txt.bind(
|
||||||
"<Key>",
|
"<Key>",
|
||||||
lambda event, tkvar=var: self.__saveoldvalue(event, tkvar)
|
lambda event, tkvar=var: self.__saveoldvalue(event, tkvar)
|
||||||
@@ -198,13 +202,13 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
txt["command"] = \
|
txt["command"] = \
|
||||||
lambda device=device, io=io: self.__chval(device, io)
|
lambda device=device, io=io: self.__chval(device, io)
|
||||||
txt["state"] = "disabled" if iotype == "inp" or \
|
txt["state"] = "disabled" if iotype == "inp" or \
|
||||||
self.maxint(io[1]) == 0 else "normal"
|
self.maxint(io) == 0 else "normal"
|
||||||
txt["width"] = 5
|
txt["width"] = 5
|
||||||
txt["textvariable"] = var
|
txt["textvariable"] = var
|
||||||
txt.grid(column=0, row=rowcount)
|
txt.grid(column=0, row=rowcount)
|
||||||
|
|
||||||
# Steuerelementvariable in IO übernehmen (mutabel)
|
# Steuerelementvariable in IO übernehmen (mutabel)
|
||||||
io.append(var)
|
io.insert(5, var)
|
||||||
|
|
||||||
rowcount += 1
|
rowcount += 1
|
||||||
|
|
||||||
@@ -345,7 +349,7 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
xmlmc = MultiCall(self.cli)
|
xmlmc = MultiCall(self.cli)
|
||||||
|
|
||||||
for dev in self.dict_devices:
|
for dev in self.dict_devices:
|
||||||
# io = [name,bytelen,byteaddr,bmk,bitaddress,(tkinter_var)]
|
# io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
|
||||||
|
|
||||||
# IO Typ verarbeiten
|
# IO Typ verarbeiten
|
||||||
for iotype in io_dicts:
|
for iotype in io_dicts:
|
||||||
@@ -358,7 +362,9 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
|
|
||||||
# Bytes umwandeln
|
# Bytes umwandeln
|
||||||
int_byte = int.from_bytes(
|
int_byte = int.from_bytes(
|
||||||
ba_values[io[2]:io[2] + io[1]], byteorder="little"
|
ba_values[io[2]:io[2] + io[1]],
|
||||||
|
byteorder="little" if len(io) < 7 else io[6],
|
||||||
|
signed=False if len(io) < 8 else io[7],
|
||||||
)
|
)
|
||||||
if io[4] >= 0:
|
if io[4] >= 0:
|
||||||
# Bit-IO
|
# Bit-IO
|
||||||
@@ -384,11 +390,35 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
for win in self.dict_wins:
|
for win in self.dict_wins:
|
||||||
self.dict_wins[win].withdraw()
|
self.dict_wins[win].withdraw()
|
||||||
|
|
||||||
def maxint(self, bytelen):
|
def maxint(self, io):
|
||||||
u"""Errechnet maximalen int() Wert für Bytes max 22.
|
u"""Errechnet maximalen int() Wert für Bytes max 22.
|
||||||
@param bytelen Anzahl Bytes
|
@param io IO-Liste, deren Wert berechnet werden soll
|
||||||
@return int() max oder 0 bei Überschreitung"""
|
@return int() max oder 0 bei Überschreitung"""
|
||||||
return 0 if bytelen > 22 else 256 ** bytelen - 1
|
# io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
|
||||||
|
bytelen = io[1]
|
||||||
|
if bytelen == 0:
|
||||||
|
return 0
|
||||||
|
signed = io[-1] if type(io[-1]) == bool else False
|
||||||
|
return 0 if bytelen > 22 else int.from_bytes(
|
||||||
|
(b'\x7f' if signed else b'\xff') + b'\xff' * (bytelen - 1),
|
||||||
|
byteorder="big"
|
||||||
|
)
|
||||||
|
|
||||||
|
def minint(self, io):
|
||||||
|
u"""Errechnet maximalen int() Wert für Bytes max 22.
|
||||||
|
@param io IO-Liste, deren Wert berechnet werden soll
|
||||||
|
@return int() max oder 0 bei Überschreitung"""
|
||||||
|
# io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
|
||||||
|
bytelen = io[1]
|
||||||
|
if bytelen == 0:
|
||||||
|
return 0
|
||||||
|
signed = io[-1] if type(io[-1]) == bool else False
|
||||||
|
rc = 0 if bytelen > 22 or not signed else int.from_bytes(
|
||||||
|
b'\x80' + b'\x00' * (bytelen - 1),
|
||||||
|
byteorder="big",
|
||||||
|
signed=True
|
||||||
|
)
|
||||||
|
return rc
|
||||||
|
|
||||||
def readvalues(self):
|
def readvalues(self):
|
||||||
u"""Ruft nur Input Werte von RevPi ab und aktualisiert Fenster."""
|
u"""Ruft nur Input Werte von RevPi ab und aktualisiert Fenster."""
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ u"""RevPiPyControl main program."""
|
|||||||
__author__ = "Sven Sager"
|
__author__ = "Sven Sager"
|
||||||
__copyright__ = "Copyright (C) 2018 Sven Sager"
|
__copyright__ = "Copyright (C) 2018 Sven Sager"
|
||||||
__license__ = "GPLv3"
|
__license__ = "GPLv3"
|
||||||
__version__ = "0.7.2"
|
__version__ = "0.8.0"
|
||||||
|
|
||||||
import revpicheckclient
|
import revpicheckclient
|
||||||
import revpidevelop
|
import revpidevelop
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -23,7 +23,7 @@ globsetup = {
|
|||||||
"author_email": "akira@narux.de",
|
"author_email": "akira@narux.de",
|
||||||
"url": "https://revpimodio.org/revpipyplc/",
|
"url": "https://revpimodio.org/revpipyplc/",
|
||||||
"license": "LGPLv3",
|
"license": "LGPLv3",
|
||||||
"version": "0.7.2",
|
"version": "0.8.0",
|
||||||
|
|
||||||
"name": "revpipycontrol",
|
"name": "revpipycontrol",
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user