Aktuelle Zeit: 22.07.2018 01:00

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 38 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: OPC-Helper DLL für PB (Beta)
BeitragVerfasst: 15.05.2009 23:54 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Hi,

Um mit OPC einfacher arbeiten zu können habe ich nun die erste DLL am laufen. Als LIB kann ich diese leider nicht liefern da Tailbite den Code mit der komplexen DCOM Schnitstelle (OPC Costumer Interface) nicht erfolgreich kompilieren kann.

Kurzbeschreibung PBOPC.HTML

DLL und Includes Pack OpcPack.zip

Update v2.4
- Fixed: Speicherleck bei Items löschen.
- Neu: Das ShutdownObject ist jetzt ein Teil des ServerObject und es wird allen Shutdown-Funktionen das ServerObject angegeben.
- Neu: OpcRelease(...) beendet jetzt auch automatisch das ShutdownObject.


Beispiel mit Inat OPC Server
Code:
;- TOP

; Komment   : OPC Test
; Version   : v2.2
; Erstellt  : 15.05.2009
; Geändert  :
; Author    : Michael Kastner (mk-soft)

; Compiler  : Unicode

; *********************************************************************************************************

IncludeFile "PBOPC.pbi"
IncludeFile "PBOPC_Help.pbi"

; *********************************************************************************************************

#OPC_QUALITY_BAD = $00
#OPC_QUALITY_UNCERTAIN = $40
#OPC_QUALITY_GOOD = $C0
#OPC_QUALITY_CONFIG_ERROR = $04
#OPC_QUALITY_NOT_CONNECTED = $08
#OPC_QUALITY_DEVICE_FAILURE = $0c
#OPC_QUALITY_SENSOR_FAILURE = $10
#OPC_QUALITY_LAST_KNOWN = $14
#OPC_QUALITY_COMM_FAILURE = $18
#OPC_QUALITY_OUT_OF_SERVICE = $1C
#OPC_QUALITY_LAST_USABLE = $44
#OPC_QUALITY_SENSOR_CAL = $50
#OPC_QUALITY_EGU_EXCEEDED = $54
#OPC_QUALITY_SUB_NORMAL = $58
#OPC_QUALITY_LOCAL_OVERRIDE = $D8

; *********************************************************************************************************

Procedure test()
; OPC Server verbinden
  Debug "OPC Server verbinden"
  *Server = OpcConnect("INAT TCPIPH1 OPC Server", "")
  Debug GetErrorString(*Server, OpcGetLastError())
  If *Server = 0
    ProcedureReturn 0
  EndIf
  Debug "Fertig."
  ; Gruppe anlegen
  Debug "Gruppe anlegen"
  *Group = OpcAddGroup(*Server, "Test")
  Debug GetErrorString(*Server, OpcGetLastError())
  If *Group = 0
    ProcedureReturn 0
  EndIf
  ; Items anlegen
  Debug "Items anlegen"
  *item1 = OpcAddItem(*Group, "", "Labor.mw80")
  *item2 = OpcAddItem(*Group, "", "Labor.mreal82")
  *item3 = OpcAddItem(*Group, "", "Labor.mstring90.20")
  *item4 = OpcAddItem(*Group, "", "Labor.mx86,1")
  Debug "Fertig."
 
  ; wait for plc
  Debug "PLC Verbinung püfen"
  value1.l
  quality.l
  Repeat
    r1 = OpcReadWord(*item1, @value1, @quality)
    If r1
      Debug GetErrorString(*Server, r1)
      OpcRelease(*server)
      End
    EndIf
    If quality = #OPC_QUALITY_GOOD
      Break
    Else
      count + 1
      If count > 10
        OpcRelease(*Server)
        Debug "PLC Offline"
        End
      EndIf
    EndIf
  ForEver
  Debug "Fertig."
  ; Items schreiben
  r1 = OpcWriteWord(*item1, 100)
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 1 geschieben. Variant Type: " + Str(OpcGetItemDataType(*item1))
  EndIf 
  set2.f = 11.5
  r1 = OpcWriteFloat(*item2, set2)
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 2 geschieben. Variant Type: " + Str(OpcGetItemDataType(*item2))
  EndIf
  r1 = OpcWriteString(*item3, "Hallo Welt")
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 3 geschieben. Variant Type: " + Str(OpcGetItemDataType(*item3))
  EndIf
  Delay(1000) 
  r1 = OpcWriteBool(*item4, #True)
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 4 geschieben. Variant Type: " + Str(OpcGetItemDataType(*item4))
  EndIf
  Delay(1000) 
  ; item lesen
  value1.l
  quality.l
  r1 = OpcReadWord(*item1, @value1, @quality)
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 1 gelesen: " + Str(value1) + " Qulity: " + GetQualityText(quality)
  EndIf
 
  value2.f
  r1 = OpcReadFloat(*item2, @value2, @quality)
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 2 gelesen: " + StrF(value2) + " Qulity: " + GetQualityText(quality)
  EndIf
 
  text.s = Space(100) ; Nur in Unicode
  r1 = OpcReadString(*item3, @text, 100, @quality)
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 3 gelesen: " + text + " Qulity: " + GetQualityText(quality)
  EndIf
 
  value4.l = 0
  r1 = OpcReadBool(*item4, @value4, @quality)
  If r1
    Debug GetErrorString(*Server, r1)
  Else
    Debug "Item 4 gelesen: " + Str(value4) + " Qulity: " + GetQualityText(quality)
  EndIf
 
  ; Server beenden - Intern werden automatisch die Gruppen gelöscht (OpcRemoveGroup(...))
  Debug "Beenden Server"
  hResult = OpcRelease(*Server)
  Debug "Fertig"
 
EndProcedure

test()


FF :wink:

P.S. Beispiel überarbeitet

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Zuletzt geändert von mk-soft am 22.09.2013 12:50, insgesamt 5-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 16.05.2009 14:34 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Update v2.21

- Automatische Typenanpassung beim lesen und schreiben der Items
- Server Shutdown Callback eingebunden. MyCallback(*szReason) Beispiel im OpcPack.

FF :allright:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 16.05.2009 19:54 
Offline
Moderator
Benutzeravatar

Registriert: 11.09.2004 13:09
Dumme Frage was ist OPC und für was kann man das gebrauchen?

_________________
SkyBeat Piloten und ATC Informationssystem


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 16.05.2009 19:57 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Die Frage ist nicht Dumm (können Fragen überhaupt Dumm sein?)!

Ich denke mal, alle die es gebrauchen können werden Wissen was es ist,
aber ein paar Infos für alle anderen wären doch angebracht.

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 16.05.2009 19:58 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:37
nicolaus hat geschrieben:
Dumme Frage was ist OPC und für was kann man das gebrauchen?


http://www.opel-opc.com/

Vielleicht meint er aber auch das hier:

http://de.wikipedia.org/wiki/OLE_for_Process_Control

_________________
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 16.05.2009 20:46 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
DarkDragon hat es getroffen

OLE_for_Process_Control

wer mit Automation zu tun hat weiss wo für man es brauchen kann :allright:

War ne heiden Arbeit die DCOM Schnittstelle zum laufen zu bekommen. Ca 3000 Zeilen Code und Deklarationen.

P.S. Tailbite steigt mit ASM Error aus.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 17.05.2009 17:29 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Update v2.22

Added
- OpcReadItems
- OpcWriteItems
- VariantHelper_Include v2.08

Mehrere Items auf einmal lesen oder schreiben geht schneller da diese als Block übertragen werden.

Die Items müssen sich aber in der gleichen Gruppe befinden.

FF :wink:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 18.05.2009 22:01 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Update v2.23

Bugfix
- OpcWriteItems(...) - Speicherleck und IMA
- VariantHelper_Include.pb - Macros SafeArray

Added
- DateTime korrektur INAT OPC Server VT_DATE <> VT_BSTR

Info:
Bei den Funktionen OpcReadVariant(...) und OpcWriteVariant(...) werden keine Typenanpassung durchgeführt.
Alle Variant Variablen mit Safearray werden auch keine Typenanpassung durchgeführt.

FF :wink:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.05.2009 14:55 
Offline

Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf
Erstmal klasse Arbeit, der Zugriff über OPC (Softing, Deltalogic)
auf S5 und S7-Steuerungen funktioniert prima.

Ich habe hier einen OPC-Server von ABB (Roboter):

Code:
  ; OPC Server verbinden
    Debug "OPC Server verbinden"
    *Server = OpcConnect("ABB.IRC5.OPC.Server.DA", "")
    Debug GetErrorString(*Server, OpcGetLastError())
    If *Server = 0
      OPCDatenTH = 0
      ProcedureReturn 0
    EndIf
    Debug "Fertig."
   
    ; Gruppe anlegen
    Debug "Gruppe anlegen"
    *Group = OpcAddGroup(*Server, "Test")
    Debug GetErrorString(*Server, OpcGetLastError())
    If *Group = 0
      OPCDatenTH = 0
      ProcedureReturn 0
    EndIf
    Debug "Fertig."         
     
    ; Items anlegen
    Debug "Items anlegen"   
    *item1 = OpcAddItem(*Group, "", "W2K3_System2.RAPID.T_BEW1.MV_Bewegung.nSatzX")
    *item2 = OpcAddItem(*Group, "", "W2K3_System2.RAPID.T_BEW1.MV_Bewegung.nSatzY")
    *item3 = OpcAddItem(*Group, "", "W2K3_System2.SystemName")
    *item4 = OpcAddItem(*Group, "", "W2K3_System2.RAPID.T_BEW1.MV_Bewegung.tLuftstecher")
    *item5 = OpcAddItem(*Group, "", "W2K3_System2.SystemClock")   
    Debug "Fertig."



      ; item lesen
      r1 = OpcReadWord(*item1, @value1, @quality)
      If r1     
        Debug GetErrorString(*Server, r1)
      Else
        ;Debug "Item 1: " + Str(value1) + " Quality: " + PeekUnicode(OpcGetQualityText(quality))
        SetGadgetText(#String_0, Str(value1) + " : " + PeekUnicode(OpcGetQualityText(quality)))
      EndIf



Funktioniert soweit ohne Probleme:

; OPC Server verbinden
; Gruppe anlegen
; Items anlegen

Beim 'items lesen' wird kein Fehler gemeldet, aber quality zeigt den
Wert '32 (UNKNOWN ERROR)'.

Wenn ich jetzt aber einen anderen OPC-Client (zb.: Softing OPC Demo Client) nehme und die selben Items anzeigen lasse, werden in diesem
Moment auch die Items in meinem Programm richtig angezeigt.

Was kann man da machen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.05.2009 22:10 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Hi Chris,

vielleicht die Items mehrmals lesen. Habe diese verhalten auch bei INAT OPC festgestellt. Allerdings mit der Quality #OPC_QUALITY_UNCERTAIN

In den Beispielen verwende ich eine schleife bis max 10 durch läufe. dauert wo möglich manchal etwas bis der Server die Verbindung zur Steuerung aufgebaut hat.

FF :allright:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 38 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye