[SOURCE]: siemens LOGO! IO status

SIMATIC S7-200/300/400, Step7, PCS7, CFC, SFC, PDM, PLCSIM,
SCL, Graph, SPS-VISU S5/S7, IBHsoftec, LOGO ...
lonzo
Posts: 46
Joined: Tue Oct 03, 2006 7:09 am
Location: Europe

[SOURCE]: siemens LOGO! IO status

Post by lonzo »

hello,
a german have a programm to watch the logo at 0ab4, http://www.ask-hille.de/cms2/startseite/index.php
In 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.
Source from file siemens_logo_io_status.py

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()