Problem mit C#-BinaryReader in Verbindung mit einem Beckhoff ADS-Stream

SPSstudent

Level-1
Beiträge
61
Reaktionspunkte
1
Zuviel Werbung?
-> 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?

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();
:confused:
 
Zurück
Oben