libnodave und .NET

Rio

Member
Beiträge
6
Punkte Reaktionen
2
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Zusammen,
ich habe eine kleine HMI in C# geschrieben um Daten aus einer "S7 314C-2 PN/DP" darzustellen. Zur Kommunikation benutze ich libnodave-0.8.4.6 auf einem Windows 7 Professional 32-Bit System. Die Daten werden jede Sekunde geholt und aktualisiert. Die Interaktion Winforms <> Datenmanager funktioniert auch ganz gut.
Allerdings fliegt mir die Anwendung nach etwa 10-15 Minuten auseinander mit folgenden Fehlermeldungen:
1.:
System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass


anderer Speicher beschädigt ist.
bei libnodave.daveConnection.daveDisconnectPLC(IntPtr dc)
bei libnodave.daveConnection.disconnectPLC() in c:\Users\Computer\BUGGIE\Automation\VisuaDotNet\SharpHMI\DATA\DRIVER\libnodave.net.cs:Zeile 346.
bei SharpHMI.DATA.CONTROLLER.S7.NODAVE.LanCPU.__S7LanClose() in c:\Users\Computer\BUGGIE\Automation\VisuaDotNet\SharpHMI\DATA\CONTROLLER


\S7\NODAVE\LanCPU.cs:Zeile 99.
bei SharpHMI.DATA.CONTROLLER.S7.NODAVE.BaseCPU.Read() in c:\Users\Computer\BUGGIE\Automation\VisuaDotNet\SharpHMI\DATA\CONTROLLER\S7\NODAVE


\BaseCPU.cs:Zeile 80.
bei SharpHMI.DATA.Manager.__readController(Object o) in c:\Users\Computer\BUGGIE\Automation\VisuaDotNet\SharpHMI\DATA\Manager.cs:Zeile 47.
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart(Object obj)

oder 2.:
System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
bei libnodave.pseudoPointer.daveFree(IntPtr p)
bei libnodave.pseudoPointer.Finalize() in c:\Users\Computer\BUGGIE\Automation\VisuaDotNet\SharpHMI\DATA\DRIVER\libnodave.net.cs:Zeile 232.



Es haengt also an der c-lib bzw. an der Speicherverwaltung .NET<>Native. Hat von euch evtl jemand eine Idee wie man das Problem fixen kann bzw. was man "kosten neutral" anstelle von libnodave.dll benutzen kann?

Vielen dank im voraus
Gruss Rio
 

mogel

Well-known member
Beiträge
67
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Moin,

System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. ...
beim letzten Versuch mit libnodave auf etwas zuzugreifen ist was schief gelaufen. Darüber wurdest Du von libnodave aber schon informiert (Stichwort "Rückgabewert"). Einfach die Verbindung als abgebrochen deklarieren und neu aufbauen.

hand, mogel

BTW: bei mir war es immer ein Timeout - UMTS ist nicht so berauschend in Berlin
 
OP
Rio

Rio

Member
Beiträge
6
Punkte Reaktionen
2
Hallo,
danke fuer die schnellen Antworten.

@ Jochen Kuehner:
Ich war so frei und habe mir die "libnodave_jfkmod(64).dll" und "libnodave_jfkmod.net.cs" aus der "DotNetSiemensPLCToolBoxLibrary" heraus kopiert und anstelle der original "libnodave" Dateien benutzt. Funktioniert bis jetzt (7394+s) super :D danke.

@ mogel:
Die Idee hatte ich auch schon und habe deshalb bei jedem Verbindungsaufbau neue Instanzen angelegt und nach Beendigung entsprechend verworfen. Hatte aber nicht den gewuenschten Erfolg :(

Gruss Rio
 

steim18

Member
Beiträge
9
Punkte Reaktionen
0
hallo zusammen habe mal eine frage zu .net
ich bin ein totaler anfänger in der . net sprache und weis leider nicht wie ich hierbei vorgehen soll. alle anleitungen, die ich finde sind für mich nicht zu gebrauchen. darum bitte ich hier um hilfe. kann mir jemand mal ein beispielprojekt senden mit eiem einfachen zugriff auf einen merker über iso on tcp und das mit der libnodave.net.dll ? oder gibts da ein buch, dass man kaufen kann.
ich benötige dies, um einzelne wörter aus der Cpu 315 schreiben und lesen zu können.
vielen dank im voraus
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Zuviel Werbung?
->Hier kostenlos registrieren
hallo zusammen habe mal eine frage zu .net
ich bin ein totaler anfänger in der . net sprache und weis leider nicht wie ich hierbei vorgehen soll. alle anleitungen, die ich finde sind für mich nicht zu gebrauchen. darum bitte ich hier um hilfe. kann mir jemand mal ein beispielprojekt senden mit eiem einfachen zugriff auf einen merker über iso on tcp und das mit der libnodave.net.dll ? oder gibts da ein buch, dass man kaufen kann.
ich benötige dies, um einzelne wörter aus der Cpu 315 schreiben und lesen zu können.
vielen dank im voraus

schau dir mal meine connectionnlib an, da sind die verschiedensten beispielprogramme und auch ein ganz einfaches csharp beispiel dabei!
 

steim18

Member
Beiträge
9
Punkte Reaktionen
0
Hallo jochen. Vielen dank für di schnelle antwort. Ja deine biblithek habe ich gesehen. Nur verwendest du doch eine eigene dll und mit diesen aufruffen funkt das nicht. Wie gesagt bin totaler anfänger in .net programmierung. Ich verstehe das nicht so genau wie ich die libnodave.net dll in ein projekt einbinden muss und wie dann die verbindung gemach wird. Das kann doch nich so schwer sein, ich suche wahrscheinlich am falschen ort. Vielen dank schon mal im voraus. Gruss tinu
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Also meie Bibliothek baut auch auf libnodave auf, verwendet aber eine modifizierte Version die um Routing und div weitere Kleinigkeiten erweitert wurde!
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Zuviel Werbung?
->Hier kostenlos registrieren
Da du aber auch totaler Anfängert bist, empfehle Ich dir halt meine lib, da du dich um vieles was du bei libnodave machen musst nicht mehr selbst kümmern musst:

z.B. Verbindungskonfiguration:

Code:
[COLOR=#2B91AF][FONT=Consolas]Configuration[/FONT][/COLOR][COLOR=black][FONT=Consolas].ShowConfiguration([/FONT][/COLOR][COLOR=#A31515][FONT=Consolas]"SimpleCSharpDemonstrationConnection"[/FONT][/COLOR][COLOR=black][FONT=Consolas], [/FONT][/COLOR][COLOR=blue][FONT=Consolas]true[/FONT][/COLOR][COLOR=black][FONT=Consolas]);[/FONT][/COLOR]

Auslesen einer Variable

Code:
myConn = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]PLCConnection[/COLOR]([COLOR=#a31515]"SimpleCSharpDemonstrationConnection"[/COLOR]);
myConn.Connect();
[COLOR=blue]var[/COLOR] tag = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]PLCTag[/COLOR]([COLOR=#a31515]"MW88"[/COLOR]);
myConn.ReadValue(tag);
 

steim18

Member
Beiträge
9
Punkte Reaktionen
0
Hallo jochen sorry dass ich dich so oft störe, aber habe mir die Codes jetzt geholt. und leider hat der Code ZipHelper.cs gibt mir 11 fehler an. was muss ich da machen? und wenn ich dann keine Fehler mehr habe kann ich das projekt irgendwie beenden, damit ich deine .dll datei habe? weis nicht wie ich das machen muss. verwende visual studio C# und keine ahnung wie das geht. danke gruss Tinu
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Hallo jochen sorry dass ich dich so oft störe, aber habe mir die Codes jetzt geholt. und leider hat der Code ZipHelper.cs gibt mir 11 fehler an. was muss ich da machen? und wenn ich dann keine Fehler mehr habe kann ich das projekt irgendwie beenden, damit ich deine .dll datei habe? weis nicht wie ich das machen muss. verwende visual studio C# und keine ahnung wie das geht. danke gruss Tinu

Kann ich mir im Moment nicht erklären, da bei mir alles Compiliert! Welche Visual Studio Version? Welches .NET Framework??

Du kannst aber auch die Dateien aus dem Ordner compiled verwenden...
 

steim18

Member
Beiträge
9
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Bild.jpg Hallo jochen sorry dass ich erst jetzt schreibe hatte leider keine zeit. habe deine lib. noch mals kopiert jetzt krieg ich nur noch diese Fehler(Bild). weis nicht was ich damit anfangen kann. Vieleicht sagt dir das mehr. ich benutze net frame 4.5 und visual studio Express 2012 für Desktop. Danke schon mal im voraus gruss steim18
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Anhang anzeigen 19939 Hallo jochen sorry dass ich erst jetzt schreibe hatte leider keine zeit. habe deine lib. noch mals kopiert jetzt krieg ich nur noch diese Fehler(Bild). weis nicht was ich damit anfangen kann. Vieleicht sagt dir das mehr. ich benutze net frame 4.5 und visual studio Express 2012 für Desktop. Danke schon mal im voraus gruss steim18

Findet er denn die SharpZip dll nicht? Schau mal unter References...
 

steim18

Member
Beiträge
9
Punkte Reaktionen
0
Bild1.jpg Also danke für den Tip habe eine neue sharp zip lib heruntergeladen jetzt funktionierts, jetzt habe ich ein neues problem und auch da keine Ahnung was ich bei diesem Fehler machen muss. gruss steim18
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Zuviel Werbung?
->Hier kostenlos registrieren
Anhang anzeigen 19956 Also danke für den Tip habe eine neue sharp zip lib heruntergeladen jetzt funktionierts, jetzt habe ich ein neues problem und auch da keine Ahnung was ich bei diesem Fehler machen muss. gruss steim18

Keine Ahnung warum dieser Fehler bei dir kommt, bei mir compilierts unter .NET4 und 4.5! Warum musst du überhaupt die SharpZipLib runterladen? Die ist doch in meinem CodePlex Projekt dabei! Woher hast du denn mein Quellcode, lad doch einfach mal alles!
 

steim18

Member
Beiträge
9
Punkte Reaktionen
0
Ok jetzt funktionierts habe deine lib noch mals neu heruntergeladen und jetzt funktionierts. habe etwas falsch verstanden. kann jetzt compilieren. noch eine frage zum verwenden deiner lib muss ich jetzt nur noch eine windows form anwendung hinzufügen oder sonstwas. bin ich da richtig informiert? gruss steim18
 
Zuletzt bearbeitet:

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Ok jetzt funktionierts habe deine lib noch mals neu heruntergeladen und jetzt funktionierts. habe etwas falsch verstanden. kann jetzt compilieren. noch eine frage zum verwenden deiner lib muss ich jetzt nur noch eine windows form anwendung hinzufügen oder sonstwas. bin ich da richtig informiert? gruss steim18

Schau doch mal in die Solution... Sind einige Beispielanwendungen dabei!
Darauf achten das das Programm als X86 compiliert wird! Die 64 Bit DLL von libnodave funktioniert noch nicht!
 
Oben