easy-forum
Deutsch - Software => Kommunikation => OPC Server => Thema gestartet von: mallemallemueckas 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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
Hi all,
is there any little VB6 project which showing easy800 counter value in text box connected directly with com port without OPC server. Any help would be greatly appreciated. Thanks.
Greetings,
TheTrueMan
-
Hello,
look on this link
http://easy-forum.net/index.php?topic=3603.0
http://easy-forum.net/index.php?topic=3183.0
-
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
Hallo gibt es diese DLL und das Beispiel noch irgendwo zum runterladen??
der Link funktioniert nicht mehr
-
Hallo Hannes,
versuchs mal hier:
ftp.moeller.net/EASY/TOOLS/EASY_COM_V242.zip
Gruß Paul
-
Hallo Hannes,
oder Startseite ganz oben.