…von Montagen und Platten
Danke der Bereitstellung von Material und einigen Restmaterialien aus dem privaten Fundus konnten wir heute damit beginnen die Montageplatte aufzubauen.
Nachdem wir bereits vergangene Woche einen kurzen Blick darauf warfen und mit einigen behelfsmäßigen Platzhalter-Komponenten ein grobes Bild entwarfen, konnten wir uns heute dem Aufbau etwas genauer widmen. Nebenbei wurde selbstverständlich nach bestem Wissen und Gewissen das Aufbauschema für den Schaltplan mit gezeichnet.

Zusätzlich gab es noch ein wenig Zeit nebenbei, um das Blockschaltbild zu beginnen. Neben den Montagearbeiten kam es auch zu einem Fortschritt im Python-Programm, sodass in naher Zukunft mit einem kleinen selbst geschriebenen Simulationsprogramm zumindest der Programmablauf auf dem RaspberryPi ohne Sensoren simuliert werden kann um zu schauen, welche Fehlerbilder sich hier ggf. noch ergeben, um hier ein ExceptionHandling mit einzubinden. Näheres dazu natürlich zu gegebener Zeit.
# -- check continously for actual state while state = 0
while ((StateCh0 == 0 and PlantCh0 == 0)
or (StateCh1 == 0 and PlantCh1 == 0)):
# ---- connect to S7 to check for actual status
PLC.connect(
'192.168.0.1', #IP
0, #rack
1 #slot
)
# ---- read DB10 (remantent) for information about Chambers
# DB10 includes in 2 structs information about actual state of
# chamber (auto, manual, stop) and number of actual plant
DB10_Data = plc.db_read(
10, #DB-No.
0, #byte to start
7) #bytes to read
# ---- snipping Bool-Byte into seperate information
StateCh0 = snap7.util.get_bool(DB10_Data, 0, 0) #ON / OFF
CmdCh0 = snap7.util.get_bool(DB10_Data, 0, 1) #AUTO / MAN
PlantCh0 = snap7.util.get_int(DB10_Data, 2, 2) #INT
StateCh1 = snap7.util.get_bool(DB10_Data, 4, 0)
CmdCh1 = snap7.util.get_bool(DB10_Data, 4, 1)
PlantCh1 = snap7.util.get_int(DB10_Data, 6, 0)
PLC.disconnect()
if ((StateCh0 == 1 and PlantCh0 > 0) or
(StateCh1 == 1 and PlantCh1 > 0)):
FbState = 1
else:
FbState = 0
time.sleep(1)
# -- evaluate sensor values continously while feedback of state = 1
while(FbState == 1):
# -- evaluation sensors chamber 1
if (StateCh0 == 1 and PlantCh0 > 0):
DataCh0 = SensorCh0()
Connect = mysql.connector.connect(**MariaDB_Login)
Cursor = Connect.cursor()
SQL = """
INSERT INTO data_trending (chamber, name, value)
VALUES (%s, %s, %s)
"""
for i in range (0, len(DataCh0)):
if (abs(DataCh0[i] - Ch0LastVal[i]) > CoV[i]):
Cursor.execute(SQL, ("Chamber 1", DB_ValueNames[i],
DataCh0[i]))
Ch0LastVal[i] = DataCh0[i]
Connect.commit() # commit sammelt die Daten und sendet sie gesammelt an die Datenbank (Unbedingt testen!)
Cursor.close()
Connect.close()
# -- evaluation sensors chamber 2
if (StateCh1 == 1 && PlantCh1 > 0):
#equvalent to chamber 1
# -- converting values into real-bytes for S7
# -- bytearrayname, byte to start, value to convert
snap7.util.set_real(tmp_TempCh0, 0, DataCh0[0])
snap7.util.set_real(tmp_HumCh0, 0, DataCh0[1])
snap7.util.set_real(tmp_MoistCh0, 0, DataCh0[2])
snap7.util.set_real(tmp_TempCh1, 0, DataCh1[0])
snap7.util.set_real(tmp_HumCh1, 0, DataCh1[1])
snap7.util.set_real(tmp_MoistCh1, 0, DataCh1[2])
# ---- connect to S7
PLC.connect(
'192.168.0.1', #IP
0, #rack
1 #slot
)
# -- writing into DBs
PLC.db_write(20, 0, tmp_TempCh0)
PLC.db_write(20, 4, tmp_HumCh0)
PLC.db_write(20, 8, tmp_MoistCh0)
PLC.db_write(21, 0, tmp_TempCh1)
PLC.db_write(21, 4, tmp_HumCh1)
PLC.db_write(21, 8, tmp_MoistCh1)
Weiterhin standen zum heutigen Tag noch einige Rücksprachen über das Lasten- / Pflichtenheft, sowie über die Webseite und ihrer Zugänglichkeit aus. Diesen kamen wir natürlich nach und versuchen nun im Nachgang noch die Verbesserungsvorschläge und Mangelpunkte abzuarbeiten.