a german have a programm to watch the logo at 0ab4, http://www.ask-hille.de/cms2/startseite/index.php
Source from file siemens_logo_io_status.pyIn meinem Downloadbereich habe ich eine Vorabversion eines Datenlogger mit der Siemens LOGO gestellt.
Das Programm ermöglicht die Statusausgabe aller Ein- und Ausgänge, Merker, Schieberegisterbits, Analogeingänge, Analogausgänge und Analogmerker.
Die Ausgabe erfolgt auf der Python Konsole.
Die Grafische Oberfläche zum Programm befindet sich in Arbeit.
Das Programm habe ich unter Windows und Linux getestet.
Es wird das Modul pyserial benötigt.
Code: Select all
#!/usr/bin/env python
import serial
import string
from time import *
#def Logo_Zeit():
def Logo_Start():
ser = serial.Serial(0, 9600, timeout=1, parity=serial.PARITY_EVEN)
ser.write('\x55\x17\x17\xAA') #Logo Status
status = ser.read(20)
print status
ser.write('\x55\x18\x18\xAA') #Logo START
status = ser.read(2)
ser.write('\x55\x17\x17\xAA') #Logo Status
status = ser.read(20)
print status
ser.close()
def Logo_Stop():
ser = serial.Serial(0, 9600, timeout=1, parity=serial.PARITY_EVEN)
ser.write('\x55\x17\x17\xAA') #Logo Status
status = ser.read(2)
ser.write('\x55\x12\x12\xAA') #Logo STOP
status = ser.read(2)
ser.close()
def Logo_iostatus():
ser = serial.Serial(0, 9600, timeout=1, parity=serial.PARITY_EVEN)
ser.write('\x02\x1F\x02') #Logo Init
status = ser.read(5)
ser.write('\x55\x17\x17\xAA') #Logo in Run oder Stop??
status = ser.read(2)
ser.write('\x55\x13\x13\x00\xAA') #Logo IO Status holen
byte = ser.read(1)
antw = ord(byte)
daten = [] # Leere Liste erstellen
# wenn Logo O.K. sendet
if (antw == 6):
for i1 in range(1,71):
daten.append( ord(ser.read(1)) )
Byte = daten[:]
Byte.append(0)
Byte[1] = daten[0]
Byte[2] = daten[1]
Byte[3] = daten[2]
Byte[4] = daten[3]
Byte[5] = daten[4]
Byte[6] = daten[5]
Byte[7] = daten[6]
Byte[8] = daten[7]
Byte[9] = daten[8]
Byte[10] = daten[9]
Byte[11] = daten[10]
Byte[12] = daten[11]
Byte[13] = daten[12]
Byte[14] = daten[13]
Byte[15] = daten[14]
Byte[16] = daten[15]
Byte[17] = daten[16]
Byte[18] = daten[17]
Byte[19] = daten[18]
Byte[20] = daten[19]
Byte[21] = daten[20]
Byte[22] = daten[21]
Byte[23] = daten[22]
Byte[24] = daten[23]
Byte[25] = daten[24]
Byte[26] = daten[25]
Byte[27] = daten[26]
Byte[28] = daten[27] # Digitaleingдnge 1 - 8 00-FF
Byte[29] = daten[28] # Digitaleingдnge 9 - 16 00-FF
Byte[30] = daten[29] # Digitaleingдnge 17 - 24 00-FF
Byte[31] = daten[30] # Digitalausgдnge 1 - 8
Byte[32] = daten[31] # Digitalausgдnge 9 - 16
Byte[33] = daten[32] # Merker 1 - 8
Byte[34] = daten[33] # Merker 9 - 16
Byte[35] = daten[34] # Merker 17 - 24
Byte[36] = daten[35] # Schieberegisterbits 1 - 8
Byte[37] = daten[36] # Cursertasten C1 - C4 00 - 04
Byte[38] = daten[37] # Analogeingang 1 - Low Byte
Byte[39] = daten[38] # Analogeingang 1 - High Byte
Byte[40] = daten[39] # Analogeingang 2 - Low Byte
Byte[41] = daten[40] # Analogeingang 2 - High Byte
Byte[42] = daten[41] # Analogeingang 3 - Low Byte
Byte[43] = daten[42] # Analogeingang 3 - High Byte
Byte[44] = daten[43] # Analogeingang 4 - Low Byte
Byte[45] = daten[44] # Analogeingang 4 - High Byte
Byte[46] = daten[45] # Analogeingang 5 - Low Byte
Byte[47] = daten[46] # Analogeingang 5 - High Byte
Byte[48] = daten[47] # Analogeingang 6 - Low Byte
Byte[49] = daten[48] # Analogeingang 6 - High Byte
Byte[50] = daten[49] # Analogeingang 7 - Low Byte
Byte[51] = daten[50] # Analogeingang 7 - High Byte
Byte[52] = daten[51] # Analogeingang 8 - Low Byte
Byte[53] = daten[52] # Analogeingang 8 - High Byte
Byte[54] = daten[53] # Analogausgang 1 - Low Byte
Byte[55] = daten[54] # Analogausgang 1 - High Byte
Byte[56] = daten[55] # Analogausgang 2 - Low Byte
Byte[57] = daten[56] # Analogausgang 2 - High Byte
Byte[58] = daten[57] # Analogmerker 1 - Low Byte
Byte[59] = daten[58] # Analogmerker 1 - High Byte
Byte[60] = daten[59] # Analogmerker 2 - Low Byte
Byte[61] = daten[60] # Analogmerker 2 - High Byte
Byte[62] = daten[61] # Analogmerker 3 - Low Byte
Byte[63] = daten[62] # Analogmerker 3 - High Byte
Byte[64] = daten[63] # Analogmerker 4 - Low Byte
Byte[65] = daten[64] # Analogmerker 4 - High Byte
Byte[66] = daten[65] # Analogmerker 5 - Low Byte
Byte[67] = daten[66] # Analogmerker 5 - High Byte
Byte[68] = daten[67] # Analogmerker 6 - Low Byte
Byte[69] = daten[68] # Analogmerker 6 - High Byte
Byte[70] = daten[69] # AA Ende
ser.close()
###########################################################################
# ------------------------------------------
# - Zuordnung Eingдnge 1 - 8 --> di1 - di8 -
# ------------------------------------------
if ( Byte[28] & 1 ) > 0: # Eingang 1
di1 = 1
else:
di1 = 0
if ( Byte[28] & 2 ) > 0: # Eingang 2
di2 = 1
else:
di2 = 0
if ( Byte[28] & 4 ) > 0: # Eingang 3
di3 = 1
else:
di3 = 0
if ( Byte[28] & 8 ) > 0: # Eingang 4
di4 = 1
else:
di4 = 0
if ( Byte[28] & 16 ) > 0: # Eingang 5
di5 = 1
else:
di5 = 0
if ( Byte[28] & 32 ) > 0: # Eingang 6
di6 = 1
else:
di6 = 0
if ( Byte[28] & 64 ) > 0: # Eingang 7
di7 = 1
else:
di7 = 0
if ( Byte[28] & 128 ) > 0: # Eingang 8
di8 = 1
else:
di8 = 0
# --------------------------------------------
# - Zuordnung Eingдnge 9 - 16 --> di9 - di16 -
# --------------------------------------------
if ( Byte[29] & 1 ) > 0: # Eingang 9
di9 = 1
else:
di9 = 0
if ( Byte[29] & 2 ) > 0: # Eingang 10
di10 = 1
else:
di10 = 0
if ( Byte[29] & 4 ) > 0: # Eingang 11
di11 = 1
else:
di11 = 0
if ( Byte[29] & 8 ) > 0: # Eingang 12
di12 = 1
else:
di12 = 0
if ( Byte[29] & 16 ) > 0: # Eingang 13
di13 = 1
else:
di13 = 0
if ( Byte[29] & 32 ) > 0: # Eingang 14
di14 = 1
else:
di14 = 0
if ( Byte[29] & 64 ) > 0: # Eingang 15
di15 = 1
else:
di15 = 0
if ( Byte[29] & 128 ) > 0: # Eingang 16
di16 = 1
else:
di16 = 0
# ----------------------------------------------
# - Zuordnung Eingдnge 17 - 24 --> di17 - di24 -
# ----------------------------------------------
if ( Byte[30] & 1 ) > 0: # Eingang 17
di17 = 1
else:
di17 = 0
if ( Byte[30] & 2 ) > 0: # Eingang 18
di18 = 1
else:
di18 = 0
if ( Byte[30] & 4 ) > 0: # Eingang 19
di19 = 1
else:
di19 = 0
if ( Byte[30] & 8 ) > 0: # Eingang 20
di20 = 1
else:
di20 = 0
if ( Byte[30] & 16 ) > 0: # Eingang 21
di21 = 1
else:
di21 = 0
if ( Byte[30] & 32 ) > 0: # Eingang 22
di22 = 1
else:
di22 = 0
if ( Byte[30] & 64 ) > 0: # Eingang 23
di23 = 1
else:
di23 = 0
if ( Byte[30] & 128 ) > 0: # Eingang 24
di24 = 1
else:
di24 = 0
###########################################################################
# ------------------------------------------
# - Zuordnung Ausgдnge 1 - 8 --> da1 - da8 -
# ------------------------------------------
if ( Byte[31] & 1 ) > 0: # Ausgang 1
da1 = 1
else:
da1 = 0
if ( Byte[31] & 2 ) > 0: # Ausgang 2
da2 = 1
else:
da2 = 0
if ( Byte[31] & 4 ) > 0: # Ausgang 3
da3 = 1
else:
da3 = 0
if ( Byte[31] & 8 ) > 0: # Ausgang 4
da4 = 1
else:
da4 = 0
if ( Byte[31] & 16 ) > 0: # Ausgang 5
da5 = 1
else:
da5 = 0
if ( Byte[31] & 32 ) > 0: # Ausgang 6
da6 = 1
else:
da6 = 0
if ( Byte[31] & 64 ) > 0: # Ausgang 7
da7 = 1
else:
da7 = 0
if ( Byte[31] & 128 ) > 0: # Ausgang 8
da8 = 1
else:
da8 = 0
# --------------------------------------------
# - Zuordnung Ausgдnge 9 - 16 --> da9 - da16 -
# --------------------------------------------
if ( Byte[32] & 1 ) > 0: # Ausgang 9
da9 = 1
else:
da9 = 0
if ( Byte[32] & 2 ) > 0: # Ausgang 10
da10 = 1
else:
da10 = 0
if ( Byte[32] & 4 ) > 0: # Ausgang 11
da11 = 1
else:
da11 = 0
if ( Byte[32] & 8 ) > 0: # Ausgang 12
da12 = 1
else:
da12 = 0
if ( Byte[32] & 16 ) > 0: # Ausgang 13
da13 = 1
else:
da13 = 0
if ( Byte[32] & 32 ) > 0: # Ausgang 14
da14 = 1
else:
da14 = 0
if ( Byte[32] & 64 ) > 0: # Ausgang 15
da15 = 1
else:
da15 = 0
if ( Byte[32] & 128 ) > 0: # Ausgang 16
da16 = 1
else:
da16 = 0
###########################################################################
# --------------------------------------
# - Zuordnung Merker 1 - 8 --> m1 - m8 -
# --------------------------------------
if ( Byte[33] & 1 ) > 0: # Merker 1
m1 = 1
else:
m1 = 0
if ( Byte[33] & 2 ) > 0: # Merker 2
m2 = 1
else:
m2 = 0
if ( Byte[33] & 4 ) > 0: # Merker 3
m3 = 1
else:
m3 = 0
if ( Byte[33] & 8 ) > 0: # Merker 4
m4 = 1
else:
m4 = 0
if ( Byte[33] & 16 ) > 0: # Merker 5
m5 = 1
else:
m5 = 0
if ( Byte[33] & 32 ) > 0: # Merker 6
m6 = 1
else:
m6 = 0
if ( Byte[33] & 64 ) > 0: # Merker 7
m7 = 1
else:
m7 = 0
if ( Byte[33] & 128 ) > 0: # Merker 8
m8 = 1
else:
m8 = 0
# ----------------------------------------
# - Zuordnung Merker 9 - 16 --> m9 - m16 -
# ----------------------------------------
if ( Byte[34] & 1 ) > 0: # Merker 9
m9 = 1
else:
m9 = 0
if ( Byte[34] & 2 ) > 0: # Merker 10
m10 = 1
else:
m10 = 0
if ( Byte[34] & 4 ) > 0: # Merker 11
m11 = 1
else:
m11 = 0
if ( Byte[34] & 8 ) > 0: # Merker 12
m12 = 1
else:
m12 = 0
if ( Byte[34] & 16 ) > 0: # Merker 13
m13 = 1
else:
m13 = 0
if ( Byte[34] & 32 ) > 0: # Merker 14
m14 = 1
else:
m14 = 0
if ( Byte[34] & 64 ) > 0: # Merker 15
m15 = 1
else:
m15 = 0
if ( Byte[34] & 128 ) > 0: # Merker 16
m16 = 1
else:
m16 = 0
# ------------------------------------------
# - Zuordnung Merker 17 - 24 --> m17 - m24 -
# ------------------------------------------
if ( Byte[35] & 1 ) > 0: # Merker 17
m17 = 1
else:
m17 = 0
if ( Byte[35] & 2 ) > 0: # Merker 18
m18 = 1
else:
m18 = 0
if ( Byte[35] & 4 ) > 0: # Merker 19
m19 = 1
else:
m19 = 0
if ( Byte[35] & 8 ) > 0: # Merker 20
m20 = 1
else:
m20 = 0
if ( Byte[35] & 16 ) > 0: # Merker 21
m21 = 1
else:
m21 = 0
if ( Byte[35] & 32 ) > 0: # Merker 22
m22 = 1
else:
m22 = 0
if ( Byte[35] & 64 ) > 0: # Merker 23
m23 = 1
else:
m23 = 0
if ( Byte[35] & 128 ) > 0: # Merker 24
m24 = 1
else:
m24 = 0
###########################################################################
# ---------------------------------------------------
# - Zuordnung Schieberegisterbits 1 - 8 --> s1 - s8 -
# ---------------------------------------------------
if ( Byte[36] & 1 ) > 0: # S-Bit 1
s1 = 1
else:
s1 = 0
if ( Byte[36] & 2 ) > 0: # S-Bit 2
s2 = 1
else:
s2 = 0
if ( Byte[36] & 4 ) > 0: # S-Bit 3
s3 = 1
else:
s3 = 0
if ( Byte[36] & 8 ) > 0: # S-Bit 4
s4 = 1
else:
s4 = 0
if ( Byte[36] & 16 ) > 0: # S-Bit 5
s5 = 1
else:
s5 = 0
if ( Byte[36] & 32 ) > 0: # S-Bit 6
s6 = 1
else:
s6 = 0
if ( Byte[36] & 64 ) > 0: # S-Bit 7
s7 = 1
else:
s7 = 0
if ( Byte[36] & 128 ) > 0: # S-Bit 8
s8 = 1
else:
s8 = 0
###########################################################################
# ------------------------------------------------
# - Zuordnung Analogeingдnge 1 - 8 --> ai1 - ai8 -
# ------------------------------------------------
ai1 = ( ( Byte[39] * 256 ) + Byte[38] )
ai2 = ( ( Byte[41] * 256 ) + Byte[40] )
ai3 = ( ( Byte[43] * 256 ) + Byte[42] )
ai4 = ( ( Byte[45] * 256 ) + Byte[44] )
ai5 = ( ( Byte[47] * 256 ) + Byte[46] )
ai6 = ( ( Byte[49] * 256 ) + Byte[48] )
ai7 = ( ( Byte[51] * 256 ) + Byte[50] )
ai8 = ( ( Byte[53] * 256 ) + Byte[52] )
###########################################################################
# ------------------------------------------------
# - Zuordnung Analogausgдnge 1 - 2 --> ao1 - ao2 -
# ------------------------------------------------
ao1 = ( ( Byte[55] * 256 ) + Byte[54] )
ao2 = ( ( Byte[57] * 256 ) + Byte[56] )
###########################################################################
# ----------------------------------------------
# - Zuordnung Analogmerker 1 - 6 --> am1 - am6 -
# ----------------------------------------------
am1 = ( ( Byte[59] * 256 ) + Byte[58] )
am2 = ( ( Byte[61] * 256 ) + Byte[60] )
am3 = ( ( Byte[63] * 256 ) + Byte[62] )
am4 = ( ( Byte[65] * 256 ) + Byte[64] )
am5 = ( ( Byte[67] * 256 ) + Byte[66] )
am6 = ( ( Byte[69] * 256 ) + Byte[68] )
##############
## - Tests - #
##############
print "Eingдnge 1 - 24"
print di1,di2,di3,di4,di5,di6,di7,di8
print di9,di10,di11,di12,di13,di14,di15,di16
print di17,di18,di19,di20,di21,di22,di23,di24
print "Ausgдnge 1 - 16"
print da1,da2,da3,da4,da5,da6,da7,da8
print da9,da10,da11,da12,da13,da14,da15,da16
print "Merker 1 - 24"
print m1,m2,m3,m4,m5,m6,m7,m8
print m9,m10,m11,m12,m13,m14,m15,m16
print m17,m18,m19,m20,m21,m22,m23,m24
print "Schieberegisterbits 1 - 8"
print s1,s2,s3,s4,s5,s6,s7,s8
print "Analogeingдnge 1 - 8"
print ai1,ai2,ai3,ai4,ai5,ai6,ai7,ai8
print "Analogausgдnge 1 - 2"
print ao1,ao2
print "Analogmerker 1 - 6"
print am1,am2,am3,am4,am5,am6
# zum Testen !!
#for i2 in range(71): # nur zum Testen !!!
#print i2,Byte[i2] # nur zum Testen !!!
########################
# GUI
########################
from Tkinter import *
Fenster=Tk()
button_start = Button(Fenster, text='LOGO Run', command=Logo_Start)
button_stop = Button(Fenster, text='LOGO Stop',command=Logo_Stop)
button_iostat = Button(Fenster, text='LOGO IO Status', command=Logo_iostatus)
button_start.grid (row=0, column=0)
button_stop.grid (row=0, column=1)
button_iostat.grid (row=0, column=2)
mainloop()