Autor Beitrag
IsabelleZimmermann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 16.10.18 14:38 
Hallo nochmal,

ich habe jetzt versucht Dateien zum Verbindungsaufbau einer SPS in mein Projekt einzubauen.
Die Dateien waren ursprünglich in Visual Basic. Also habe ich sie übersetzt in C#.

Jetzt habe ich eine Datei, die heißt "Hauptformular.cs" und in ihr sind ein paar Funktionen zum Loggen der SPS-Daten, zum Lesen von Daten aus der SPS, zum Schreiben der Daten in die SPS und zur Kommunikation mit der SPS, hier vor allem SPS_Polling().

In dieser Datei möchte ich die Bibliothek "libnodave" einbinden und die Klasse "Namespace.Klassenname" Klasse_SPS_Verbindung1.Klasse_SPS_Verbindung_x.

Es kommt hier aber die Fehlermeldung "Der Typ- oder Namespacename "Klasse_SPS_verbindung1" konnte nicht gefunden werden(möglichweise fehlt eine Using Direktive oder ein Assembly-Verweis).

Die gleiche Fehlermeldung kommt bei using static libnodave;

Ich habe bereits nach dem Problem gegoogelt, bin aber nicht weiter gekommen, weil es weder an den Verweisen liegen kann noch an der using Direktive.

Ich hoffe, dass mir hier weiter geholfen werden kann.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 16.10.18 15:30 
Schau dir am besten mal über den "Object Browser" im Visual Studio die Assembly an. Dort sollte dann die Klassen und deren Namensbereiche aufgelistet sein.

Wenn, dann muß es selbstverständlich nur using libnodave; heißen (also ohne static).
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 16.10.18 15:45 
Wie komme ich denn zum "Object Browser"? Ich sehe nur den Projektmappen-Explorer in der rechten Fensterseite.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 16.10.18 15:49 
Du stellst dich aber ein wenig unbeholfen an. Schau mal in das Menü "Ansicht" (engl. "View").
Und Internet-Suchmaschinen gibt es auch. ;-)
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 16.10.18 15:50 
Ich sehe es gerade. Bei der Klasse_SPS_Verbindung ist kein Pfeil zum Aufklappen, wo die Klasse angezeigt wird. Deshalb kann die Klasse auch nicht gefunden werden.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 16.10.18 16:08 
Hab jetzt auch im Objektkatalog geschaut. Dort sind nur 3 Namespaces. Für die Properties für Program.cs mit Namespace und Objekt und für Form1.cs, welches Form1.Designer.cs enthält.

Die Frage ist nun, wie ich das Problem lösen kann.
Ich kann aber nochmal im Internet suchen, falls ich mich wieder zu unbeholfen anstelle.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 16.10.18 16:11 
Zitat:
Klasse_SPS_Verbindung1.Klasse_SPS_Verbindung_x


Das scheint ja was von dir zu sein. Zeig uns doch am besten mal wie du diese Klassen definiert hast. Dann können wir dir vermutlich auch sagen warum das nicht funktioniert.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 16.10.18 16:40 
Ich hoffe, ein screenshot reicht aus, siehe Anhang.

Hab jetzt herausgefunden, dass bei Buildvorgang (Eigenschaften der Datei im Projektmappen-Explorer) bei Buildvorgang nur "Inhalt" stand, aber nicht "Kompilieren".

Das habe ich jetzt zumindest schon mal geändert.
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 16.10.18 17:38 
Kompiliert denn jetzt dein Projekt?

PS: Du solltest dir bessere Namen überlegen - einen Namensbereich Klasse_... zu nennen, ist sehr verwirrend.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 16.10.18 18:55 
Ja das stimmt. Ich werde den Namensbereich umbenennen.
Mein Projekt versucht zu kompilieren aber es sind noch Fehler im Quellcode.

Ausserdem tritt der Fehler noch auf dass die Bibliothek libnodave nicht gefunden wird.
Aber ich kann sie leider auch nicht zu den Verweisen hinzufügen weil sie wahrscheinlich keine Assembly Datei ist.

Morgen versuch ich noch die restlichen Fehler weg zu bekommen.Das meiste sind aber solche Fehler dass eine Funktion oder ein Variablenname nicht gefunden wird.
Die sind dann in einer anderen Datei. Aber diese Fehler bekommen ich weg.
Ausser wenn sich der Fehler auf die eine Bibliothek bezieht. Den Fehler hab ich noch nicht weg bekommen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 17.10.18 09:33 
Laut Siemens Logo! C# und LibNoDave – Teil 1: Verbindung herstellen gibt es eine "libnodave.net.dll", welche du als Verweis hinzufügen mußt.

Und der Source-Code steht unter libnodave zu Verfügung (und im "Dot.NET"-Ordner befindet sich diese Assembly).
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 17.10.18 10:55 
Danke.
Weißt du auch, ob es in der Assembly libnodave.net.dll eine Methode int daveGetS16(byte[]) bzw. int daveGetS32(byte[]) gibt?

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 17.10.18 11:25 
Nein, aber schau doch einfach mit dem "Object Browser" nach.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 17.10.18 11:29 
Schau doch einfach nach. TH69 hat dir das Repository mit dem Sourcecode verlinkt und der bereits hier genannte Object Browser zeigt dir auch das Klassenmodel in der Assembly :gruebel:

Und nein in der Form gibt es die Methoden da nicht. Du scheinst dich an der API der nicht gemanagten (nativen) Dll zu orientieren die kannst du so nicht direkt in der gemanagten Assembly für DOT.Net finden da das ja ein vollständig Objektorientiertes System ist. Heißt das das in irgendeiner Klasse steckt. Hier ist die Entsprechung vermutlich die getS16()/getS32() Methoden in der daveConnection Klasse. Falls du dich an Beispielen für die native Dll lang hangelst werden die dir nicht direkt helfen. Schau lieber auf Beispiele die auch die Assembly für DOT.Net benutzen.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 17.10.18 13:50 
Ok, mach ich.
Hab schon einiges gefunden in daveConnection und daveInterface.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mo 22.10.18 09:07 
Hallo,

jetzt habe ich eine neue Fehlermeldung. Allerdings erst nach dem Kompilieren wenn ich in dem Windows-Fenster versuche die Verbindung zu SPS zu starten, siehe screenshot.

Ich hab auch schon gegoogelt nach dem Fehler. In einem Forum stand, dass die Bibliothek "libnodave.net.dll" in den System32-Ordner und in den Ordner SysWOW64 rein kopiert werden soll. Das hab ich gemacht, aber ohne Erfolg.
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 22.10.18 09:42 
Das System findet die native Lib "libnodave.dll" (oder eine deren anderen abhängigen Libs) nicht - diese ist eine andere als die .NET-Assembly "libnodave.net.dll".

In der Eingabeaufforderung (Konsole) kannst du mit dem Befehl "where libnodave.dll" abfragen, ob diese DLL im Suchpfad ist.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mo 22.10.18 10:36 
Jetzt habe ich die die native Lib libnodave.dll in meinen Projektordner kopiert.
Und es erscheint die Meldung "Es wurde versucht eine Datei mit falschem Format zu laden".

Ist dies eine 32 Bit Datei? Unter Projekteigenschaften habe ich 64 Bit-CPU ausgewählt.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mo 22.10.18 10:55 
Aber wenn ich auf "32 Bit bevorzugen" umschalten und Any CPU, bekomme ich an anderer Stelle die gleiche Fehlermeldung, weil ich sapnco.dll unter Verweisen habe und diese ist 64 Bit.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 22.10.18 11:08 
Zitat:
Ist dies eine 32 Bit Datei? Unter Projekteigenschaften habe ich 64 Bit-CPU ausgewählt.


Das weißt du eher als wir.

Zitat:
Aber wenn ich auf "32 Bit bevorzugen" umschalten und Any CPU, bekomme ich an anderer Stelle die gleiche Fehlermeldung, weil ich sapnco.dll unter Verweisen habe und diese ist 64 Bit.


Finde raus in welcher Bittigkeit deine nativen Dlls sind. Als du die runtergeladen hast wurdest du sicher gefragt ob du die 32 oder 64 bit Version willst bzw. es wurde dir gesagt was das für eine Bittigkeit ist. Und sobald du das weißt solltest du da wo du "Any CPU" eingetragen hast explizit die Bittigkeit eintragen die die du auch benutzt.

Wenn alles 64Bit ist solltest du also auch deine Startassembly in der Solution auf 64Bit setzen.