Re: Nur ein Bit ändern
Verfasst: Dienstag 24. Februar 2026, 17:11
Ok, hatte ich übersehen.
Danke euch allen.
Das wird.
Danke euch allen.
Das wird.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
def listing(self):
BIT_AKTIV = 1 << 7
BIT_WRITABLE = 1 << 6
BIT_PASSWORT = 1 << 4
BIT_PASSAktiv = 1 << 3
BIT_SPEICHER = 1 << 0
data = bytearray.fromhex("FF 4E")
data.append(ChecksumXor8.calc(data))
try:
serial_interface.reset_input_buffer()
serial_interface.reset_output_buffer()#flush output buffer, aborting current output
time.sleep(0.01) #give the serial port sometime to receive the data
serial_interface.write(data)
time.sleep(0.01)
response = serial_interface.read(7)
number_of_datafields=int.from_bytes(response[3:4],'big',signed=False)
except Exception as e1:
print ("error communicating...: " + str(e1))
self.datenfeld_info.config(state='normal')
self.datenfeld_info.delete('2.0','end')
i=0
for i in range(number_of_datafields):
data = bytearray([0xff, 0x4c, i])
data.append(ChecksumXor8.calc(data))
try:
serial_interface.reset_input_buffer()
serial_interface.reset_output_buffer()
time.sleep(0.010)
serial_interface.write(data)
time.sleep(0.01)
response = serial_interface.read(7)
if response[0] == 0x50 or ChecksumXor8.calc(response) != 0:
print(sick_error.srm_errors(hex(response[1])))
else:
datenfeld = response[3]
nummer = '\n' + str(i) + '\t'
enabled = "ja\t" if datenfeld & BIT_AKTIV else "nein\t"
writeable = "ja\t" if datenfeld & BIT_WRITABLE else "nein\t"
password = str(datenfeld & BIT_PASSWORT)+'\t'
password_active = "ja\t" if datenfeld & BIT_PASSAktiv else "nein\t"
speichergroese = str((1 + (datenfeld & BIT_SPEICHER)) * 16) + '\t'
data = nummer + enabled + writeable + password + password_active + speichergroese
self.datenfeld_info.insert('end',data)
except Exception as e1:
print ("error communicating...: " + str(e1))
Code: Alles auswählen
BIT_AKTIV = 1 << 7
BIT_WRITABLE = 1 << 6
BIT_PASSWORT = 1 << 4
BIT_PASSWORD_ACTIVE = 1 << 3
MEMORY_SIZE_MASK = 0b0000_0111
def communicate(serial_interface, request):
request_data = bytearray(request)
request_data.append(ChecksumXor8.calc(request_data))
serial_interface.reset_input_buffer()
serial_interface.reset_output_buffer()
time.sleep(0.01)
serial_interface.write(request_data)
time.sleep(0.01)
response = serial_interface.read(7)
if ChecksumXor8.calc(response) != 0:
raise ChecksumXor8.ChecksumError()
if response[0] == 0x50:
raise sick_error.SRMError(response[1])
return response
...
def listing(self, serial_interface):
datafield_count = int.from_bytes(
communicate(serial_interface, [0xFF, 0x4E])[3:4], "big"
)
self.datenfeld_info.config(state=tk.NORMAL)
self.datenfeld_info.delete("2.0", tk.END)
for index in range(datafield_count):
try:
value = communicate(serial_interface, [0xFF, 0x4C, index])[3]
except:
logging.exception("error communicating...")
else:
row = [
str(index),
"ja" if value & BIT_AKTIV else "nein",
"ja" if value & BIT_WRITABLE else "nein",
str(value & BIT_PASSWORT),
("ja" if value & BIT_PASSWORD_ACTIVE else "nein"),
str((1 + (value & MEMORY_SIZE_MASK)) * 16),
]
self.datenfeld_info.insert(tk.END, "\t".join(row) + "\n")