Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   OPC mit Kassl-Komponenten unter Windows 10 und tRichedit (https://www.delphipraxis.net/196706-opc-mit-kassl-komponenten-unter-windows-10-und-trichedit.html)

dravigi 11. Jun 2018 09:39

OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Hallo zusammen,

wir stellen aktuell unsere PCs von Windows 7 auf Windows 10 um.

Bei den Rechnern die mittels der Kassl-OPC-Komponenten auf eine SPS zugreifen, gibt es ein für uns nicht erklärbares Phänomen/Problem.

Sobald irgendwo im Projekt, auch in Bibliothek-Units, ein tRichedit eingebunden ist, kann keine Verbindung mehr zum OPC hergestellt werden.

Entfernt man das tRichedit funktioniert wieder alles wunderbar. (Getestet unter Delphi 2010 und Delphi 10.2 Tokyo).

Unter Windows-7 gibt es dieses Problem nicht.

Kann hier jemand weiter helfen, oder hat jemand ähnliche Probleme.

Grüße

Code:
var
  lclOPCGroup: TdOPCGroup;
  lclComputerName, lclServerName: string;
begin
  try
    dOPCCom.dOPCInitSecurity;
    dOPCServer := TdOPCServer.Create(self);
    lclComputerName := 'Computer.xyz'
    lclServerName :=  'Server.xyz'
    dOPCServer.ComputerName := lclComputerName;
    dOPCServer.ServerName :=  lclServerName;
    dOPCServer.OnDatachange := DoOPCServerDatachange;
    dOPCServer.Active := True;
    lclOPCGroup := dOPCServer.OPCGroups.Add('X');
    lclOPCGroup.UpdateRate := 20;
    Sleep(200);
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
    end;
  end;
end;

jobo 11. Jun 2018 11:52

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Was ist denn der Fehler?
Und habt Ihr mal versucht, die Richedit Kompo dynamisch einzubinden?
Globale Variablen / Sys Konstanten geprüft?

dravigi 11. Jun 2018 14:52

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Hallo,
also es kommt erstmal keine Fehlermeldung beim Create/Connect aber ich kann wenn ein Richedit auf der Form ist weder lesend noch schreibend auf den OPC zugreifen.
Das OnRefreshWTData-Event wird auch nicht ausgelöst.

Wenn ich das Richedit zur Laufzeit erzeuge funktioniert nur die Reihenfolge
1. OPC createn und Connecten
2. Richedit erzeugen
--> Hier bleibt die Connection auf den OPC erhalten, OnRefreshWTData wird ausgelöst.
Ist aber auch keine wirkliche Lösung. Da wir eine Standatisierte GUI für verschiedene Programme verwenden in der mehrere Richedits eingebunden sind.

Wenn ich zuerst das Richedit zur Laufzeit erzeuge und dann das OPC-Objekt Create und Connecte hab ich wieder das Problem.

Zitat:

Globale Variablen / Sys Konstanten geprüft?
Was soll ich hier genau überprüfen?


Was ich absolut nicht verstehe ist warum es auf keinem Windows-7 Rechner Probleme gibt. Läuft aktuell auf über 20 Win-7 Rechnern.

Und auf drei verschiedenen Windows-10 Rechnern läuft es nicht.

jobo 11. Jun 2018 15:46

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Zitat:

Zitat von dravigi (Beitrag 1404542)
Ist aber auch keine wirkliche Lösung...

Klar, es geht mehr darum, dem Fehler auf die Schliche zu kommen.

Zitat:

Zitat von dravigi (Beitrag 1404542)
Zitat:

Globale Variablen / Sys Konstanten geprüft?
Was soll ich hier genau überprüfen?

Ein Zusammenhang ist ja nicht offensichtlich, aber es müssen sich ja irgendwelche OS nahen Variablen, Konstanten überschneiden (Ich gehe mal davon aus, es geht um das gleiche Kompilat und keine Versionen die OS spezifisch erstellt wurden). Oder es werden irgendwelche Events gefressen. Um das rauszufinden, müsste man den Code auf Verwendung solcher OS Konstanten, globaler Variablen, Events prüfen.
Vielleicht sollte man das auch einfach mal beim Anbieter nachfragen.

hoika 11. Jun 2018 15:52

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Hallo,
macht ihr noch mal als das TRichEdit auf das Form zu packen,
irgendwelche Einstellungen im Object-Inspektor?

Im uses steht welche unit zuerst drin?
Tausche mal die Reihenfolge.

dravigi 12. Jun 2018 09:35

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Zitat:

Zitat von hoika (Beitrag 1404551)
Hallo,
macht ihr noch mal als das TRichEdit auf das Form zu packen,
irgendwelche Einstellungen im Object-Inspektor?

Nein keinerlei Änderungen im Objektinsptekor.
Auch in einem neu erstellten Mini-Testprojekt, mit auschließlich einer Unit, einem Button und einem Memo zur Visualisierung,
einem erzeugten OPC-Objekt mit einer OPC-Group und nur einem OPC-Item tritt der Fehler auf sobald ich zusätzlich ein tRichedit auf die Form packe.

Zitat:

Im uses steht welche unit zuerst drin?
Tausche mal die Reihenfolge
Habe ich gerade probiert, brachte leider auch keinen Erfolg.


Beim Entwickler haben wir als erstes angefragt.
Nur ist diese Anfrage beim Entwickler der Komponenten seid über 3 Wochen leider unbeantwortet.

hoika 12. Jun 2018 09:40

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Hallo,
sind die irgendwelche WM_USER + X Messages definiert?
Vielleicht nehmen die sich gegenseitig die Nachrichten weg,
oder die Nachrichten-Id ist doppelt (siehe jobo).

Passiert das auch unter anderen Betriebssystemen?
(Mit dem neuen Mini-Test-Projekt testen, nicht mit der kompletten Exe).

Hast Du es mal mit einer der OPC Explorer (Google) probiert?

Funktioniert Dein Mini-Test-Programm ohne RichEdit unter Windows 10?

dravigi 13. Jun 2018 09:34

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Hallo,

erstmal danke an alle.

Gestern Abend hat sich der Entwickler bei mir gemeldet. Er konnte das Problem nachstellen und es auch teilweise lösen.

Das Problem ist folgendendes.
Sobald unter Windows 10 (64Bit) ein tRichedit in eingebunden ist schlägt folgende Funktion fehl.
Code:
dOPCCom.dOPCInitSecurity;
Warum konnte der Entwickler auch nicht sagen.

Die Funktion dOPCCom.dOPCInitSecurity macht folgendes
Code:
function dOPCSecurityInit: HResult;
const
  RPC_C_AUTHN_LEVEL_NONE = 1;
  RPC_C_IMP_LEVEL_IMPERSONATE = 3;
  EOAC_NONE = 0;
begin
  // this is for DCOM:
  // without this, callbacks from the server may get blocked, depending on
  // DCOM configuration settings
    result := CoInitializeSecurity(
    nil,                   // points to security descriptor
    -1,                    // count of entries in asAuthSvc
    nil,                   // array of names to register
    nil,                   // reserved for future use
    RPC_C_AUTHN_LEVEL_NONE, // the default authentication level for proxies
    RPC_C_IMP_LEVEL_IMPERSONATE,// the default impersonation level for proxies
    nil,                   // used only on Windows 2000
    EOAC_NONE,             // additional client or server-side capabilities
    nil                    // reserved for future use
    );
end;
Die Funktion CoInitializeSecurity(aus der Delphi-Lib ActiveX) hat die Aufgabe folgende Werte zu setzten:
Authentication Level: None
Impersonation level : Impersonate

Man kann diese Werte mit Hilfe des Windows-Programms DCOMCNFG auch manuell ändern

In einem deutschen Windows:
Unter Komponentendienste/Computer/Arbeitsplatz --> Rechte Maustaste auf Eigenschaften --> Tab Standardeigenschaften
und hier unter DCOM-Kommunikation folgdenes ändern

Standardauthentifizierungsebene = Keine
Standardidentitätswechselebene = Identität annehmen

Sobald ich hier die DCOM-Einstellungen ändere funktioniert die OPC-Verbindung, wie sie soll.

Das ganze hat nur folgendes Problem. Nach einem Neustart passiert folgendes:
Die Taskleiste funktioniert dann nicht mehr. Wenn man unten links auf das Windows-Symbol klickt passiert nichts, eigentlich sollte ja die Start-Leiste ausklappen.
Windows-Taste reagiert auch nicht. Rechtsklick auf einen Ordner in der Taskleiste öffnet kein Kontextmenü….

Also bisher auch nicht zufriedenstellend, da zwar unsere Produktionssofware mit Anbindung an die SPS normal läuft, aber Windows ansich, sich nicht mehr richtig bedienen lässt.

Uwe Raabe 13. Jun 2018 09:49

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Im MSDN findet man in der Beschreibung zu CoInitializeSecurity folgende Bemerkung:
Zitat:

Passing pSecDesc as NULL is strongly discouraged.
Ich empfehle hier, sich die Beschreibung genau anzusehen und die Parameter so zu setzen, daß exakt das gewünschte Ergebnis erreicht wird, aber eben auch nicht mehr.

dravigi 13. Jun 2018 10:11

AW: OPC mit Kassl-Komponenten unter Windows 10 und tRichedit
 
Update:
Der Entwickler hat mir nun eine kleine Unit zum setzen der DCOM einstellung zur verfügung gestellt, mit der die Probleme behoben sind.

Damit kann ich die DCOM-Einstellungen in Windows 10 auch wieder auf die Standardeinstellungen setzten und die Probleme mit dem Startmenü etc. treten nicht mehr auf.

Auch hier nochmals Vielen Dank an Herrn Kassl für die gute Unterstützung.

Mein Problem scheint somit erstmals gelöst :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz