Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 9 von 21 ErsteErste ... 789101119 ... LetzteLetzte
Ergebnis 81 bis 90 von 207

Thema: 840D sl NCU Variablen und Antriebsparameter lesen/schreiben

  1. #81
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wobei ich mir hier nicht sicher bin, wie ich korrekter weise eine Float-Zahl aus dem Hex-Wert im Byte-Puffer bekommen kann
    in Buff steht (bis auf manchmal Endian-Verdreht exakt die Daten die man im Wireshark-Log sehen kann)

    also kommst du an einen 32bit-float mit

    Code:
    float value = *(float*)pRWNCK->Buff;


    die 2 Fehler mit mehreren Variablen lesen oder mit dem vorher was anderes lesen sind echt komisch - leider habe ich keine NC hier um das mal zu probieren
    ich probier mal uebers Wochenende Testcode von mir einzustellen damit kannst du dann mal ein Vergleichstest machen



  2. Folgender Benutzer sagt Danke zu LowLevelMahn für den nützlichen Beitrag:

    st_rupp (08.01.2016)

  3. #82
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Ist es vielleicht nicht erlaubt, in einer Anfrage Daten aus unterschiedlichen Areas zu lesen?
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  4. #83
    Registriert seit
    10.05.2005
    Beiträge
    1.996
    Danke
    220
    Erhielt 233 Danke für 204 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Ist es vielleicht nicht erlaubt, in einer Anfrage Daten aus unterschiedlichen Areas zu lesen?
    In einem Auftrag (z.b. von einer PLC-Steuerung) dürfen in einem Auftrag nur NCK gelesen werden.
    Im nächsten Auftrag können dann die Antriebsdaten gelesen werden.

    Gemischter Betrieb war bei mir NICHT möglich !
    Steuerung war 840pl FW 6.3.28

    Ich denke, das könnte das Problem sein ! ?
    Karl

  5. #84
    Registriert seit
    17.11.2015
    Beiträge
    50
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Den Gedanken mit der gemischten Abfrage von NCK- und Drive-Variablen hatte ich auch schon.. Komisch, eigentlich sollte das doch keinen Unterschied machen da ja auch die Drive-Variablen über die NCK abgefragt werden.
    Ich dachte der Sinn der NCKReadMixEX-Funktion wäre ja gerade mehrere Variablen aus unterschiedlichen Bereichen auf einmal zu lesen..??!
    Aber das erklärt noch nicht warum ich in einem Aufruf nicht mehrere Antriebsparameter (Gleiche Area, gleicher Block, nur andere Unit) lesen kann. Es kommt zwar keine Fehlermeldung aber falsche Werte..

    Noch mal deutlich: Ich lese die Daten der Antriebe aus der NCK (Bereich eNCK_FeedDrives bzw. eNCK_MainDrives / Block M) unter Verwendung der NCKReadMixEx-Funktion, NICHT direkt aus den Antrieben selbst!
    Die Verbindung besteht nur per Ethernet zur NCU -> Slot 3 (NCK), keine Verbindung zu den Antrieben!
    Geändert von st_rupp (08.01.2016 um 18:12 Uhr)

  6. #85
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    Den Gedanken mit der gemischten Abfrage von NCK- und Drive-Variablen hatte ich auch schon.. Komisch, eigentlich sollte das doch keinen Unterschied machen da ja auch die Drive-Variablen über die NCK abgefragt werden.

    die NC-Kommunikation scheint da nicht so homogen wie die PLC-Kommunikation zu sein, da gibt es hin und wieder mal kleine Einschränkungen - das könnte so eine sein, auch wenn nur ueber die NC kommuniziert wird


    Ich dachte der Sinn der NCKReadMixEX-Funktion wäre ja gerade mehrere Variablen aus unterschiedlichen Bereichen auf einmal zu lesen..??!

    AGLink arbeitet so wie ich das sehe sehr nah an der Protokollschicht - damit man damit z.B. auch performante OPC-Server usw. implementieren oder andere Besonderheiten des Protokolls nutzen kann
    und beim PLC-Protokoll gibt es glaube ich keine solchen Ausnahmen


    Aber das erklärt noch nicht warum ich in einem Aufruf nicht mehrere Antriebsparameter (Gleiche Area, gleicher Block, nur andere Unit) lesen kann. Es kommt zwar keine Fehlermeldung aber falsche Werte..
    Ich bin mir auch noch nicht sicher wo der Fehler herkommt - daher habe ich mal ein kleines Testprogramm angehaengt - C/C++ mit Solution fuer VS2010 - ansonsten einfach die main.cpp kompilieren
    - assert wenn ein wichtiger Fehler auftritt, und Ausgabe aller Werte, mit deinen 4 Variablen und den 3 Tests

    leider konnte ich es nicht an einer NC testen weile ich gerade keine im Zugriff habe - aber wenn es wieder so weit ist würde ich auch gerne solche Fehler wie bei dir auftreten vermeiden

    Zip-Update:
    Noch eine Prüfung+Ausgabe fuer falsche Variablenkonfiguration eingebaut, Ausgabe der Werte nur wenn kein Fehler in der Variable
    Angehängte Dateien Angehängte Dateien
    Geändert von LowLevelMahn (10.01.2016 um 10:35 Uhr)

  7. Folgender Benutzer sagt Danke zu LowLevelMahn für den nützlichen Beitrag:

    st_rupp (11.01.2016)

  8. #86
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    @st_rupp

    Hoffe du bekommst mein Beispiel ohne Probleme zum laufen und kannst du bitte bei Source-Änderungen das ganze auch als Zip anhängen?

  9. #87
    Registriert seit
    17.11.2015
    Beiträge
    50
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Habe dein Programm heute getestet, vielen Dank, da hast du dir ja einige Arbeit gemacht! Ergebnisse siehe Anhang.

    Dabei gab's zunächst noch 3 kleine Probleme, die habe ich in der Main.cpp korrigiert und mit dran gehängt:
    - Zeilennummern und Unit der Parameter waren in der Deklaration vertauscht
    - ein Typedef-Fehler bei der Deklaration von char as uint8, habe ich auskommentiert, dann konnte ich's kompilieren
    - Damit die Ausgabe auf der Konsole gelesen werden kann hab ich die "Beliebige Taste zum beenden drücken.." abfrage eingebaut

    Resultate waren genau wie bei meinen bisherigen Tests:
    - Werden die 3 Antriebs-Parameter (hier die Temperaturen) einzeln abgefragt, so sieht man im Wireshark die korrekten Werte.
    - Werden alle 3 auf einmal abgefragt, sind die Werte bei allen 3 gleich und entsprechen dem Wert der ersten abgefragten, also 1. korrekt, Rest falsch
    - Wird vor den Antriebsparametern eine Variable aus einem anderen Bereich (hier getestet mit dem NC-Programmnamen) gelesen, so erhält man für die Antriebsparameter den Fehler "Object does not Exist"
    - In keinem Fall werden irgendwelche Werte vom Programm auf der Konsole ausgegeben (Siehe Screenshot), immer alles = 0, was ja eigentlich irgendwo zwischen 20-30 °C liegen sollte.

    --> Für die ersten 3 Fälle habe ich keine Idee woher das kommt, fürchte jedoch dass es ein Bug der Sinumerik Firmware ist, also außerhalb der AGLink Software.
    Ich werde das Ganze dazu noch einmal an einer anderen Maschine mit anderem SW-Stand testen.

    --> Für den 4. Fall (Daten werden richtig von der Sinumerik gelesen, aber nicht "ausgewertet") sehe ich 2 Erklärungen: Die Daten landen erst garnicht im Puffer (-> Bug im AGLink) oder ich bin zu doof den Puffer richtig auszulesen...

    Test_Ergebnisse.zip


    Update:
    Hab weiter getestet. Es ist möglich mit einem Aufruf mehrere Parameter der GLEICHEN Unit (also des gleichen Antriebs) auszulesen. z.B. Motortemperatur, Geberposition, Winkelposition.
    Dabei kommen die richtigen Werte im Wireshark, die NCK_demo.exe wie auch mein eigener Code zeigen aber nach wie vor keine Werte, weder in der Buffer- bzw. Byte-Ansicht noch als Wert.
    Nur wenn man in einem Aufruf Werte aus mehreren Units lesen will funktioniert's nicht.
    Geändert von st_rupp (11.01.2016 um 13:16 Uhr)

  10. #88
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    Habe dein Programm heute getestet, vielen Dank, da hast du dir ja einige Arbeit gemacht!
    nur ein wenig zusammenkopiert

    Damit die Ausgabe auf der Konsole gelesen werden kann hab ich die "Beliebige Taste zum beenden drücken.." abfrage eingebaut


    ich mache sowas immer mit Umleitung

    Konsole:
    nck_drives_test.exe > out.txt
    oder als Angabe bei den Debug-Einstellungen im Studio

    dann muss man auch kein Screenshot machen

    Werden alle 3 auf einmal abgefragt, sind die Werte bei allen 3 gleich und entsprechen dem Wert der ersten abgefragten, also 1. korrekt, Rest falsch
    sieht aus wie ein Firmware-Bug - was soll der Sinn davon sein

    Für den 4. Fall (Daten werden richtig von der Sinumerik gelesen, aber nicht "ausgewertet") sehe ich 2 Erklärungen: Die Daten landen erst garnicht im Puffer (-> Bug im AGLink) oder ich bin zu doof den Puffer richtig auszulesen...
    ich bin scheinbar auch zu doof - ist ja mein Code

    siehst du im Debugger irgendwelche Daten im buffer nach dem Read?

    und kannst du bitte noch printf("Test1\n") ... davor einbauen dann kann man die Tests - falls noch welche dazu kommen besser unterscheiden

  11. #89
    Registriert seit
    17.11.2015
    Beiträge
    50
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    So, hab noch ein paar weitere Tests gemacht, siehe Anhang.
    Der Buffer enthält beim CNC-Programmnamen den Klartext, bei den Antriebsparametern nichts (siehe Screenshots).
    Also hier zumindest ein Fehler im AGLink?!

    @ Rainer Hönle: Könnten Sie sich das mal ansehen? Danke!! Und haben Sie vlt. eine Idee, warum in einem ReadMixEx-Auftrag nur Daten aus einer Unit gelesen werden können? Bzw. warum der Zugriff nicht funktioniert wenn vor dem Antriebs-Parameter ein anderer NCK-Parameter gelesen wurde?

    Test_Ergebnisse2.zip

    Nachtrag:
    Habe einen Test an einer zweiten NC mit neuerer SW bzgl. des Verhaltens bei einer NCKReadMixEx mit unterschiedlichen Units im Bereich FeedDrives / MainDrives Block M gemacht.
    Die erste Maschine hat V02.06+SP01+HF07 -> Alle zurückgelieferten Werte sind gleich und entsprechen dem ersten gelesenen Wert
    Die zweite hat V02.07+SP3+HF10 -> Die NC meldet einen Fehler und liefert garkeine Werte
    Siehe Wireshark Traces:
    trace Spinner.zip
    Geändert von st_rupp (11.01.2016 um 15:26 Uhr)

  12. #90
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    im Test 06 ist der Programmname am Ende ploetzlich als DINTEGER (0x06) - anstatt wie bei den anderen Reads als OCTET STRING (0x09), ich denke da macht die Firmware gehörig was falsch - möglicherweise steht aber auch in irgendeiner Siemens Doku vergraben das man Drive-Zugriffe nur Driver-weise nutzen und nicht mischen darf

Ähnliche Themen

  1. OPC Variablen via C++ lesen und schreiben
    Von AkrapovicSPS im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 12.09.2013, 08:38
  2. Variablen schreiben und lesen aus TwinCat3-Projekt
    Von patzer103040 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 08.04.2013, 12:11
  3. C#-Variablen in TwinCAT lesen und Schreiben
    Von kcirtap im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 29.11.2010, 10:18
  4. GUDs lesen und schreiben 840D
    Von PG710 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.12.2008, 12:12
  5. Antworten: 0
    Letzter Beitrag: 08.11.2008, 08:36

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •