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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: Libnodave und Visual Basic 2008

  1. #11
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Lächeln


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    klar, nur muss ich leider morgen verreisen, für die nächsten 10 Jahre, wünsche dir viel Spass..


    Vladi



    (war nur a witz..)
    ______________________________________
    relax, take it easy
    Zitieren Zitieren -  

  2. #12
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich hab das in einem Delphi-Programm ähnlich gemacht. Die Daten werden einfach als Bytearray aus der SPS gelesen. Im Delphi-Programm hinterlege ich die Struktur, mit deren Hilfe ich dann die Daten aus dem Array of Byte heraushole und entsprechend zusammenbaue.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #13
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Ich habe mich dazu entschlossen, diesmal kein VB-Projekt, sondern meine Beschreibung von LibNoDave für den Einsatz mit VB.Net hier im Forum einzustellen.

    Ich möchte darauf hinweisen, dass ich ohne die libnodave.net.dll arbeite.

    Sämtliche Konstanten, Prozeduren und Funktionen habe ich deshalb in einen Modul gepackt und ihm den Namen LibnodaveModul.vb gegeben. Der Modul muss, wie in der Beschreibung zu sehen, in die VB-Projektverwaltung aufgenommen werden. Im Modul habe ich gegenüber dem Original einige Änderungen vorgenommen. Die Deklaration von Long-Variablen wurde durch Integer-Variablen ersetzt. Gelegentlich musste beim letzten Argument einer Funktion oder Prozedur die Parameterkennzeichnung von ByVal (Wert-Parameter) auf ByRef (Zeiger-Parameter) gestellt werden.

    Puritaner der .Net-Programmierung mögen es mir verzeihen, dass ich hier den sauberen Weg der objektorientierten Programmierung verlassen habe und einen Modul einsetze (VB6.0 lässt grüßen). Da alle Konstanten, Prozeduren und Funktionen mit Public deklariert wurden, kann ohne Einschränkungen darauf zugegriffen werden. Natürlich funktioniert dann kein Intellisence. Das ist aber kein Nachteil, weil die Konstanten und Methoden aussagekräftige Namen (dave...) tragen.
    Ein Vorteil beim Modul-Einsatz ist auch, dass sich kurze Ausdrücke ergeben und solche Zusätze wie libnodave, dc, usw. entfallen können.

    Nicht unerwähnt bleiben darf die Tatsache, dass die ursprüngliche Fassung dieser Beschreibung von Andreas138 verfasst wurde, was damals (Frühjahr 2009) eine tolle Leistung war. Im SPS-Forum hat sich Andreas leider etwas rar gemacht.

    An die Experten dieses Forums hätte ich die Bitte, die Beschreibung kritisch zu durchforsten und mir etwaige Fehler mitzuteilen.

    Ich mache gerade noch die Feststellung, dass mein LibnodaveModul.vb nicht hochgeladen werden kann. Ich ändere deshalb die Endung von vb in txt. Ich hoffe, dass es keinen Ärger gibt und funktioniert. Selbstverständlich muss die Endung wieder auf vb umgestellt werden, bevor der Modul eingesetzt werden kann.


    Gruß
    Earny
    Angehängte Dateien Angehängte Dateien

  4. Folgender Benutzer sagt Danke zu Earny für den nützlichen Beitrag:

    Hocheck (01.04.2010)

  5. #14
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Der Schock saß tief bis das ich folgendes lesen konnte

    (war nur a witz..)
    Zum Stand:

    Habe durch ändern eines Beispiel Projekts mir diese Sache mit Drag&Drop erstellen können. Projekt Siehe Anhang

    So muss mal schlafen

    Und vielen Dank für all die Hilfe die man bekommt!

    Ich werde alles Offen legen und Hochladen, sobald das Programm fertig ist und funktioniert!

    EDIT:

    Die DragDrop funktioniert nun und habe eine Möglichkeit gefunden diese Struktur dann zu verwenden. Mal schauen wann es funktioniert...
    Angehängte Dateien Angehängte Dateien
    Geändert von Hocheck (01.04.2010 um 18:53 Uhr)

  6. #15
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @ Earny

    Super Vielen Dank!!!

  7. #16
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo Hocheck,

    die Beschreibung, die ich oben eingestellt habe, war für VB2005 bestimmt.

    Wenn Du unter Excel programmierst, musst Du da was ändern:
    Die Deklaration der daveGetOrderCode-Funktion lautet:
    Code:
    Private Declare Function daveGetOrderCode Lib "libnodave.dll" (ByVal en As Long, ByRef buffer As Byte) As Long
    Hinweis: Der Datentyp "Long" von Excel (und VB6.0) ist ein 32-Bit-Integer.
    Würdest Du die gleiche Funktion bei VB2005 einsetzen müsstest Du "Long" durch "Integer" ersetzen, weil der 32-Bit-Integer-Datentyp von VB2005 "Integer" heißt.

    Ich habe hier noch ein Excel-Beispiel angehängt. Bei diesem Beispiel werden 5 verschiedene Ganzzahlen bei Mausklick in einen Datenbaustein DB1 geschrieben. Du kannst die Werte dann zu Kontrollzwecken auch wieder lesen und in die Excel-Mappe schreiben.
    Dieses Beispiel ist an ein Beispiel angelehnt, dass vierlagig mal hier im Forum eingestellt hat.
    Die Excel-Mappe enthält auch den Modul12, in dem alle Libnodave-Funktion,
    -Prozeduren und -Konstante aufgeführt sind. Der eigentliche Programmcode, mit den tatsächlich benötigten Funktionen, .... ist dem Tabellenblatt1 zugeordnet.

    Vorgehensweise:
    Du lädst zuerst die S7-Bausteine in die ACCONtrol-CPU. Dann öffnest Du die Excel-Mappe und musst dabei natürlich die "Makros aktivieren". Wenn Du dann auf die Buttons klickst, kannst Du beobachten, wie Werte in die ACCONtrol-CPU geschrieben und auch wieder aus der CPU gelesen werden.
    In dem Word-Dokument stehen noch ein paar Tips, die Du auch beachten solltest.

    Gruß
    Earny
    Angehängte Dateien Angehängte Dateien
    Geändert von Earny (14.04.2010 um 20:13 Uhr)

  8. Folgender Benutzer sagt Danke zu Earny für den nützlichen Beitrag:

    Hocheck (15.04.2010)

  9. #17
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Earny,

    Vielen Dank für die Beschreibung und Daten!

    Ich glaube da lag ein kleines Missverständnis meinerseits vor, da ich eine klare Aussage, dass ich VB 2008 nehme, vergessen habe. Ich habe die Verbindung und die Funktionen mit Excel hinbekommen. Konnte u.a auch SZL usw. erhalten.

    Meine Frage war, wie ich die S7-Nummer in Visual Basic 2005 bzw. 2008 auslesen kann- daher kam auch das Programmbeispiel:

    PrivateConst daveOrderCodeSize = 21
    PrivateDeclareFunction daveGetOrderCode Lib"libnodave.dll" (ByVal en AsInteger, ByRef buf AsByte) AsInteger

    Dim buf(50) AsByte
    Dim en AsInteger
    Dim res2 AsInteger
    Dim oc AsChar
    dc = New libnodave.daveConnection(di, plcMPI, 0, 2)
    res = daveGetOrderCode(dc, buf(0))
    For i AsInteger = 0 To daveOrderCodeSize - 2
    oc = oc + Chr(buf(i))
    Next i
    lblSeriennummer1.Text = oc


    Es erscheint eine Fehlermeldung, dass dc in
    res = daveGetOrderCode(dc, buf(0))
    nicht in integer konvertiert werden kann.

  10. #18
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    ich fürchte, da muss ich passen.
    Die Funktion "daveGetOrderCode" habe ich noch nicht eingesetzt.
    Woraus hast Du abgeleitet, dass Du für "en" (erstes Argument der Funktion) den Wert von "dc" einsetzen kannst?


    Gruß
    Earny

  11. #19
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Earny,

    Also eigentlich habe ich mir nur das Excel Beispiel von Libnodave angeschaut und versucht dieses so zu editieren, dass es in dem Beispiel von dir laufen könnte, aber das funktioniert so wohl nicht...

    Hier die Vorlage:

    Private Declare Function daveGetOrderCode Lib "libnodave.dll" (ByVal en As Long, ByRef buffer As Byte) As Long


    '
    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


    Sub readOrderCode()
    Cells(1, 2) = "Testing read Order code"
    Dim ph As Long, di As Long, dc As Long
    Dim buffer(50) As Byte
    res = initialize(ph, di, dc)
    If res = 0 Then
    res2 = daveGetOrderCode(dc, buffer(0))
    Cells(14, 2) = res2
    If res2 = 0 Then
    For i = 0 To daveOrderCodeSize - 2 'last character is chr$(0), don't copy it
    oc$ = oc$ + Chr$(buffer(i))
    Next i
    Cells(14, 3) = oc$
    Else
    e$ = daveStrError(res)
    Cells(9, 4) = "error:"
    Cells(9, 5) = e$
    End If
    End If
    Call cleanUp(ph, di, dc)
    End Sub

  12. #20
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du musst die Deklaration ändern. Anstelle von:

    Dim oc as char

    muss es

    Dim oc as String

    lauten.

    Code:
    PrivateSub btnSeriennummer_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnSeriennummer.Click
    Dim buf(50) AsByte
    Dim oc AsString
    Dim res2 AsInteger
    If res = 0 And livebit = TrueThen
    txtDC1.Text = dc
    res2 = daveGetOrderCode(dc, buf(0))
    For i AsInteger = 0 To daveOrderCodeSize - 2
    oc = oc + Chr(buf(i))
    Next i
    txtSeriennummer.Text = oc
    txtDC2.Text = dc
    txtRes2.Text = res2
    EndIf
    EndSub
    

    Gruß
    Earny

Ähnliche Themen

  1. Zugriff auf Twincat per ADS und Visual Basic 2008
    Von Ralle im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 30.01.2012, 17:47
  2. S7 - 300 verbindung mit Visual Basic 2008
    Von Magon im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 17.06.2010, 15:06
  3. Libnodave and Visual Studio 2008
    Von Rick im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.10.2009, 22:47
  4. Probleme mit Libnodave und Visual Basic
    Von Donnerkeil im Forum Hochsprachen - OPC
    Antworten: 11
    Letzter Beitrag: 03.04.2006, 21:50
  5. Probleme mit Libnodave und Visual Basic
    Von Donnerkeil im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 09.03.2006, 15:19

Lesezeichen

Berechtigungen

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