Hallo Tom,
Zitat:Das Programm zeigt mir keine Fehler an aber der Motor bewegt sich leider auch nicht.
Vielleicht hat ja jemand mit dem Modbus und AKD Umrichter erfahrung und könnte mal einen Blick auf mein VI werfen.
Ich habe keine Ahnung von deinem speziellen AKD-Inverter, aber kann trotzdem was zum VI sagen:
- Du hast eine schöne Statemachine programmiert (gut!), aber das Enum dazu verwendet einfach nur Nummern für die Statenamen. Besser wären in "Klartext" benannte States!
- Dieses Enum
sollte muss typdefiniert werden - und diese Typdefinition muss dann in allen Instanzen verwendet werden!
- In State "2" erzeugst du aus einem I32-Wert ein Array aus 2 U16-Werten - und davon sendest du dann per ArraySubset nur den ersten Wert!? Ist das so gewollt? Und muss das so kompliziert umgesetzt werden, wenn man das auch mit einem einfachen SplitNumber erledigen kann?
- Warum überhaupt so viele ArraySubset-Funktionen? Du definierst doch vorher meist dein Array in korrekter Länge per Konstante!?
- Man kann bei den ganzen Select-Funktionen auch direkt den ErrorCluster anschließen, du musst nicht jedesmal per Unbundle den Errorstate auslesen! (Und wenn schon Unbundle, dann bitte der Codelesbarkeit wegen Unbundle
ByName!)
- Statt die Statemachine per "Continue if True" weiterlaufen zu lassen, solltest du besser "Stop if True" verwenden: nur dein Stop-State muss nun ein TRUE ausgeben, alle anderen States brauchen keine boolsche Konstante mehr, sondern nur einen "default if unwired"-Tunnel!
- Was ist der Unterschied zwischen State "8" und "9"? Musst du bei einem Fehler wirklich 10ms warten, bevor die Statemachine endet - und ohne Fehler die Statemachine nach nur 1ms beenden? Merkst du da einen Unterschied, wenn du vor dem Computer sitzt?