1
0
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:
2019-09-15 22:17:06 +02:00
parent 79ea020903
commit 472605bb38
7 changed files with 70 additions and 18 deletions

View File

@@ -3,3 +3,5 @@ include stdeb.cfg
recursive-include data *
recursive-include revpipycontrol *
global-exclude *.pyc
include LICENSE.txt

View File

@@ -87,6 +87,9 @@ Methods</h3>
<td><a style="color:#0000FF" href="#RevPiCheckClient.maxint">maxint</a></td>
<td>Errechnet maximalen int() Wert f&#252;r Bytes max 22.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiCheckClient.minint">minint</a></td>
<td>Errechnet maximalen int() Wert f&#252;r Bytes max 22.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiCheckClient.readvalues">readvalues</a></td>
<td>Ruft nur Input Werte von RevPi ab und aktualisiert Fenster.</td>
</tr><tr>
@@ -244,13 +247,29 @@ Versteckt alle Fenster.
</p><a NAME="RevPiCheckClient.maxint" ID="RevPiCheckClient.maxint"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiCheckClient.maxint</h3>
<b>maxint</b>(<i>bytelen</i>)
<b>maxint</b>(<i>io</i>)
<p>
Errechnet maximalen int() Wert f&#252;r Bytes max 22.
</p><dl>
<dt><i>bytelen</i></dt>
<dt><i>io</i></dt>
<dd>
Anzahl Bytes
IO-Liste, deren Wert berechnet werden soll
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
int() max oder 0 bei &#220;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&#252;r Bytes max 22.
</p><dl>
<dt><i>io</i></dt>
<dd>
IO-Liste, deren Wert berechnet werden soll
</dd>
</dl><dl>
<dt>Returns:</dt>

View File

@@ -53,7 +53,8 @@ revpicheckclient.RevPiCheckClient._onfrmconf?5(canvas)
revpicheckclient.RevPiCheckClient._warnwrite?5()
revpicheckclient.RevPiCheckClient._workvalues?5(io_dicts=None, writeout=False)
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.refreshvalues?4()
revpicheckclient.RevPiCheckClient.tmr_workvalues?4()

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- 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 -->
<Project version="5.1">
<Language>en_US</Language>
<Hash>66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275</Hash>
<ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>Console</ProjectType>
<Version>0.7.2</Version>
<Version>0.8.0</Version>
<Author>Sven Sager</Author>
<Email>akira@narux.de</Email>
<Eol index="1"/>

View File

@@ -101,7 +101,7 @@ class RevPiCheckClient(tkinter.Frame):
try:
newvalue = io[5].get()
# 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")
self.__chval(device, io)
@@ -168,7 +168,7 @@ class RevPiCheckClient(tkinter.Frame):
# IOs generieren
rowcount = 0
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(
column=1, row=rowcount, sticky="w"
@@ -185,7 +185,11 @@ class RevPiCheckClient(tkinter.Frame):
check.grid(column=0, row=rowcount)
else:
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(
"<Key>",
lambda event, tkvar=var: self.__saveoldvalue(event, tkvar)
@@ -198,13 +202,13 @@ class RevPiCheckClient(tkinter.Frame):
txt["command"] = \
lambda device=device, io=io: self.__chval(device, io)
txt["state"] = "disabled" if iotype == "inp" or \
self.maxint(io[1]) == 0 else "normal"
self.maxint(io) == 0 else "normal"
txt["width"] = 5
txt["textvariable"] = var
txt.grid(column=0, row=rowcount)
# Steuerelementvariable in IO übernehmen (mutabel)
io.append(var)
io.insert(5, var)
rowcount += 1
@@ -345,7 +349,7 @@ class RevPiCheckClient(tkinter.Frame):
xmlmc = MultiCall(self.cli)
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
for iotype in io_dicts:
@@ -358,7 +362,9 @@ class RevPiCheckClient(tkinter.Frame):
# Bytes umwandeln
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:
# Bit-IO
@@ -384,11 +390,35 @@ class RevPiCheckClient(tkinter.Frame):
for win in self.dict_wins:
self.dict_wins[win].withdraw()
def maxint(self, bytelen):
def maxint(self, io):
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 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):
u"""Ruft nur Input Werte von RevPi ab und aktualisiert Fenster."""

View File

@@ -5,7 +5,7 @@ u"""RevPiPyControl main program."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
__version__ = "0.7.2"
__version__ = "0.8.0"
import revpicheckclient
import revpidevelop

View File

@@ -23,7 +23,7 @@ globsetup = {
"author_email": "akira@narux.de",
"url": "https://revpimodio.org/revpipyplc/",
"license": "LGPLv3",
"version": "0.7.2",
"version": "0.8.0",
"name": "revpipycontrol",