Zugriff auf Prozessabbild eines BC9050 in C#

kampi

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen,
ich bin neu hier und auch noch nicht besonders bewandert mit dem Thema Beckhoff. Ich hoffe ich drücke mich verständlich aus und ihr könnt mir helfen. Zu meinem Problem:
Ich habe eine Beckhoff BC9050 mit mehreren Klemmen, die ich mit C# mittels TwinCatADS auslese und schreibe. Das klappt auch alles ganz hervorragend. Leider schaffe ich es mit dem "Read" beim Auslesen immer nur eine Variable gleichzeitig auszulesen. Ich müsste aber irgendwie das gesamte Prozessabbild auslesen können, um auf einen Schlag alle, zu dem Zeitpunkt aktuellen, Werte zu haben. Sonst bekomme ich nämlich falsche Ergebnisse, da ich meherer Counter verwende und diese ja, wenn ich sie nacheinander per "Read" auslese, weiterlaufen und ich so keine genauen Berechnungen machen kann.
Gibt es da irgendeine Möglichkeit? Also sozusagen ein Snapshot des Prozessabbildes?

Hoffe ihr habt mich verstanden. Sonst muss ich noch mal versuchen es irgendwie verständlicher auszudrücken.

Schon mal vielen Dank für Rückmeldungen im Voraus!!

Mfg KAMPI
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort.
Das sieht doch schon mal brauchbar aus :D
Ein kleines Problem könnte sein, dass ich nicht mit Handles, etc. arbeite, sondern bisher das "Read" direkt mit dem Index/Offset/Datentyp der zu lesenden Variable benutze. Hoffe, dass sich das Beispiel auch in dieser Form adaptieren lässt.

Mfg KAMPI
 
Wenn du dir das Beispiel genau ansiehst, wirst du sehen das genau das dort gemacht wird.
Die Handles sind nur ein Zwischenschritt mit denen dann Index, Offset und Länge der einzelnen Vars ermittelt wird.
Lässt du diesen Schritt weg, bist du da wo du hin möchtest....
 
Ja, habe ich in der Zwischenzeit auch gesehen ;)
Werde es später mal ausprobieren.

Vielen Dank noch mal!

Mfg KAMPI
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So habe es mal ausprobiert. Leider bekomme ich beim "ReadWrite" Befehl einen Errors "Ads-Error 0x33180701". Darüber habe ich aber nichts im Netz gefunden.
Hat jemand eine Ahnung, was das sein könnte?

Danke für eure Hilfe im Voraus.

Mfg KAMPI
 
Hallo zusammen,
nach einer kleinen Pause beschäftige ich mich wieder mit dem Thema.
Bin jetzt (vielleicht) einen Schritt weiter. Jetzt bekomme ich bei dem unteren Beispiel den Fehler "ADS Error 0x710 - Symbol could no be found". Aber die Varible gibt es. Was übersehe ich da?

Code:
[COLOR=blue]try[/COLOR]          
{
[COLOR=green]// Connect to PLC[/COLOR]                
adsClient = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]TcAdsClient[/COLOR]();                
adsClient.Connect([COLOR=#a31515]"172.16.1.128.1.1"[/COLOR], 800);                 [COLOR=green]
// Fill structures with name and size of PLC variables[/COLOR]                
variableNames = [COLOR=blue]new[/COLOR] [COLOR=blue]string[/COLOR][] { [COLOR=#a31515]"MAIN.TimeCounterMaster"[/COLOR] };                
variableLengths = [COLOR=blue]new[/COLOR] [COLOR=blue]int[/COLOR][] { 4 };                 
[COLOR=green]// Write handle parameter into structure[/COLOR]                
variables = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]VariableInfo[/COLOR][variableNames.Length];                
[COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i < variables.Length; i++)                
{                    
variables[i].indexGroup = ([COLOR=blue]int[/COLOR])[COLOR=#2b91af]AdsReservedIndexGroups[/COLOR].SymbolValueByHandle;                    
variables[i].indexOffset = adsClient.CreateVariableHandle(variableNames[i]);  <-----------Hier kommt die Exception                    
variables[i].length = variableLengths[i];                
}            
}            
[COLOR=blue]catch[/COLOR] ([COLOR=#2b91af]Exception[/COLOR] err)            
{                [COLOR=#2b91af]
MessageBox[/COLOR].Show(err.ToString());                
adsClient = [COLOR=blue]null[/COLOR];            
}

Vielen Dank für eure Anregungen im Voraus.

Mfg KAMPI
 
Zuletzt bearbeitet:
Zurück
Oben