VFD über RS485

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Nach einer Neuinstallation des gesamten Systems (da war eh noch eine Treibersache beim Netzwerk) ist die Kommunikation nun scheinbar stabil. Wirklich testen kann ich heute nicht (Lärm).

      Ich habe diese Anleitung für die LinuxCNC Installation auf Debian 9 Preempt_RT (Mesakarte) befolgt:
      gnipsel.com/linuxcnc/uspace/index.html

      Achtung:
      libmodbus5/ libmodbus-dev sollte installiert werden

      Weiterhin ist für den eigenen User Zugriff auf die Gruppen tty, dialout und ggf. messagebus erforderlich
      Siehe:
      github.com/esp8266/source-code-examples/issues/26


      Zum Watchdop aber noch ein paar Fragen:

      Meine custom.hal (Auszug):
      Display Spoiler

      loadusr -W wj200_vfd --device /dev/ttyUSB0 --baud 9600 --parity N --data 8 --stop 1
      setp wj200-vfd.0.mbslaveaddr 1
      setp wj200-vfd.0.enable 1

      net spindle-vel-cmd-rps-abs => wj200-vfd.0.commanded-frequency
      net spindle-enable spindle.0.on => wj200-vfd.0.run
      net spindle-ccw spindle.0.reverse => wj200-vfd.0.reverse
      net spindle-at-speed <= wj200-vfd.0.is-at-speed

      loadrt watchdog num_inputs=1
      addf watchdog.process servo-thread
      addf watchdog.set-timeouts servo-thread

      net vfd-watchdog wj200-vfd.0.watchdog-out => watchdog.input-0
      setp watchdog.timeout-0 0.5
      setp watchdog.enable-in 1

      loadrt lut5 count=1
      addf lut5.0 servo-thread
      # 0x2 corresponds to 001 = true
      setp lut5.0.function 0x2

      #watchdog is high (1) when ok
      net estop-watchdog-timeout watchdog.ok-out => lut5.0.in-0
      #is-alarm is low (0) when ok
      net estop-vfd-error wj200-vfd.0.is-alarm => lut5.0.in-1
      #estop-ext is low (0) when ok
      net estop-ext => lut5.0.in-2

      net estop-signal lut5.0.out => iocontrol.0.emc-enable-in

      #Alternative without watchog
      #net estop-ext => iocontrol.0.emc-enable-in


      Halshow zeigt nun ein blinkendes wj200-vfd.0.watchdog-out und damit auch watchdog.input-0
      Doku sagt:
      pin out bit watchdog_out "Alternates between 1 and 0 after every update cycle. Feed into a watchdog component to ensure vfd driver is communicating with the vfd properly.";
      ==> Verhalten also IO

      Dummerweise bleibt der Watchdog scheinbar low.

      In Andreas config ist setp watchdog.enable-in auf "1" (true) gesetzt. Das kann doch eigentlich nicht korrekt sein. 1) Müsste ich einen Toogle zum Zurücksetzen haben und 2) geht er mit lut5.0.function 0x2 dann nie auf high, da er ja wenn OK auf 0 (false) steht, oder?
      Viele Grüße
      Guido

      The post was edited 1 time, last by GuiHue ().

    • GuiHue wrote:

      In Andreas config ist setp watchdog.enable-in auf "1" (true) gesetzt. Das kann doch eigentlich nicht korrekt sein. 1) Müsste ich einen Toogle zum Zurücksetzen haben und 2) geht er mit lut5.0.function 0x2 dann nie auf high, da er ja wenn OK auf 0 (false) steht, oder?
      You're right. Ich habs mittlerweile mit "iocontrol.0.user-request-enable" verbunden. Dann muss nicht jedesmal linuxcnc komplett neu gestartet werden...

      auf die Schnelle hier der Schnipsel aus der HAL:

      Source Code

      1. loadrt not count=1
      2. addf not.0 servo-thread
      3. net enable-invers not.0.in <= iocontrol.0.user-request-enable
      4. net watchdog-on watchdog.enable-in <= not.0.out
      5. net estop-0 watchdog.ok-out => lut5.0.in-0
      6. net estop-1 wj200-vfd.0.is-alarm => lut5.0.in-1
      7. net estop-ext => lut5.0.in-2
      8. net estop-signal lut5.0.out => iocontrol.0.emc-enable-in
      Bin gerade etwas "ausgelastet" mit beruflichen, privaten und CNC-Themen. U.a. mlchte ich in kürze endlich(!) meine eigene Ameise als Edel-Variante bauen (wenn ich darf, gibts einen Baubericht hier) :) Sobald ein Hauch Zeit frei ist, werden die Artikel auf der Website dann natürlich auch aktualisiert und erweitert.
      Gruß

      Andreas
    • Hallo Andreas,

      vielen Dank für Deine Rückmeldung.

      Ich versuche das heute mal irgendwann zu testen. Was dabei nur auffällt, ist dass mit diesem Schnipsel in dem Sinne kein Watchdog für die Verbindung mehr aktiv ist. Ich vermute, dass der Schnipsel nicht ganz vollständig ist und habe diesen einmal im Sinne einer Doku ergänzt:

      Source Code

      1. #VFD Connection via Modbus
      2. #Load from different Device (i.e. USB when not using onboard components; Baurate needs to be set in VFD using Hitachi ProDrive)
      3. loadusr -W wj200_vfd --device /dev/ttyUSB0 --baud 9600 --parity N --data 8 --stop 1
      4. setp wj200-vfd.0.mbslaveaddr 1
      5. setp wj200-vfd.0.enable 1
      6. #Connect relevant commands
      7. net spindle-vel-cmd-rps-abs => wj200-vfd.0.commanded-frequency
      8. net spindle-enable spindle.0.on => wj200-vfd.0.run
      9. net spindle-ccw spindle.0.reverse => wj200-vfd.0.reverse
      10. net spindle-at-speed <= wj200-vfd.0.is-at-speed
      11. #Establish Watchdog functions within LinuxCNC - Watch is-alarm and Heartbeat
      12. #Load watchdog component
      13. loadrt watchdog num_inputs=1
      14. addf watchdog.process servo-thread
      15. addf watchdog.set-timeouts servo-thread
      16. setp watchdog.timeout-0 0.5
      17. # loadrt not count=1 #relocatedt o mymill.hal
      18. addf not.0 servo-thread
      19. loadrt lut5 count=1
      20. addf lut5.0 servo-thread
      21. # LUT5 uses a look-up table for logic fucntions; in this case LUT5 to be HIGH (=enable ok) when
      22. # in0 (watchdog) high 1
      23. # in1 (is-alarm) low 0
      24. # in2 estop-ext high 1
      25. # following manual this corresponds t 001 = true --> 101 to hex = 0x20
      26. setp lut5.0.function 0x20
      27. net vfd-watchdog wj200-vfd.0.watchdog-out => watchdog.input-0
      28. net enable-invers not.0.in <= iocontrol.0.user-request-enable
      29. net watchdog-on watchdog.enable-in <= not.0.out
      30. net estop-0 watchdog.ok-out => lut5.0.in-0
      31. net estop-1 wj200-vfd.0.is-alarm => lut5.0.in-1
      32. net estop-ext => lut5.0.in-2
      33. loadrt message names=m_vfdcom,m_vfderror,m_estopext messages="Vfd-Communication lost, VfD-Error (check vfd-display), External E-Stop triggered"
      34. addf m_vfdcom servo-thread
      35. addf m_vfderror servo-thread
      36. addf m_estopext servo-thread
      37. net estop-0 => m_vfdcom.trigger
      38. net estop-1 => m_vfderror.trigger
      39. net estop-ext => m_estopext.trigger
      40. #Output to systemwide ESTOP via emc-enable-in in iocontrol
      41. net estop-signal lut5.0.out => iocontrol.0.emc-enable-in
      42. #Alternative without watchog
      43. #net estop-ext => iocontrol.0.emc-enable-in
      Display All
      Obiger Code ist getestet und funktioniert bei mir.

      Vielen Dank an Andreas für die Unterstützung.
      Viele Grüße
      Guido

      The post was edited 1 time, last by GuiHue ().