Hallo
ich habe es mit folgendem Skrip hin bekommen eine Virtual Input BIN in die SPS zu Schreiben und einen BIT aus der SPS zum Türöffnen in einen Virtual Output zu übergeben.
Mein skript muss extra gestartet werden damit es Funktioniert.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from time import sleep
import snap7
from snap7.util import*
import struct
import string
# Datenpfat virtual Keyboard
Dateipfad_imput1 = '/var/DoorPI/keyboard/inputs/e1'
Dateipfad_output1 = '/var/DoorPI/keyboard/outputs/a1'
# IP Adresse SPS
ip='192.168.178.30'
rack = 0
slot = 2
# Adresse bit lesen aus SPS
S7_DRead = [390,2,0]
# Adresse bit schreiben in SPS
S7_DWrite = [390,0,4]
def DRead(db_nr, byte_nr, bit_nr): #Lesen aus SPS
try:
plc = snap7.client.Client()
#print "Verbindungsaufbau"
plc.connect(ip,rack,slot)
#print "Lese Byte aus der SPS"
byte = plc.db_read(db_nr,byte_nr,1)
value = get_bool(byte,0,bit_nr)
#print "DRead", value
plc.disconnect()
con = plc.get_connected()
#print "disconnect", con
return value
except Exception as ex:
print ("Fehlerm beim lesen aus SPS",ex)
def DWrite(db_nr, byte_nr, bit_nr,value): #Schreiben in SPS
try:
plc = snap7.client.Client()
#print "Verbindungsaufbau"
plc.connect(ip,rack,slot)
#print "Ausertung on value True oder Flase"
if 'True' in value:
BOOL = True
else:
BOOL = False
#print "DWrite",value
#Variable deklariren
byte = bytearray(1)
#Lese Byte aus der SPS
byte = plc.db_read(db_nr,byte_nr,1)
#Setze Bit in Value
set_bool(byte,0,bit_nr,BOOL,)
#Schreibe Daten in SPS
plc.db_write(db_nr,byte_nr,byte)
plc.disconnect()
con = plc.get_connected()
#print "disconnected",(con)
except Exception as ex:
print ("Fehlerm beim schreiben in SPS",ex)
def Write_V_Keyboard (value):
try:
#print "Schreibe in Virtual_Keyboard"
f = open (Dateipfad_imput1 ,"w")
v =str(value)
f.write(v)
f.close()
except Exception as ex:
print ("Fehlerm beim schreiben in Virtual Keyboard",ex)
def Read_V_Keyboard():
try:
#print "Value aus Doorpi Virtual Keyboard lesen"
f = open (Dateipfad_output1,"r")
v = f.readline()
f.close()
return v
except Exception as ex:
print ("Fehlerm beim lesen aus Virtual Keyboard",ex)
#Hauptprogramm
while True:
Value1 = DRead(S7_DRead[0],S7_DRead[1],S7_DRead[2])
Write_V_Keyboard(Value1)
Value2 = Read_V_Keyboard()
sleep(0.1)
DWrite(S7_DWrite[0],S7_DWrite[1],S7_DWrite[2],Value2)
sleep(0.1)
Alles anzeigen
Am liebsten würde ich das ganze in doorpi mit einbinden, hierzu habe ich mir in Singel Aktion das out.py angeschaut, jedoch verstehe ich einiges noch nicht.
Im "def get" werden wohl die Parameter aus der config eingelesen, das wäre dann bei mir die Adressen S7_Write und S7_Read und die Vatiable True oder False + Zeit
Dann werden die Parameter mit "return" ausgegeben an OutAction was passiert da genau ?
Weiterhn müsste der Teil meines Programmes der den SPS BIT liest immer ausfegührt werden, so wie die Überwachung der Gipo s Bin's ? Wie und wo wird das ausgefürt ?
Weiterhin möchte ich den Pfad der Virtual Keyboard aus der doorpi.ini Lesen ?
Es wäre super wenn mir jemand die genaue Funktion des out.py erklären könnte
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger(__name__)
logger.debug("%s loaded", __name__)
from doorpi.action.base import SingleAction
import doorpi
from doorpi.action.SingleActions.out_triggered import get as fallback_out_triggered
def get(parameters):
parameter_list = parameters.split(',')
if len(parameter_list) > 3: return fallback_out_triggered(parameters)
pin = parameter_list[0]
value = parameter_list[1]
if len(parameter_list) is 2:
log_output = True
else:
log_output = parameter_list[2]
return OutAction(doorpi.DoorPi().keyboard.set_output, pin = pin, value = value, log_output = log_output)
class OutAction(SingleAction):
pass
Alles anzeigen