Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Messwerte aus Excel Tabelle in S7-300 einlesen

  1. #1
    Registriert seit
    31.10.2012
    Beiträge
    47
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hey,
    ich wuerde gerne Messwerte aus einer Exceltabelle einlesen und ueber meine S7-300 an meinen Antrieb uebermitteln. Hab von der software libnodave gelesen, allerdings blicke ich da noch nicht so wirklich durch. Gibt es da Einstiegsinformationen, um mein Problem loesen zu koennen?
    Zitieren Zitieren Messwerte aus Excel Tabelle in S7-300 einlesen  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.514
    Danke
    934
    Erhielt 3.385 Danke für 2.738 Beiträge

    Standard

    Nicht die SPS liest aus der Excel-Tabelle, sondern die Excel-Tabelle schreibt in die SPS.

    Schau Dir mal diesen FAQ zu LibNoDave + Excel an.
    In dem Excel-Beispiel wird zwar nur aus der SPS gelesen - das Schreiben in die SPS ist aber einfach zu realisieren.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    yone (23.10.2013)

  4. #3
    yone ist offline Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    47
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Super, danke!
    Mit VB hab ich zwar schonmal programmiert, aber das ist etwas her. Aus dem Programmcode werd ich zwar noch nicht so ganz schlau, aber wird mir bestimmt bald weiterhelfen!

    Versteh ich das also richtig, dass libnodave eine Bibliothek ist, die weitere Funktionen wie "daveGetU8()" zur Verfügung stellt, um Excel mit Step7 interagieren lassen zu können? Gibt's zu den Befehlen, die diese Bibliothek zur Verfügung stellt, eine kleine Übersicht + Erklärung?

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.514
    Danke
    934
    Erhielt 3.385 Danke für 2.738 Beiträge

    Standard

    Excel nutzt die in der libnodave.dll bereitgestellten Funktionen, um mit S7-SPS zu kommunizieren. Die libnodave.dll ist schon fertig kompiliert im Libnodave-Paket enthalten.

    Der Libnodave-Code ist für mich aufgrund der Programmkommentare und Debug-Ausgaben im Quelltext weitgehend selbsterklärend. Weiters gibt es diverse Readme-Dateien. Für die richtige Funktionsreihenfolge und das grundsätzliche Vorgehen siehe die Quelltexte test*.c, z.B. testISO_TCP.c

    Ich vermute, die für Dich übersichtlichste Informationsquelle ist wahrscheinlich die Modul12.bas.
    Nachdem dieses Modul im Excel-VBA-Editor eingefügt ist, kannst Du eine kurze Beschreibung jeder Funktion und der Konstanten im Abschnitt "(Deklarationen)" lesen.

    Für ein erstes Kennenlernen von LibNodave und Programmierversuche in Excel ala "Hello World" empfehle ich die "ungefährliche" Funktion daveGetOrderCode(...) zum Auslesen der CPU-Bestellnummer (damit hatte ich "damals" auch angefangen) oder mein Excel-Beispiel aus der FAQ .

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Registriert seit
    05.04.2012
    Beiträge
    971
    Danke
    98
    Erhielt 218 Danke für 193 Beiträge

    Standard

    wuerde gerne Messwerte aus einer Exceltabelle einlesen und ueber meine S7-300 an meinen Antrieb uebermitteln
    wenn Du einen SINAMICS S120 hast, dann kannst Du je nach Anwendung direkt von EXCEL auf Antriebsparameter schreiben.
    Z.B. Kurvenscheiben werden in EXCEL hinterlegt und man schreibt von EXCEL direkt auf die Antriebsparameter - es gibt sogar "Freaks" die ohne Starter arbeiten und alles in EXCEL machen (von EXCEL aus ONLINE gehen und direkt reinschreiben). Mir reicht es schon, wenn ich per Script auf STARTER- Ebene EXCEL- Inhalte übertrage.
    Anwendungen, z.B. Kurvenscheibendownload, aber auch Verwaltung sehr vieler Datenmengen (z.B. Papiermaschinen mit großer Achsanzahl und man hinterlegt die Bezugsdrehzahlen, Getriebefaktoren, usw. usw. in EXCEL und parametriert alle Antriebe mit einen Mausklick).

  7. #6
    yone ist offline Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    47
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @ zako: Du meinst, dass man die SPS mit Hilfe von Excel "umgehen" kann und man direkt an den FU geht? Was meinst du denn mit Kurvenscheiben? Mit den Parametern möchte ich zunächst sowieso nicht rumspielen, weil ich diese ja erstmal über STARTER soweit wie nötig eingestellt habe und eventuell noch die ein oder andere Veränderung später tätigen werde!

    Ich habe dann aber mal eine Frage zum Verbindungsaufbau mit der SPS, da ich mich mit dem Kram echt zu wenig auskenne.
    Ich habe meinen PC über LAN mit der SPS S7-300 verbunden, die SPS ist dann via Profinet am Sinamics S120, welcher dann mit dem Motor verbunden ist.

    Ausschnitt aus Programmcode zur Initialisierung der Verbindung

    ' Here begins the demo program
    Sub initTable()
    Cells(2, 4) = "Serial port:"
    Cells(2, 5) = "COM1"
    Cells(3, 4) = "Baudrate:"
    Cells(3, 5) = "38400"
    Cells(4, 4) = "Parity:"
    Cells(4, 5) = "O"
    Cells(6, 4) = "MPI/PPI Address:"
    Cells(6, 5) = 2
    Cells(7, 4) = "IP Address:"
    Cells(7, 5) = "192.168.1.1"
    Cells(8, 4) = "Access point:"
    Cells(8, 5) = "/S7ONLINE"
    End Sub
    Private Function initialize(ByRef ph As Long, ByRef di As Long, ByRef dc As Long)
    ph = 0
    di = 0
    dc = 0
    Rem uncomment the daveSetDebug... line, save your sheet
    Rem run excel from dos box with: excel yoursheet >debugout.txt
    Rem send me the file debugout.txt if you have trouble.
    Rem call daveSetDebug(daveDebugAll)
    initialize = -1
    baud$ = Cells(3, 5)
    If (baud$ = "") Then Call initTable
    Cells(12, 2) = "Running"
    res = -1
    port = Cells(2, 5)
    baud$ = Cells(3, 5)
    parity$ = Cells(4, 5)
    peer$ = Cells(7, 5)
    acspnt$ = Cells(8, 5)
    ph = setPort(port, baud$, Asc(Left$(parity$, 1)))
    ' Alternatives:
    Rem ph = openSocket(102, peer$) ' for ISO over TCP
    Rem ph = openSocket(1099, peer$)' for IBH NetLink
    Rem ph = openS7online(acspnt$) ' to use Siemes libraries for transport (s7online)
    Cells(2, 1) = "port handle:"
    Cells(2, 2) = ph
    If (ph > 0) Then
    di = daveNewInterface(ph, ph, "IF1", 0, daveProtoMPI, daveSpeed187k)
    ' Alternatives:
    'di = daveNewInterface(ph, ph, "IF1", 0, daveProtoPPI, daveSpeed187k)
    'di = daveNewInterface(ph, ph, "IF1", 0, daveProtoMPI_IBH, daveSpeed187k)
    'di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
    'di = daveNewInterface(ph, ph, "IF1", 0, daveProtoS7online, daveSpeed187k)
    '
    'You can set longer timeout here, if you have a slow connection
    ' Call daveSetTimeout(di, 500000)
    res = daveInitAdapter(di)
    Cells(3, 1) = "result from initAdapter:"
    Cells(3, 2) = res
    If res = 0 Then
    MpiPpi = Cells(6, 5)
    '
    ' with ISO over TCP, set correct values for rack and slot of the CPU
    '
    dc = daveNewConnection(di, MpiPpi, Rack, Slot)
    res = daveConnectPLC(dc)
    Cells(4, 1) = "result from connectPLC:"
    Cells(4, 2) = res
    If res = 0 Then
    initialize = 0
    End If
    End If
    End If
    End Function
    Dort werden neben der IP-Adresse auch noch MPI-Adresse etc gesetzt, die ich ja eigentlich garnicht benötige bzw angeschlossen habe.

    Folgendermaßen sieht mein Code aus (die Funktion InitTable will ich nicht nutzen, stattdessen in der Funktion initialize direkt die Werte eingeben)

    Private Function initialize(ByRef ph As Long, ByRef di As Long, ByRef dc As Long)
    Dim res, resmb, peer$, Rack, Slot

    ' Initialisierung von Zustands-Variablen
    ph = 0
    di = 0
    dc = 0
    initialize = -1
    res = -1

    ' Verbindungsparameter TCP/ISO setzen
    peer$ = "192.168.1.1"
    MpiPpi = 2: Rack = 0: Slot = 2 ' << (1)

    ph = openSocket(102, peer$)
    ' Alternatives
    Rem ph = openSocket(102, peer$) ' for ISO over TCP
    Rem ph = openS7online(acspnt$) ' to use Siemes libraries for transport (s7online) ' << (2)

    If (ph > 0) Then
    di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
    res = daveInitAdapter(di)
    If res = 0 Then
    dc = daveNewConnection(di, MpiPpi, Rack, Slot) ' << (3)
    res = daveConnectPLC(dc)
    If res = 0 Then ' Verbindung zu PLC erfolgreich aufgebaut
    initialize = 0
    Else ' Fehler daveNewConnection() + daveConnectPLC()
    resmb = MsgBox("Fehler")
    End If
    Else ' Fehler daveNewInterface() + daveInitAdapter()
    resmb = MsgBox("Fehler beim Initialisieren TCP-Interface! Fehler bei Verbindungsaufbau")

    End If
    End If
    End Function
    Siehe Nummern im Code:
    (1) Wieso werden sowohl im FAQ was PN/DP gepostet hat als auch im libnodave Quelltext diese Variablen gesetzt, obwohl die Verbindung über LAN aufgebaut werden soll und nicht über MPI?
    (2) Wann benutze ich diese Zeile, d.h. wann verwende ich diese anstatt "ph = openSocket(102, peer$)"?
    (3) In der Funktion davenewconnection() wird die Variable MpiPpi verwendet. Aus welchem Grund?

    Sind in meiner Initialize Funktion ansonsten irgendwelche Fehler?

    Vielen Dank für die Hilfe!

  8. #7
    yone ist offline Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    47
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hey Jungs, kann mir da keiner helfen? Kann ja leider momentan den Rechner nicht mit der SPS verbinden und es selber ausprobieren, deshalb muss ich durch Recherche schauen, dass der Code einigermaßen funktionstüchtig ist! Durchstöber schon das ganze Internet danach und wäre erstmal froh, wenn der Verbindungsauf- und abbau vernünftig programmiert ist und ich mich danach auf das Einlesen der Bestellnummer stürzen kann. Das sollte ja relativ flott gehen und wenn ich mich vergewissert habe, dass der Zugriff auf die SPS möglich ist, könnte ich dann der SPS die Werte aus der Exceltabelle übergeben.

  9. #8
    yone ist offline Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    47
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe nun den Verbindungsauf- und -abbau programmiert und wuerde gerne zum Testen einen Wert aus dem DB56 auslesen! Habe via Step7 einen DB56 angelegt, einen Wert an die erste Stelle geschrieben und diesen dann in die SPS geladen.
    Das Programm zum Einlesen dieses Wertes habe ich dann wie folgt realisiert:

    Private Sub DB_Lesen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DB_Lesen.Click
    Dim buf(0) As Byte
    If fds.rfd > 0 Then
    result = dc.readBytes(libnodave.daveDB, 56, 0, 1, buf)
    TextBox1.Text = dc.getU16()
    End If
    End Sub
    In der Textbox wird allerdings immer "240" zurueckgegeben, obwohl der Wert 20 ausgegeben werden muesste.

    Meine Verbindung wird durch

    Public Sub Verbinde()
    Dim ip As String
    ip = "192.168.0.3" ' IP-Adresse der SPS
    fds.rfd = libnodave.openSocket(102, ip) ' Portstatus, baut TCP Verbindung auf: int openSocket(const int port, const char * ip), 102 ist Portnummer fuer TCP Protokoll
    fds.wfd = fds.rfd ' Portstatus schreiben = Portstatus lesen

    di = New libnodave.daveInterface(fds, "Interface", localMPI, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
    di.setTimeout(1000000)

    result = di.initAdapter

    If result = 0 Then
    dc = New libnodave.daveConnection(di, plcMPI, 0, 2) ' daveNewConnection(di, MPI, rack, slot), MPI irrelevant bei Verbindung ueber ISO/TCP
    result = dc.connectPLC()
    MsgBox("Verbindungsaufbau erfolgreich", MsgBoxStyle.Information)
    Else
    MsgBox("Fehler bei Verbindungsaufbau", MsgBoxStyle.Information)
    End If
    End Sub
    aufgebaut. Was mich allerdings wundert, ist, dass bei falscher IP-Eingabe (d.h. wenn ip nicht der IP-Adresse der SPS entspricht) ebenfalls Verbindungsaufbau erfolgreich ausgegeben wird, allerdings nach deutlich laengerer Wartezeit. Muss sich die SPS eigentlich im Start Zustand befinden, wenn ich mein VB Code ausfuehre? Wenn ich keinen Verbindungsaufbau mache und dann etwas lesen will, wird garnichts eingelesen, also muesste der Fehler doch irgendwie daran liegen, dass die Verbindung besteht, aber ein falscher Wert weswegen auch immer eingelesen wird! Danke schonmal!

    EDIT: Fehler gefunden

    Private Sub DB_Lesen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DB_Lesen.Click
    Dim buf(0) As Byte
    If fds.rfd > 0 Then
    result = dc.readBytes(libnodave.daveDB, 56, 0, 2, buf)
    TextBox1.Text = dc.getU16
    End If
    End Sub
    Geändert von yone (19.11.2013 um 12:36 Uhr)

  10. #9
    yone ist offline Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    47
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Public Sub Verbinde()
    Dim ip As String
    ip = "192.168.0.3" ' IP-Adresse der SPS
    fds.rfd = libnodave.openSocket(102, ip) ' Portstatus, baut TCP Verbindung auf: int openSocket(const int port, const char * ip), 102 ist Portnummer fuer TCP Protokoll
    fds.wfd = fds.rfd ' Portstatus schreiben = Portstatus lesen

    di = New libnodave.daveInterface(fds, "Interface", localMPI, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
    di.setTimeout(1000000)

    result = di.initAdapter

    If result = 0 Then
    dc = New libnodave.daveConnection(di, plcMPI, 0, 2) ' daveNewConnection(di, MPI, rack, slot), MPI irrelevant bei Verbindung ueber ISO/TCP
    result = dc.connectPLC()
    MsgBox("Verbindungsaufbau erfolgreich", MsgBoxStyle.Information)
    Else
    MsgBox("Fehler bei Verbindungsaufbau", MsgBoxStyle.Information)
    End If
    End Sub
    Gebe ich 'ip' den falschen Wert, wird nach laengerer Zeit "verbindungsaufbau erfolgreich" ausgegeben, obwohl er garnicht in diese Verzweigung reingehen duerfte. Das Auslesen des DBs funktioniert dann nicht: es besteht also keine Verbindung zur SPS! Warum wird nicht in die Verzweigung "Fehler bei Verbindungsaufbau" gesprungen?

  11. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.514
    Danke
    934
    Erhielt 3.385 Danke für 2.738 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    Public Sub Verbinde()
    Dim ip As String
    ip = "192.168.0.3" ' IP-Adresse der SPS
    fds.rfd = libnodave.openSocket(102, ip) ' Portstatus, baut TCP Verbindung auf: int openSocket(const int port, const char * ip), 102 ist Portnummer fuer TCP Protokoll 
    fds.wfd = fds.rfd ' Portstatus schreiben = Portstatus lesen
    
    di = New libnodave.daveInterface(fds, "Interface", localMPI, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
    di.setTimeout(1000000)
    
    result = di.initAdapter
    
    If result = 0 Then
      dc = New libnodave.daveConnection(di, plcMPI, 0, 2) ' daveNewConnection(di, MPI, rack, slot), MPI irrelevant bei Verbindung ueber ISO/TCP
      result = dc.connectPLC()
      If result = 0 Then
        MsgBox("Verbindungsaufbau erfolgreich", MsgBoxStyle.Information)
      Else
        MsgBox("Fehler bei Verbindungsaufbau", MsgBoxStyle.Information)
      End If
    Else
      MsgBox("Fehler beim Initialisieren TCP-Interface!", MsgBoxStyle.Information)
    End If
    End Sub
    PS:
    Bitte benutze für den Programmcode die CODE-Tags, nicht die QUOTE-Tags (der nächste Button mit dem #).

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Excel Tabelle aus HW Konfig erstellen
    Von mitchih im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.04.2017, 10:53
  2. Excel Tabelle öffnen
    Von Franz im Forum HMI
    Antworten: 12
    Letzter Beitrag: 08.10.2008, 12:02
  3. Messwerte einlesen und abspeichern.
    Von tino2512 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 29.05.2007, 22:37
  4. Antworten: 8
    Letzter Beitrag: 24.01.2006, 14:55
  5. Antworten: 4
    Letzter Beitrag: 04.10.2005, 18:51

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •