Forum: PC-Programmierung Tcp Datenpakete an OPC Server


von Thierry S. (thierry_s)


Lesenswert?

Hallo Zusammen,

ich brauchen dringend Hilfe. Es geht darum, Tcp-Datenpakete an den 
OPC-Server zu schicken. Hat das schon jemand mit C# gemacht?
Ich freue mich auf jegliche Antwort.

Viele Grüße

: Verschoben durch User
von Marc Rupprath (Gast)


Lesenswert?

Hallo   Thierry;

Ich habe dein Problem nicht ganz verstanden.
Daher frage ich mal anders nach: Was ist deine Aufgabe ??
Ich kenne deine Vorbildung in Bezug auf OPC nicht daher habe ich m ir 
erlaubt ausführlicher zu Antworten:

Soweit ich dies verstanden habe, ist es Aufgabe eines Ein OPC Servers 
"anderen Applikationen" (die über einen OPC Client verfügen) Daten 
bereitzustellen.
Quellen dieser Daten können etwa SPS Systeme, embedded Systeme oder 
andere Softwarekomponenten, bishin zu beispielsweise Windows 
Applikationen sein.

Der OPC Server empfängt von diesen elementen Daten.
Ein Opc client empfängt diese Daten und gibt diese an die Zielanwendung 
weiter.
Das nur zur Einleitung.

Möchtest du eine Applikation schreiben die dem OPC Server (welchen 
Genau) Daten bereitstellt, deine Anwendung also einen OPC Server 
bereitstellt.

Oder ist deine Appliaktion eher die OPC Client Komponente ??

Sofern nicht schon geschenen epmfehle ichg dir dies:

OPC: Von Data Access bis Unified Architecture von Frank Iwanitz, Jürgen 
Lange und Thomas J. Burke (20. Januar 2010)

oder

OPC Unified Architecture von Wolfgang Mahnke, Stefan-Helmut Leitner und 
Matthias Damm von Springer (19. März 2009)


Suche einmal nach Anbietern von OPC SDK's (software development Kit's)
Vorschläge:

http://www.unified-automation.com/
oder auch
http://www.softing.com/home/de/industrial-automation/downloads/licensing/opc.php

Es gibt die SDK auch als Demo, Someitz ich das noch wusste.

Gruß

von Thierry S. (thierry_s)


Lesenswert?

Hallo Marc,

erstmal vielen Dank für Deine Antwort.

Zum Erstn soll mein OPC-Server die Steuerungsparameter an meine 
Steuerung weiterleiten. Ich will also eigentlich einen OPC-Client 
(Applikation) die, den OPC-Server bereitstellt (ihm sagt wann er die 
Steuerung starten sollte). Dies will ich tun mit Tcp-Datenpakete (in 
C#).
Kannst Du mir da weiterhelfen?
Merci ;)

von Marc Rupprath (Gast)


Lesenswert?

Hallo;

praktisch helfen kann  ich dir nicht, da ich bislang weder OPC Server 
noch
OPC  Client selbst geschrieben habe.
Ich bin Projektingenieur der sich "lediglich" mit der Auswahl geeigneter
OPC Server und Clients befasst hat.

Ich bin also eher Anwender fertiger Lösungen.
Programmiert habe ich nur mit OPC Servern in so fern als das manche 
kommerzielle Produkte einen sog. COM (Component Object Modell) 
-Schnittstelle hatten.

Ich empfehle dir wie gesagt einmal das SDK für Server / und oder Client 
von der Firma Unified Automation anzusehen.


Ansonsten nur ein wenig Grundlagen:

Wenn ich dich richtig verstanden habe musst (oder willst du beides 
erstellen)??

1. Du hast eine Steuerung (welcher Art?) für die du einen OPC Server 
erstellen mußt (oder gibt es den OPC Server schon).

2. Du hast eine Applikation welche einen OPC Client beinhaltet und über 
den OPC Server mit der Steuerung kommunizieren soll ?

OPC "Classic" / OPC DA (Data Access)

Bei OPC "classic" / OPC DA (data Access) läuft der OPC Server zwingend 
auf einem Windows PC, da klassische OPC auf der Microsoft Technologie 
OLE basiert.

Das gilt auch für die Kommunikation zwischen OPC Server und client:
In der "Regel" befindet sich der OPC Server auf dem selben Windows 
Rechner wie die OPC Client Software, der Datenaustausch findet über Com 
Softwareschnisstellen statt.

OPC Server und OPC Client können sich auch auf verschieden Rechnern 
befinden, dann findet der Austausch über DCOM statt.

Dein OPC Server "redet" mit Steuerung mittels propritärter / Hersteller 
spezifische Protokolle.

Was heißt das: OPC Konform muss die Kommunikation "nur" zwischen OPC 
Server
und Client ablaufen (siehe Beschreibung in Spezifikation / zuvor 
genannter Literatur).
Wie dein OPC Server mit deiner Steuerung kommuniziert ist dort nicht 
beschrieben.

Der OPC Client "weiß" also nicht wie der OPC Server an die Daten der 
Steuerung gelangt ist, er weiß auch nicht, wie etwa Sollwert vorgaben 
deines Programmes über den OPC Server an die Steuerung übermittelt 
werden.

OPC Server und OPC Client unterhalten sich mittels 
Softwareschnittstellen.

Wenn (bei klassichen OPC) deine Steuerung und der Computer auf dem der 
OPC Server laufen soll mittels Ethernet verbunden sind kannst du dir das 
Protokoll praktisch aussuchen.

Schritt 1 wäre also eine Software zu schreiben welche "überhaupt" 
"irgendiwe" über Ethernet mit deiner Steuerung kommuniziert.

Schritt 2 wäre es diese Software entsprechend so zu erweitern, das diese 
"anderen" Programmen die Daten deine Steuerung "OPC Konform" 
bereitstellt.

In diesem Fall hätte die Aufgabe Programm welches "TCP/IP Datenpackete" 
in C# geschrieben ist und mit Steuerung kommuniziert zunächst mal nichts 
mit OPC zu tun (Schritt 1).


Mir fehlt hier wieder die praktische Erfahrung, aber:
Im Falle einer Mikrocontroller basierten Steuerung mit Ethernet gibt es 
für Grundlagen hier (und im Netz sicher Beispiele).

"Wie tausche ich über Ethernet zwischen Microcontroller und PC Daten 
aus"




Anderer Fall: OPC UA (unified architecture)

Das ist die neue Spezifikation, diese ist nun nicht mehr von Windows 
Technologien abhängig.

Beispielsweise kannst du nunmehr auch OPC Clients und Server für Linux / 
Unix erstellen.



Besser:
Formals war ein OPC Server immer ein Stück Software welches zwingend auf 
einem Windows PC installiert werden musste.


Nunmehr kann ein OPC Server als eine Komponente der Firmware unmittelbar
auf deiner Steuerung laufen.


In diesem Fall wurde deine Steuerung also unmittelbar den OPC Server 
beeinhalten.

Der Rechner auf dem der sich der OPC Client befindet ist über Ethernet
mit deiner Steuerung verbunden.

In keinen der Beschriebenen Fällen mußt du dich wirklich um die 
Datenpackete kümmern.


In jedem Fall benötigt du zur Implementierung der OPC konformen 
Kommunikation für  OPC Server / OPC Client ein entsprechendesx SDK.

Ich empfehle dir einfach dich mal mit deinem Problem an die Firma 
Unified Automation (oder Softing) zu wenden.

Auch die Firma Matrikon in Köln bietet seit kurzem ein SDK für OPC 
Servern auf embedded Systemen an.

Ich hoffe ich habe dich mit den ausführlichen darlegungen nicht zu sehr 
verwirrt.

Gruß

Marc

von Thierry S. (thierry_s)


Lesenswert?

Hallo Marc,

vielen Dank für Deinen Beitrag. Mittlerweile hhabe ich einen Weg 
gefunden. Einrn OPC Server habe ich bereits. Genau wie einen OPC Client. 
Ich brauche eine Remote Procedure Call (RPC) , um den OPC-Server und 
damit die Steuerung zu starten. Der Rechner, auf dem der OPC Server 
installiert ist, ist über Ethernet mit der Steuerung verbunden. Also das 
Problem liegt an der verbindungslosen Kommunikation, die ich mit RPC 
realisieren möchte...

Gruß,
Thierry

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thierry S. schrieb:
> Ich brauche eine Remote Procedure Call (RPC) , um den OPC-Server und
> damit die Steuerung zu starten.

Ein OPC-Server wird automatisch gestartet, sobald ein OPC-Client sich 
damit zu verbinden versucht. Das ist das Grundkonzept von DCOM und OPC.

Ist der OPC-Server als Dienst (Service) implementiert, kann man 
natürlich auch einfach mit Windows-Bordmitteln diesen Dienst starten - 
mit sc geht das auch übers Netzwerk.

Mit RPC o.ä. wirst Du Dich nicht beschäftigen müssen, da habe ich den 
Eindruck verrennst Du Dich in eine komplett falsche Richtung.

von Thierry S. (thierry_s)


Lesenswert?

Danke. Was meinst Du mit rc? könntest Du mir ein paar Möglichkeiten 
/Alternativen auflisten?

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nicht rc. sc.

sc wird in der Windows-Eingabeaufforderung aufgerufen:
1
c:\>sc
2
DESCRIPTION:
3
        SC is a command line program used for communicating with the
4
        NT Service Controller and services.
5
USAGE:
6
        sc <server> [command] [service name] <option1> <option2>...
7
8
        The option <server> has the form "\\ServerName"
9
        Further help on commands can be obtained by typing: "sc [command]"
10
        Commands:
11
          query-----------Queries the status for a service, or
12
                          enumerates the status for types of services.
13
          queryex---------Queries the extended status for a service, or
14
                          enumerates the status for types of services.
15
          start-----------Starts a service.
16
          pause-----------Sends a PAUSE control request to a service.
17
          interrogate-----Sends an INTERROGATE control request to a service.
18
          continue--------Sends a CONTINUE control request to a service.
19
          stop------------Sends a STOP request to a service.
20
          config----------Changes the configuration of a service (persistant).
21
          description-----Changes the description of a service.
22
          failure---------Changes the actions taken by a service upon failure.
23
          sidtype---------Changes the service SID type of a service.
24
          qc--------------Queries the configuration information for a service.
25
          qdescription----Queries the description for a service.
26
          qfailure--------Queries the actions taken by a service upon failure.
27
          qsidtype--------Queries the service SID type of a service.
28
          delete----------Deletes a service (from the registry).
29
          create----------Creates a service. (adds it to the registry).
30
          control---------Sends a control to a service.
31
          sdshow----------Displays a service's security descriptor.
32
          sdset-----------Sets a service's security descriptor.
33
          showsid---------Displays the service SID string corresponding
34
                          to an arbitrary name.
35
          GetDisplayName--Gets the DisplayName for a service.
36
          GetKeyName------Gets the ServiceKeyName for a service.
37
          EnumDepend------Enumerates Service Dependencies.
38
39
        The following commands don't require a service name:
40
        sc <server> <command> <option>
41
          boot------------(ok | bad) Indicates whether the last boot should
42
                          be saved as the last-known-good boot configuration
43
          Lock------------Locks the Service Database
44
          QueryLock-------Queries the LockStatus for the SCManager Database
45
EXAMPLE:
46
        sc start MyService

und gehört seit Windows XP zum Lieferumfang von Windows.

Für Dich also

sc \\server start Opcserver

von Thierry S. (thierry_s)


Lesenswert?

Hallo,
ich konnte das Problem inzwischen lösen, insofern dass ich die 
Datenpakete schicken konnten, die zeigleich den OPC-Server starten 
sollten. Damit ist das kommunikationsproblem erstmal gelöst.

Gibt es Möglichkeit das Steuerwort meines Servoreglers direkt aufzurufen 
und anzubinden, damit der Motor dabei angetrieben wird? Ich habe von 
einer sog. Einschlatreoutine gehört aber  weiß nicht genau was das ist.
Danke

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thierry S. schrieb:
> Gibt es Möglichkeit das Steuerwort meines Servoreglers direkt aufzurufen
> und anzubinden, damit der Motor dabei angetrieben wird?

Woher sollen wir wissen, was das sein soll?

von Thierry S. (thierry_s)


Lesenswert?

Es gibt sicherlich ein paar Elektronik-Füchse hier...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die gibt es ganz sicher, aber ... Du forderst die Glaskugeln jedenfalls 
sehr.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.