SPSstudent
Level-1
- Beiträge
- 61
- Reaktionspunkte
- 1
-> Hier kostenlos registrieren
Ich habe ein Problem mit einem Programm eines Kommilitonen, das Werte aus der Beckhoff SPS TwinCAT ausliest.
Vielleicht ist das hier nicht ganz das richtige Forum, da es wohl eher ein Problem mit C# ist, aber vielleicht arbeitet hier ja auch jemand damit
Die ADS-Verbindung scheint zu funktionieren, denn die C#-Variable distance hat den Wert der SPS-Integervariable Hoehe.
Der Array adsInVariables enthält allerdings nur FALSE-Einträge, obwohl einige SPS-Variablen TRUE sind. Das seltsame ist: adsInVariables[0,0] ist als einziger Eintrag TRUE, obwohl BoolVariable01 FALSE ist.
Für mich sieht es so aus, als liegt der Fehler bei der Verwendung des BinaryReader.
Kann mir jemand sagen, ob nachfolgender C#-Code (insbesondere die Verwendung des BinaryReader) korrekt ist?
Vielleicht ist das hier nicht ganz das richtige Forum, da es wohl eher ein Problem mit C# ist, aber vielleicht arbeitet hier ja auch jemand damit
Die ADS-Verbindung scheint zu funktionieren, denn die C#-Variable distance hat den Wert der SPS-Integervariable Hoehe.
Der Array adsInVariables enthält allerdings nur FALSE-Einträge, obwohl einige SPS-Variablen TRUE sind. Das seltsame ist: adsInVariables[0,0] ist als einziger Eintrag TRUE, obwohl BoolVariable01 FALSE ist.
Für mich sieht es so aus, als liegt der Fehler bei der Verwendung des BinaryReader.
Kann mir jemand sagen, ob nachfolgender C#-Code (insbesondere die Verwendung des BinaryReader) korrekt ist?
Code:
// init
TcAdsClient tcClient = new TcAdsClient();
int handle;
adsInVariables = new bool[5, 8];
distance = 0;
AdsStream dataStream = new AdsStream(40);
BinaryReader binReader = new BinaryReader(dataStream);
// Verbindung herstellen
tcClient.Connect(801);
// SPS-Variablen in ADS-Stream schreiben
dataStream.Position = 0;
handle = tcClient.CreateVariableHandle(".BoolVariable01");
tcClient.Read(handle, dataStream);
tcClient.DeleteVariableHandle(handle);
handle = tcClient.CreateVariableHandle(".BoolVariable02");
tcClient.Read(handle, dataStream);
tcClient.DeleteVariableHandle(handle);
[...]
handle = tcClient.CreateVariableHandle(".BoolVariable40");
tcClient.Read(handle, dataStream);
tcClient.DeleteVariableHandle(handle);
// SPS-Variablenwerte von ADS-Stream in Array kopieren
dataStream.Position = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 8; j++)
adsInVariables[i, j] = binReader.ReadBoolean();
}
// Integer-SPS-Variable in ADS-Stream schreiben
dataStream.Position = 0;
handle = tcClient.CreateVariableHandle(".Hoehe");
tcClient.Read(handle, dataStream);
tcClient.DeleteVariableHandle(handle);
// SPS-Integer-Variablenwert von ADS-Stream in Integervariable kopieren
dataStream.Position = 0;
distance = binReader.ReadInt16();
// Verbindung schließen
tcClient.Dispose();