[ TAG 116 ][15.08.2021] -Erfolgreich -IAP-20210601-20210722-1145 -FSM-Methoden
Ich beginne die Worksession um [15.08.2021][2252]. Diese Woche habe ich die [ FLAG-STATE-Methoden ] fertig formuliert. Auf die Diskussion ob es sich um Methoden oder Funktion handelt, werde ich jetzt nicht eingehen. Jedoch werde ich die [ FSM ] als Methoden bezeichnen.
Kurz zu [FSM]. Die [ FSM ]-Methoden werden für Statusmeldungen genutzt. Zu diesen Zeitpunkt wird nur ein Byte für die [STATE]s und [SUBROUTINEN] benötigt.
Die [ FSM ]-Methoden sind so designt, dass man Ihnen eine Referenz des SHARED-MEMORY-Objektes von Python als Attribut [SHM_ALOG] übergibt. Das [SHM_ALOG]-Attribut beinhaltet eine Referenz auf das SHARED-MEMORY-Object, wo die binären Daten des ALOG-Moduls kodiert gespeichert werden.
[SMABF] - SHARED-MEMORY-ALOG-BINARY-FORMAT ist das Binäre Format, in dem die Daten wie Status-Meldungen [ALOG-STATE]s und [SUBROUTINE-STATE]s geführt werden.
- GLOBALS_20210720_1330.py
- [FSM] - [ALOG-STATE] kurz [FSM-AS]
- FLAG_STATE_NONE( SHM_ALOG, set_ )
- FLAG_STATE_0( SHM_ALOG, set_ )
- FLAG_STATE_1( SHM_ALOG, set_ )
- FLAG_STATE_2( SHM_ALOG, set_ )
- FLAG_STATE_3( SHM_ALOG, set_ )
- FLAG_STATE_4( SHM_ALOG, set_ )
- FLAG_STATE_5( SHM_ALOG, set_ )
- [FSM] - [SUBROUTINE-STATE] kurz [FSM-SS]
- FLAG_SUB_ALOG( SHM_ALOG, set_ )
- FLAG_SUB_END( SHM_ALOG, set_ )
- FLAG_SUB_ZERO( SHM_ALOG, set_ )
- FLAG_SUB_REC( SHM_ALOG, set_ )
- FLAG_SUB_MP3CONV( SHM_ALOG, set_ )
SHM_ALOG_OBJ = None
SHM_ALOG_ID = 0b10000000
SHM_ALOG_SIZE_1 = 6
SHM_ALOG_SIZE_2 = 8
STATE_CHUNK_ID = 0b10000001
STATE_CHUNK_SIZE = 1
STATE_INDX = 4
STATE_BYTE = 0b00000000
SUBROUTINE_CHUNK_ID = 0b10000010
SUBROUTINE_CHUNK_SIZE = 1
SUBROUTINE_INDX = 7
SUBROUTINE_BYTE = 0b00000001
# ---------------------------------------------------------------------------------------------------------------------
def SHM_ALOG_CREATE():
global SHM_ALOG_ID
global SHM_ALOG_SIZE_1
global SHM_ALOG_SIZE_2
global STATE_CHUNK_ID
global STATE_CHUNK_SIZE
global STATE_BYTE
global SUBROUTINE_CHUNK_ID
global SUBROUTINE_CHUNK_SIZE
global SUBROUTINE_BYTE
SHM_ALOG = shared_memory.SharedMemory(create=True, size=SHM_ALOG_SIZE_2)
b = bytes([SHM_ALOG_ID,
SHM_ALOG_SIZE_1,
STATE_CHUNK_ID,
STATE_CHUNK_SIZE,
STATE_BYTE,
SUBROUTINE_CHUNK_ID,
SUBROUTINE_CHUNK_SIZE,
SUBROUTINE_BYTE])
SHM_ALOG.buf[0] = b[0]
SHM_ALOG.buf[1] = b[1]
SHM_ALOG.buf[2] = b[2]
SHM_ALOG.buf[3] = b[3]
SHM_ALOG.buf[4] = b[4]
SHM_ALOG.buf[5] = b[5]
SHM_ALOG.buf[6] = b[6]
SHM_ALOG.buf[7] = b[7]
return SHM_ALOG
def SHM_ALOG_DESTROY(SHM_ALOG):
SHM_ALOG.close()
SHM_ALOG.unlink()
Bei der Initialisierung der BYTES ist es wichtig zu prüfen, ob Python intern die Werte, die in den Variablen gespeichert sind kopiert oder als Referenz übergibt.
Ich kann heute mit Sicherheit sagen, dass die Bytewerte, die in den Variablen für Initialisierungszwecke gedacht sind als Kopien in das Shared-Memory abgelegt werden.
Wenn ich an den Globalen Variablen etwas ändere, dann hat es keine Auswirkungen auf die Werte im Shared-Memory. Das klingt auf der einen Seite selbstverständlich. Jedoch ist es eine sehr wichtige fundamentale Eigenschaft, die unbedingt getestet werden musste um mit Sicherheit zu sagen, dass es sich hier um eigenständige Werte in den Speicherzellen handelt. Diese werden auch von Python genau so und nicht als Referenzen behandelt. Diese Gewissheit ist sehr wichtig und Grundlegend für zukünftige Arbeiten.
Kommentare
Kommentar veröffentlichen