You are on page 1of 5

Imports PLCcom Imports ACOMPORTLib Imports System.

Xml '*****RFID-Schnittstelle******************************************************** ******************* '* '* Public Class rfid_station 'eigenschaften : adresse (rs485) und wert (1 byte) 'methoden : lies_byte und schreib_byte Private rfid_controller As New ACOMPORTLib.ComPort 'referenz auf ein objekt aus der bibliothek Public adresse As Byte = 3 'Adresse des gewnschten Controllers am RS485-Bus Public wert As Byte 'gelesenes oder geschriebenes Byte Private a As Byte Private parity As Byte Public Sub lies_byte() rfid_controller.Device = "com1" 'Eigenschaften (Parameter) der Com-Sc hnittstelle setzen rfid_controller.BaudRate = 9600 rfid_controller.Parity = rfid_controller.asPARITY_EVEN rfid_controller.StopBits = rfid_controller.asSTOPBITS_1 rfid_controller.DataBits = rfid_controller.asDATABITS_8 rfid_controller.HardwareFlowControl = 2 rfid_controller.SoftwareFlowControl = 1 rfid_controller.RTSFlowControl = True rfid_controller.Open() rfid_controller.WriteByte(5) 'geschickte datenlnge 5 byte rfid_controller.WriteByte(adresse) 'rs485-adresse des controllers rfid_controller.WriteByte(80) 'befehl : groes P (read) rfid_controller.WriteByte(0) rfid_controller.WriteByte(3) 'adresse des ersten datenblocks i m tag parity = 5 Xor adresse Xor 80 Xor 3 'parity berechnen rfid_controller.WriteByte(parity) 'parity-byte schicken a = rfid_controller.ReadByte a = rfid_controller.ReadByte a = rfid_controller.ReadByte wert = rfid_controller.ReadByte 'info ab dem 4. byte rfid_controller.Close() End Sub End Class '******************************************************************************* ******************

'*****SPS-Schnittstelle********************************************************* ****************** '* '* Public Class sps_modul ' eigenschaften ip und auftrag schreiben, dann mit methode start_modul ' die sps "start_modul()"-handshake starten. modul wird connected, angesproc hen und disconnected. ' dann mit "lies_status()" den busy-status auslesen und im programm verarbei ten. ' in status steht dann der rckgabewert.

'eigenschaften (spter get/set) Public ip As String Public auftrag As Byte Public status As String Public fehler As String Public connect_status As String 'interne signale Private datenbaustein As Integer = 20 Private bytezeiger As Integer Private befehl As Byte Private bitwert As Boolean Private bytewert As Byte 'referenz auf die plccom-schnittstelle Private plc As New TCP_ISO_Device(ip, 0, 2, ePLCType.S7_300_400_compatibel) Private Sub read_bit() Dim rr(0) As ReadRequest rr(0) = New ReadRequest() rr(0).Region = eRegion.DataBlock rr(0).DB = datenbaustein rr(0).StartByte = bytezeiger rr(0).Len = 1 rr(0).Bit = befehl rr(0).isBit = True Dim fertig() As ReadResult = plc.read(rr) If fertig(0).HasWorked Then Dim readbuffer() As Boolean = fertig(0).Buffer bitwert = readbuffer(0) End If End Sub Private Sub write_bit() Dim rr As WriteRequest() = Array.CreateInstance(GetType(WriteRequest), 1 ) rr(0) = New WriteRequest() rr(0).Region = eRegion.DataBlock rr(0).DB = datenbaustein rr(0).StartByte = bytezeiger rr(0).Bit = befehl rr(0).addBit(bitwert) Dim fertig() As WriteResult = plc.write(rr) End Sub Private Sub write_byte() Dim rr As WriteRequest() = Array.CreateInstance(GetType(WriteRequest), 1 ) rr(0) = New WriteRequest() rr(0).Region = eRegion.DataBlock rr(0).DB = datenbaustein rr(0).StartByte = bytezeiger rr(0).addByte(bytewert) Dim fertig() As WriteResult = plc.write(rr) End Sub Private Sub connect_modul() authentication.Serial = "72415-21181-120480-2466835" authentication.User = "doll" plc.PLCType = ePLCType.S7_300_400_compatibel plc.IPAdress = ip

plc.Rack = 0 plc.Slot = 2 plc.Connecttimeout = 1000 plc.Readtimeout = 2000 Dim erg As ConnectResult = plc.Connect() If Not erg.HasConnected Then connect_status = "not_connected" fehler = "not_connected" status = "error" Else connect_status = "connected" End If End Sub Private Sub disconnect_modul() plc.DisConnect() End Sub 'methoden-------------------------------------------------------------------------Public Sub start_modul() connect_modul() 'verbindung aufbauen If connect_status = "connected" Then 'nur weiter, wenn kein ve rbindungsfehler bytewert = auftrag 'auftrag setzen bytezeiger = 1 'auftragsbyte whlen write_byte() 'auftrag schreiben befehl = 1 'ready lesen vorbereiten bytezeiger = 0 'handshake whlen read_bit() 'ready lesen If bitwert = True Then 'nur bei ready ok : handshake ! befehl = 0 'start vorbereiten bitwert = True write_bit() 'start schreiben Do befehl = 2 read_bit() 'acknowledge lesen bis es 1 wird Loop While (bitwert = False) befehl = 0 'db20.dbx0.0 bitwert = False write_bit() 'start rcksetzen End If End If disconnect_modul() End Sub Public Sub lies_status() connect_modul() befehl = 1 bytezeiger = 0 read_bit() If bitwert = False Then status = "error" fehler = "not_ready" Else status = "ok" befehl = 3 bytezeiger = 0 read_bit() If bitwert = True Then

'db20.dbx0.1 'lies ready 'ready = 0 -> "not_ready" -> ende 'ready = 1 -> "ok" 'falls ok : lies busy 'db20.dbx0.3

status = "running" ende Else status = "ok" bytezeiger = 2 befehl = 0 read_bit() If bitwert = True Then fehler = "failed" eitert status = "error" Else

'busy = 1 -> sps luft : "running" -> 'busy = 0 -> sps fertig 'falls fertig : lies fehlerbit 'lies fehlerbit db20.dbx2.0 'fehlerbit = 1 -> bestckung gesch

fehler = "ok" 'fehlerbit = 0 -> alles ok status = "ok" End If End If End If disconnect_modul() End Sub End Class '******************************************************************************* ****************** '*****ERP-Schnittstelle********************************************************* ****************** '* '* ' Attribute : ' ' serveradress : als dns ("erp2011:91") oder ip ("62.245.200.166:91") ' stubname : z.b "get_auftrag.php" ' parameter : z.b. "ID=2" ' pfad : pfad auf das element im xml-code, z.b. "/auftrag/teil1" ' data : wert kommt als string zurck ' 'NEU : als "teil" ist auch der wert "lager" zulssig, damit kann das auch gelesen werden ! ' das attribut fehler wird immer gelesen ' ' Methoden : ' ' read_teil liefert ein bauteil Public Class erp_connect Public serveradress As String = "erp2011:91" Public stubname As String = "get_auftrag.php" Public id As Byte Public teil As String Private pfad As String Public auftrag As Byte Public fehler As Byte Private daten As New XmlDocument Private urltext As String Public Sub lies_teil() urltext = "http://" & serveradress & "/" & stubname & "?id=" & id daten.Load(urltext)

pfad = "/auftrag/error" fehler = daten.DocumentElement.SelectSingleNode(pfad).InnerText If teil = "unten" Then pfad = "/auftrag/teil1" End If If teil = "mitte" Then pfad = "/auftrag/teil2" End If If teil = "oben" Then pfad = "/auftrag/teil3" End If If teil = "lager" Then pfad = "/auftrag/lager" End If auftrag = daten.DocumentElement.SelectSingleNode(pfad).InnerText End Sub End Class