Autor Thema: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"  (Gelesen 35506 mal)

Offline mallemallemueckas

  • Newbie
  • *
  • Beiträge: 4
Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« am: September 18, 2008, 09:42:23 Vormittag »
Guten Tag zusammen,

ich habe in diesem Forum schon einiges zu dem Thema OPC Server und Visual Basic Anwendungen gelesen.
Mir ist allerdings leider nicht ganz klar geworden, ob eine Anbindung nun problemlos möglich ist, oder nicht?
Werden die in dein Beiträgen erwähnten Dll von Moeller jetzt weiter unterstützt, oder nicht?
Kennt jemand die ActiveX Toolbox von Softing, und kann Erfahrungen zu dieser Toolbox nennen?
Für Rückmeldungen wäre ich dankbar.

Gruß Markus


Offline Knodelpa

  • easy god
  • *****
  • Beiträge: 1410
  • I love easy-Forum.net
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #1 am: September 18, 2008, 11:18:37 Vormittag »
Hallo Markus,

der schnellste Weg ist sicherlich die DLL. Du bindest die DLL in dein Programm ein und bist super schnell per RS232 oder Ethernet Online und kannst Daten lesen und schreiben. Ich glaube bei der DLL ist sogar ein Beispiel für VB dabei.

ftp://ftp.moeller.net/EASY/TOOLS/easy_com_v220.zip

Ein Zugriff über OPC gestaltet sich wesentlich schwieriger und macht eigentlich nur Sinn, wenn das Programm univesell bleiben soll, d.h. Datenpunkte zur Laufzeit ausgewählt werden sollen.

 :) ;) :D
Gruß Paul

Offline mallemallemueckas

  • Newbie
  • *
  • Beiträge: 4
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #2 am: September 18, 2008, 13:03:11 Nachmittag »
Hallo Paul,

danke für die schnelle Antwort. Die Anbindung mit Dll Datei scheint mir auch eine gute Alternative zu sein.
Weist Du, ob diese Dll's auch in Zukunft unterstütz werden? Ich habe hier im Forum 1-2 Artikel gelesen, in denen berichtet wird, dass diese Unterstützung auslaufen soll. Oder habe ich etwas falsch verstanden?

Gruß Markus

Offline Knodelpa

  • easy god
  • *****
  • Beiträge: 1410
  • I love easy-Forum.net
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #3 am: September 18, 2008, 13:16:21 Nachmittag »
Hallo Markus,

es gab eine "alte" DLL über die im Forum diskutiert worden ist. Die neue DLL wurde erst vor ca. 1 Jahr zur Verfügung gestellt und wird sicherlich auch weiter entwickelt und gepflegt. Ich denke da brauchst du Dir keine
Gedanken zu machen. Ich benutze die DLL übrigends auch, allerdings mit
Borland Delphi.

 :) ;) :D
Gruß Paul

Offline theutone

  • Newbie
  • *
  • Beiträge: 14
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #4 am: Mai 20, 2009, 14:16:28 Nachmittag »
Hallo,

ich habe ein Problem mit der Einbindung der Moeller dll in VB 2005.
Ich habe bereits eine Verbindung mit meiner Steuerung über den Softing OPC Server getestet und es funktioniert tadellos.

Jetzt möchte ich einen Schritt weiter gehen und meine Werte in VB 2005 anzeigen lassen, aber da hänge ich nun fest.
Wie funktioniert das genau?
Das PDF zur Dll habe ich schon gelesen, aber wenn ich das Demo Projekt öffne und die Verbindung über den COM-Port starten will, setzt VB aus und meldet das es die Moeller DLL nicht findet.
Ich habe die DLL in jeden Ordner des VB Projektes kopiert.

Kann mir bitte Jemand auflisten wie ich vorgehen muss damit ich die Werte aus meiner Easy auslesen kann. Ggf. vielleicht auch ein wenig VB-Code zur Verfügung stellen?

z.B.

1. DLL in Ordner XY
2. Moeller API-Datei in Form einfügen
3. etc

Danke!

Gruß
Patrick

Offline edu31

  • Jr. Member
  • **
  • Beiträge: 76
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #5 am: Mai 20, 2009, 15:33:08 Nachmittag »
Hallo Patrick,

ich bin so vorgegangen:

1. die Datei easyCOM_VB_Demo.vbproj in VB2005 geöffnet
2. Im Projektmappen-Explorer den Eintrag "easyCOM_VB_Demo" selektiert und im Kontextmenü "Erstellen" oder "Neu Erstellen" aufgerufen
3. Jetzt liegt im Verzeichnis "DemoVB.NET" noch ein "bin\Debug" bzw "bin\Release" Verzeichnis, da hab ich die EASY_COM.dll jeweils hineinkopiert.
4. Anschließend lies sich das Demo-Exe sowohl aus VB2005 als auch aus dem Windows-Explorer heraus ausführen.
Wenn das bei dir nicht klappt, kannst du die Dll auch ins Windows-System Verzeichnis kopieren - aber daran denken, diese auch auszutauschen, wenn es mal ein Update gibt...

Das Demo-Projekt demonstriert bereits, wie man Werte ausliest - sie dir mal die Datei "Form1.vb" an.
Du könntest das Projekt als Ausgangsbasis für eigene Experimente weiterverwenden.
Wenn du stattdessen ein neues Projekt anlegst, musst du die Datei "easyComApi.vb" als "vorhandenes Element" deinem Projekt hinzufügen - damit gibst du die Dll-Schnittstelle in deinem Projekt bekannt.

Hoffe dir weitergeholfen zu haben

Gruß Eduard

Offline theutone

  • Newbie
  • *
  • Beiträge: 14
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #6 am: Mai 20, 2009, 17:17:13 Nachmittag »
Hallo,
Danke für den Tipp!
Ich habe die DLL-Datei in den Windows System Ordner gelegt und schon funktioniert es.
Jetzt kann ich auch mit dem Programcode rumprobieren, dann bekomme ich es schon hin.
Gruß
Patrick

Offline theutone

  • Newbie
  • *
  • Beiträge: 14
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #7 am: Mai 21, 2009, 12:10:38 Nachmittag »
Hallo,
so einfach wie ich es mir gedacht habe ist es dann mal doch wieder nicht. ::)

Ich bekomme keine Werte auf das MD 30 geschrieben oder davon gelesen.

Hier mal mein Code welchen ich in das Moeller Programm eingefügt habe.

        wert = TextBox2.Text
        ComError = easyCOM.MC_Write_Object_Value(MyComHandle, 0, 17, 117, 4, wert)
        Label3.Text = easyCOM.MC_Read_Object_Value(MyComHandle, 0, 17, 117, 4, bRawByte(0))
        Label4.Text = wert

Kann mir bitte einer erklären wie ich z.B. den Wert meines MD 30 in eine Variable bekomme und wie ich Werte aus einer Variablen auf mein MD30 schreibe.
Über sonstige Tipps  mit der Kommunikation zwischen EASY und VB und Programmbeispiele in VB bin ich sehr dankbar.

Gruß
Patrick

Offline Knodelpa

  • easy god
  • *****
  • Beiträge: 1410
  • I love easy-Forum.net
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #8 am: Mai 21, 2009, 15:44:00 Nachmittag »
Hallo Patrick,

warum verwendest du die Multi Instanz Variante? Alle Funktionen existieren auch ohne das MC. Ich denke aber dort liegt nicht dein Problem. Was für einen Rückgabewert gibt die Funktion? Funktionen die einfachen Funktionen, wie z.B. OpenCom, CloseCom, Start und Stopp???

Gruß Paul


Offline theutone

  • Newbie
  • *
  • Beiträge: 14
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #9 am: Mai 21, 2009, 16:06:13 Nachmittag »
Hallo,
das normale Test Programm von Moeller funktioniert.
Die Kommunikation über USB und Net mit dem Test-OPC funktioniert.

Ich möchte später auch auf 3 Easys zugreifen.
Aber dazu muss ich ja nur die erste Ziffer ändern, oder? (MyComHandle, 0, 17, 117, 4, bRawByte(0))

Ich wollte jetzt in den Programmcode von Moeller meinen Code bei schreiben um zu testen ob und wie es mit dem Daten lesen und schreiben funktioniert.

Das Einrichten mit einem Accontrol OPC-Server und Siemens war irgendwie nicht so kompliziert, habe leider außer ein wenig Visualisierung und Datenspeicherung in Exel mit S7- VB noch nicht gemacht.
Ich benötige halt immer ein paar Beispiele und dann kann ich mir die abändern.

Ich brauche ein wenig mehr Erklärung zu dem Moeller-VB-Code. Ich habe mir auch schon das Beispiel hier aus dem Download mit der Exel-Datei und dem VBA-Code angeschaut, das verstehe ich schon eher. Ich werde es mal damit als Vorlage versuchen.

Gruß
Patrick

Offline Knodelpa

  • easy god
  • *****
  • Beiträge: 1410
  • I love easy-Forum.net
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #10 am: Mai 21, 2009, 16:33:52 Nachmittag »
Hallo Patrick,

ich befürchte du bringst hier einige Dinge leicht durcheinander. Du versuchst aktuell mit Hilfe der easy DLL aus einer Hochsprache auf eine oder mehrere easy zuzugreifen, mit OPC hat dies nix zu tun.

Sofern du schon Erfahrung mit OPC Server / Client hast kannst du den kostenlosen OPC Server von Moeller nehmen und musst nichts programmieren. Der OPC Server hat bereits alle notwendigen Funktionen zum Zugriff auf eine oder mehrere easy, über seriell, Ethernet oder Modem. Beim OPC benötigt man aber auch einen Client, der in der Regel zu einer Visu Software gehört. Hier wird konfiguriert, aber nicht programmiert.

Die easy DLL ist dann sinnvoll, wenn du eigene Programme in einer Hochsprache schreiben möchtest. Alle Funktionen die du dafür benötigst befinden sich in der DLL. Die Funktionen mit MC_ greifen auf mehrere easy' s über unterschiedliche Comports oder unterschiedliche IP Adressen zu.

Sind deine drei easy allerdings über easy-NET miteinander vernetzt, brauchst du die Funktionen mit MC_ nicht !!! Dann reichen die einfachen Funktionen, in denen du lediglich die NET-ID des Teilnehmers angibst. Je nach Nummer 1..8 greifst du über das easy-NET auf den entsprechenden Teilnehmer zu. Trägst du stattdessen eine 0 als Net-ID ein, greift die DLL auf den Teilnehmer zu, andem das Kabel angeschlossen ist, unabhängig von seiner tatsächlichen NET-ID.

Ich bin mir nicht sicher ob dein Aufruf so richtig ist. Ich denke die Daten müssen als Zeiger übergeben werden. Ich schaue mir das aber in einem Beispiel noch mal an. Was du auf gar keinen Fall vergessen darfst ist zunächst die Verbindung zu öffnen.

Ich hoffe meine Infos helfen Dir etwas weiter!!??

Viele Grüße
Paul

Offline theutone

  • Newbie
  • *
  • Beiträge: 14
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #11 am: Mai 23, 2009, 09:48:46 Vormittag »
Hallo,
ich gebe das Projekt auf, meine VB Kenntnisse reichen nicht aus um mit Hilfe der Dll eine Verbindung zur Easy herzustellen und Daten auszulesen und zu schreiben.
Gibt es nicht die Möglichkeit, wie z.B. bei Accontrol, eine Funktion aus der Toolbox auf die Form zu ziehen und darin die gewünschten Parameter die man lesen oder schreiben möchte zu deklarieren?
Ich habe jedenfalls nichts gefunden was mich weiterbringt.

Gruß
Patrick

Offline Knodelpa

  • easy god
  • *****
  • Beiträge: 1410
  • I love easy-Forum.net
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #12 am: Mai 23, 2009, 10:42:21 Vormittag »
Hallo Patrick,

nicht so schnell aufgeben. Schau Dir doch noch mal das Excel Beispiel an, dort wird doch auch mit Visual Basic, wenn auch VBA gearbeitet.

Versuche doch zunächst dich mal mit der easy zu verbinden, z.B.
retval = Open_ComPort(com_port_nr:=2, baudrate:=19200)

Ist retval =0 ist alles in Ordnung, ansonsten kannst du den Fehlercode in der PDF Doku der LIB nachlesen.

Als zweiten Schritt versuchst du die Verbindung wieder zu schliessen:
retval = Close_ComPort

Auch hier gilt retval=0 ist alles in Ordnung.

Nun taste dich langsam heran, z.B. easy Stoppen und Starten:
retval = Stop_Program(net_id:=0, Errorcode:=0)
retval = Start_Program(net_id:=0, Errorcode:=0)


Wenn du soweit gekommen bist ist der Rest nur noch Formsache.

Hier noch das Einbinden der kompletten DLL:
Option Explicit

Private Declare Function Open_ComPort Lib "EASY_COM.DLL" _
    (ByVal com_port_nr As Byte, _
     ByVal baudrate As Long) As Long

Private Declare Function Close_ComPort Lib "EASY_COM.DLL" () As Long

Private Declare Function GetCurrent_Baudrate Lib "EASY_COM.DLL" _
    (ByRef baudrate As Long) As Long
   
Private Declare Function Open_EthernetPort Lib "EASY_COM.DLL" _
    (ByVal szIpAddress As String, _
     ByVal IpPort As Long, _
     ByVal baudrate As Long, _
     ByVal no_baudrate_scan As Boolean) As Long

Private Declare Function Close_EthernetPort Lib "EASY_COM.DLL" () As Long

Private Declare Function Stop_Program Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, ByRef Errorcode As Byte) As Long
   
Private Declare Function Start_Program Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, ByRef Errorcode As Byte) As Long
   
Private Declare Function Read_Clock Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByRef year As Byte, _
     ByRef month As Byte, _
     ByRef day As Byte, _
     ByRef hour As Byte, _
     ByRef min As Byte) As Long
     
Private Declare Function Write_Clock Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByRef year As Byte, _
     ByRef month As Byte, _
     ByRef day As Byte, _
     ByRef hour As Byte, _
     ByRef min As Byte) As Long
     
Private Declare Function Read_Object_Value Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByVal object As Byte, _
     ByVal index As Integer, _
     ByRef data As Byte) As Long
     
Private Declare Function Write_Object_Value Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByVal object As Byte, _
     ByVal index As Integer, _
     ByVal length As Byte, _
     ByRef data As Byte) As Long
     
Private Declare Function Read_Channel_YearTimeSwitch Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByVal index As Byte, _
     ByVal channel As Byte, _
     ByRef on_year As Byte, _
     ByRef on_month As Byte, _
     ByRef on_day As Byte, _
     ByRef off_year As Byte, _
     ByRef off_month As Byte, _
     ByRef off_day As Byte) As Long
     
Private Declare Function Write_Channel_YearTimeSwitch Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByVal index As Byte, _
     ByVal channel As Byte, _
     ByRef on_year As Byte, _
     ByRef on_month As Byte, _
     ByRef on_day As Byte, _
     ByRef off_year As Byte, _
     ByRef off_month As Byte, _
     ByRef off_day As Byte) As Long
     
Private Declare Function Read_Channel_7DayTimeSwitch Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByVal index As Byte, _
     ByVal channel As Byte, _
     ByRef DY1 As Byte, _
     ByRef DY2 As Byte, _
     ByRef on_hour As Byte, _
     ByRef on_minute As Byte, _
     ByRef off_hour As Byte, _
     ByRef off_minute As Byte) As Long
     
Private Declare Function Write_Channel_7DayTimeSwitch Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByVal index As Byte, _
     ByVal channel As Byte, _
     ByRef DY1 As Byte, _
     ByRef DY2 As Byte, _
     ByRef on_hour As Byte, _
     ByRef on_minute As Byte, _
     ByRef off_hour As Byte, _
     ByRef off_minute As Byte) As Long
     
Private Declare Function Unlock_Device Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByVal szPassword As String, _
     ByRef Errorcode As Byte) As Long
     
Private Declare Function Lock_Device Lib "EASY_COM.DLL" _
    (ByVal net_id As Byte, _
     ByRef Errorcode As Byte) As Long

Viele Grüße
Paul

Offline theutone

  • Newbie
  • *
  • Beiträge: 14
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #13 am: Mai 23, 2009, 11:18:24 Vormittag »
Hallo,
danke für deine Hilfe, alles was du mir so geschrieben hast ist ja verständlich
und die DLL einbinden ist auch kein Problem, aber der Programmcode der in den(Klammer) nach den Anweisungen wie z.B. 
ComError = easyCOM.MC_Write_Object_Value(MyComHandle, 0, 17, 117, 4, wert)
steht gestaltet sich für mich als die Schwierigkeit.
Ich habe versucht den Programmcode mit der Hilfe des PDF zu interpretieren  und für meine Bedürfnisse abzuwandeln aber das will nicht so recht.
Ich habe zurzeit nicht viele Nerven über für die Entwicklung in diesem Bereich.
Mal sehen wann ich wieder genügend Zeit habe (und Lust) um mich in diesen Bereich tiefer einzuarbeiten.
Danke für eure Hilfe.
Gruß
Patrick

Offline theutone

  • Newbie
  • *
  • Beiträge: 14
Re: Bedienoberfläche (Visual Basic) mit Easy 800 "verbinden"
« Antwort #14 am: Juni 15, 2009, 21:20:22 Nachmittag »
Hallo,
ich habe das Ganze jetzt verstanden und schreibe hier mal für die nächsten Suchenden ein bisschen Beispielcode.

  Dim Verbunden As Boolean
  Dim MyComHandle As Integer
  Dim ComError As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       
        MyComHandle = 0

        ComError = MC_Open_EthernetPort(MyComHandle, "172.21.129.129", 10001, 9600, True)

        If ComError = 0 Then
            Verbunden = True
        Else
            Verbunden = False
        End If
       
    End Sub

Private Sub TimerWerteLesen_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerWerteLesen.Tick

        If Verbunden = True Then
            '
            ComError = MC_Read_Object_Value(MyComHandle, 1, 10, 93, 4, abtemp)
            lbl_abtemp.Text = abtemp
                   
            ComError = MC_Read_Object_Value(MyComHandle, 1, 10, 94, 4, ktemp)
            lbl_ktemp.Text = ktemp
                 
            ComError = MC_Read_Object_Value(MyComHandle, 1, 10, 83, 4, vtemp)
            lbl_vtemp.Text = vtemp
               
            ComError = MC_Read_Object_Value(MyComHandle, 1, 10, 84, 4, rtemp)
            lbl_rtemp.Text = rtemp
           
            ComError = MC_Read_Object_Value(MyComHandle, 1, 10, 73, 4, mtemp)
            lbl_mtemp.Text = mtemp
         
            ComError = MC_Read_Object_Value(MyComHandle, 1, 10, 74, 4, autemp)
            lbl_autemp.Text = autemp
         
        End If
    End Sub

Private Sub TimerStörung_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerStörung.Tick
        'Speicherbereich M1-M96 Byteweise auslesen
        If Verbunden = True Then
            ComError = MC_Read_Object_Value(MyComHandle, 2, 4, 0, 0, Daten(0))

            Betriebsart = Daten(2)
            Störung_Blinken = Daten(3)
            Störung_Byte_1 = Daten(8)
            Störung_Byte_2 = Daten(9)
            Störung_Byte_3 = Daten(10)
            Störung_Byte_4 = Daten(11)

            End If


Gruß
Patrick