LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

Jak kontrolować wrzeciono przez Modbus w LinuxCNC i Classic Ladder

Dyskusje dotyczące działania obsługi programu LinuxCNC
Awatar użytkownika

Autor tematu
adam Fx
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 5527
Rejestracja: 04 lip 2004, 16:03
Lokalizacja: Gliwice

LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

#1

Post napisał: adam Fx » 26 sty 2020, 03:51

Siema obecny poradnik. Rozpisywać się nie będę bo i tak się nagadałem :)
Jak kontrolować wrzeciono przez Modbus w LinuxCNC i Classic Ladder

Wersja szybka dla profesjonalistów i tych co chcą zobaczyć o co chodzi:

https://youtu.be/8fDxSzONBS0

Pełne poradniki (przynajmniej na tyle na ile miałem wiedzy):

https://youtu.be/R-NacjkzayA

https://youtu.be/8K5igqx9_7o

https://youtu.be/OJap9CVGacg

Zachęcam do dzielenia się swoimi osiągnięciami :)


sorki za wszystkie błędy ... (dyslektyk) :?
Zobacz moje filmy http://www.youtube.com/user/pokachontass/videos

Awatar użytkownika

gothye
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 133
Rejestracja: 15 kwie 2009, 15:18
Lokalizacja: Płock

Re: LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

#2

Post napisał: gothye » 26 sty 2020, 04:48

Brawo , za świetny poradnik !!!


drzasiek90
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 1
Posty: 722
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

#3

Post napisał: drzasiek90 » 30 sty 2020, 20:36

Kawał dobrej roboty, jeśli komuś nie wystarcza sterowanie częstotliwość/wypełnienie-> amplituda to może się przydać.

Awatar użytkownika

Autor tematu
adam Fx
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 5527
Rejestracja: 04 lip 2004, 16:03
Lokalizacja: Gliwice

Re: LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

#4

Post napisał: adam Fx » 31 sty 2020, 02:20

Dzięki :)
ja chcąc nie chcąc Musiałem to opanować ponieważ chce Jednym falownikiem sterować trzy różne silniki na zmianę każdy silnik ma inne parametry więc dzięki modbus jednym kliknięciem mam zamiar przysyłać pakiet zawierający takie informacje jak na przykład dane z tabliczki znamionowej silnika.

Sam Classic ladder daje nam ogromne możliwości do opisania jakiejś logiki np. magazynach narzędzi, jakiś podajniki ,itd.


Bardzo fajnie działa też kontrola rozpędzenia wrzeciona jeśli nie mamy enkodera to pozostaje nam domyślnie wpisać jakąś przerwę czasową na rozpędzenie wrzeciona W metodzie którą użyłem odczytujemy aktualne parametry z falownika a specjalny moduł zaimplementowany w hal nie pozwoli wykonać ruchu g01 czyli rozpocząć obróbki jeżeli obroty rzeczywiste nie będą dostatecznie blisko obrotów zadanych.
Z pozoru funkcja może wydawać się niepotrzebne Bo przecież program możemy sobie tak rozpisać żeby Wrzeciono zanim dojedzie miało czas się rozpędzić Okej ale bywa na przykład tak że Musimy zatrzymać program bo powiedzmy zaplątały się wióry Odjeżdżamy na chwilę żeby coś zmierzyć to cały czas musimy pamiętać że najpierw musimy uruchomić Wrzeciono żeby się rozpędził o a dopiero potem puścić program przypadku użycia metody sterowania jaką zaproponowałem Linux CNC myśli o tym za nas samodzielnie.
Zapewne można doszukiwać się jeszcze innych zalet jak na przykład pomiar prądu dzięki czemu możemy stworzyć zabezpieczenie przeciążenia wrzeciona które zatrzyma też program lub śledzić zużycie / uszkodzenie narzędzia wykrywający nagły wzrost obciążenia.
sorki za wszystkie błędy ... (dyslektyk) :?
Zobacz moje filmy http://www.youtube.com/user/pokachontass/videos


Zhan
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 224
Rejestracja: 09 sie 2011, 20:37
Lokalizacja: Warszawa

Re: LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

#5

Post napisał: Zhan » 01 kwie 2020, 01:12

Hej,

właśnie obejrzałem Twoje poradniki i zainteresował mnie temat wędki na modbusie. Zastanawiam się tylko jak to powinno wyglądać, załóżmy, że chciałbym mieć możliwość sterowania z wędki prędkością wrzeciona ale żeby w programie wyświetlała się informacja o ustawionej liczbie obrotów i też żeby z programu dało się ustawić ten parametr. Czy wędka zapisywałaby bezpośrednio rejestr falownika a program tylko by go odczytywał czy program powinien jakoś pośredniczyć w komunikacji między wędką a falownikiem?

pozdrawiam

Awatar użytkownika

Rafal1231
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 1
Posty: 15
Rejestracja: 31 paź 2020, 18:55

Re: LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

#6

Post napisał: Rafal1231 » 14 sty 2022, 11:29

Witam . Chciałabym użyć classicladder do sterowania wprzecionem aby spełniało kilka warunków oraz M19 przez wykorzystanie pinów na płycie mesa 7i76e i problem jest z tym że nie wiem jak użyć zwykłych pinów tylko jest odrazu połączone z modbust . Może ma ktoś wiedzę jak to zrobić. Chyba że lepiej to zrobić poprzez konfigurację hal ?

Awatar użytkownika

Autor tematu
adam Fx
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 5527
Rejestracja: 04 lip 2004, 16:03
Lokalizacja: Gliwice

Re: LinuxCNC VFD ModBus ClassicLadder RS485 / RS232 / USB

#7

Post napisał: adam Fx » 14 sty 2022, 19:59

pokazałem na filmie z tym że zamiast z mesa łączyłem pin z LPT

napisz najlepiej jeden przykład co chcesz zrobić ale precyzyjnie . np. mam przycisk podpięty do pniu 1 mesa cyknął ma iść do CL i tam ... itd.

Jeśli chodzi o kontrole Modbas mi bardziej sprawdza się obecnie MB2HAL bo z CL miałem czasem okienko błąd komunikacji
dla zainteresowanych dodaje pliki konfiguracyjne mojej wersji próbnej to to samo co pokazałem w filmie ale zmienione a kontrole modbus z MB2HAL

MB2HALV1.ini

Kod: Zaznacz cały

# Generated by stepconf 1.1 at Sun Jan  2 20:53:33 2022
# Jeśli zmodyfikujesz ten plik zmainy zostaną
# nadpisane gdy uruchomisz ponownie Stepconf

[EMC]
MACHINE = MB2HALV1
DEBUG = 0

[DISPLAY]
DISPLAY = axis
EDITOR = gedit
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
ARCDIVISION = 64
GRIDS = 10mm 20mm 50mm 100mm 1in 2in 5in 10in
MAX_FEED_OVERRIDE = 1.2
MIN_SPINDLE_OVERRIDE = 0.5
MAX_SPINDLE_OVERRIDE = 1.2
DEFAULT_LINEAR_VELOCITY = 2.50
MIN_LINEAR_VELOCITY = 0
MAX_LINEAR_VELOCITY = 25.00
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[MACHINE]
GWINTOWNICA=0
PILA=1

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
BASE_PERIOD = 100000
SERVO_PERIOD = 1000000

[HAL]
HALFILE = MB2HALV1.hal
HALFILE = custom.hal
POSTGUI_HALFILE = custom_postgui.hal

[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 2.50
MAX_VELOCITY = 25.00

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

[AXIS_0]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
STEPGEN_MAXACCEL = 937.5
SCALE = 80.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -0.001
MAX_LIMIT = 200.0
HOME_OFFSET = 0.0

[AXIS_1]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
STEPGEN_MAXACCEL = 937.5
SCALE = 80.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -0.001
MAX_LIMIT = 200.0
HOME_OFFSET = 0.0

[AXIS_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
STEPGEN_MAXACCEL = 937.5
SCALE = 80.0
FERROR = 1
MIN_FERROR = .25
MIN_LIMIT = -100.0
MAX_LIMIT = 0.001
HOME_OFFSET = 0.0


MB2HALV1.hal

Kod: Zaznacz cały

# Generated by stepconf 1.1 at Sun Jan  2 20:53:33 2022
# Jeśli zmodyfikujesz ten plik zmainy zostaną
# nadpisane gdy uruchomisz ponownie Stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0
loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread

addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf classicladder.0.refresh servo-thread
addf stepgen.update-freq servo-thread
net spindle-cmd-rpm     <= motion.spindle-speed-out
net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-cmd-rps     <= motion.spindle-speed-out-rps
net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-at-speed    => motion.spindle-at-speed

net estop-out       => parport.0.pin-01-out
net xstep           => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net xdir            => parport.0.pin-03-out
net ystep           => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
net ydir            => parport.0.pin-05-out
net zstep           => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
net zdir            => parport.0.pin-07-out
net astep           => parport.0.pin-08-out
setp parport.0.pin-08-out-reset 1
net adir            => parport.0.pin-09-out

setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable

setp stepgen.1.position-scale [AXIS_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 35000
setp stepgen.1.dirsetup 35000
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd
net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable axis.1.amp-enable-out => stepgen.1.enable

setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 35000
setp stepgen.2.dirsetup 35000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.enable

net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

# Uruchom Classicladder bez GUI ( PLC GUI w AXIS GUI
loadusr classicladder --nogui custom.clp
custome.hal

Kod: Zaznacz cały

# Tutaj dodaj swoje polecenia HAL
# Ten plik nie zostanie nadpisany gdy uruchomisz ponownie Stepconf


#VFD N700E MB2HAL

loadusr -Wn bestia mb2hal config=mb2hal.ini

loadrt near names=near.speed
addf near.speed servo-thread



net spindle-cw classicladder.0.in-00 <= motion.spindle-on 
net spindle-ccw classicladder.0.in-01 <= motion.spindle-forward 
net spindle-start classicladder.0.in-02 <= motion.spindle-reverse 



net spindle-runmode bestia.runmode.command.float <= classicladder.0.floatout-00

net spindle-cmd-rpm-abs => classicladder.0.floatin-01
net spindle-Hz classicladder.0.floatout-02 => bestia.HzOut.Hz.float



#czeka na osiagniecie obrotow zadanych
# Set motion.spindle-at-speed

net spindle-cmd-rpm-abs near.speed.in1

net spindle-speed-in bestia.HzIn.00.float => near.speed.in2

setp near.speed.scale 1.05

net spindle-at-speed <= near.speed.out 

setp parport.0.pin-16-out [MACHINE]GWINTOWNICA
setp parport.0.pin-17-out [MACHINE]PILA

#%W1=(%IF1-0)*(5000-0)/(3000-0)+0
custome.cpl

Kod: Zaznacz cały

_FILES_CLASSICLADDER
_FILE-timers.csv
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
_/FILE-timers.csv
_FILE-modbusioconf.csv
#VER=1.0
_/FILE-modbusioconf.csv
_FILE-rung_0.csv
#VER=2.0
#LABEL=
#COMMENT=
#PREVRUNG=1
#NEXTRUNG=-1
0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0
0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0
0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0
0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0
0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0
0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0
_/FILE-rung_0.csv
_FILE-ioconf.csv
#VER=1.0
_/FILE-ioconf.csv
_FILE-general.txt
PERIODIC_REFRESH=1
SIZE_NBR_RUNGS=100
SIZE_NBR_BITS=20
SIZE_NBR_WORDS=20
SIZE_NBR_TIMERS=10
SIZE_NBR_MONOSTABLES=10
SIZE_NBR_COUNTERS=10
SIZE_NBR_TIMERS_IEC=10
SIZE_NBR_PHYS_INPUTS=15
SIZE_NBR_PHYS_OUTPUTS=15
SIZE_NBR_ARITHM_EXPR=100
SIZE_NBR_SECTIONS=10
SIZE_NBR_SYMBOLS=160
_/FILE-general.txt
_FILE-arithmetic_expressions.csv
#VER=2.0
0000,@310/[email protected]=1
0001,@310/[email protected]=2
0002,@310/[email protected]=4
0003,@310/[email protected]=(@300/[email protected])*(5000-0)/(2855-0)+0
_/FILE-arithmetic_expressions.csv
_FILE-symbols.csv
#VER=1.0
%I0,%I0,
%I1,%I1,
%I2,%I2,
%I3,%I3,
%I4,%I4,
%I5,%I5,
%I6,%I6,
%I7,%I7,
%I8,%I8,
%I9,%I9,
%I10,%I10,
%I11,%I11,
%I12,%I12,
%I13,%I13,
%I14,%I14,
%Q0,%Q0,
%Q1,%Q1,
%Q2,%Q2,
%Q3,%Q3,
%Q4,%Q4,
%Q5,%Q5,
%Q6,%Q6,
%Q7,%Q7,
%Q8,%Q8,
%Q9,%Q9,
%Q10,%Q10,
%Q11,%Q11,
%Q12,%Q12,
%Q13,%Q13,
%Q14,%Q14,
%B0,%B0,
%B1,%B1,
%B2,%B2,
%B3,%B3,
%B4,%B4,
%B5,%B5,
%B6,%B6,
%B7,%B7,
%B8,%B8,
%B9,%B9,
%B10,%B10,
%B11,%B11,
%B12,%B12,
%B13,%B13,
%B14,%B14,
%B15,%B15,
%B16,%B16,
%B17,%B17,
%B18,%B18,
%B19,%B19,
%W0,%W0,
%W1,%W1,
%W2,%W2,
%W3,%W3,
%W4,%W4,
%W5,%W5,
%W6,%W6,
%W7,%W7,
%W8,%W8,
%W9,%W9,
%W10,%W10,
%W11,%W11,
%W12,%W12,
%W13,%W13,
%W14,%W14,
%W15,%W15,
%W16,%W16,
%W17,%W17,
%W18,%W18,
%W19,%W19,
%IW0,%IW0,
%IW1,%IW1,
%IW2,%IW2,
%IW3,%IW3,
%IW4,%IW4,
%IW5,%IW5,
%IW6,%IW6,
%IW7,%IW7,
%IW8,%IW8,
%IW9,%IW9,
%QW0,%QW0,
%QW1,%QW1,
%QW2,%QW2,
%QW3,%QW3,
%QW4,%QW4,
%QW5,%QW5,
%QW6,%QW6,
%QW7,%QW7,
%QW8,%QW8,
%QW9,%QW9,
%IF0,%IF0,
%IF1,%IF1,
%IF2,%IF2,
%IF3,%IF3,
%IF4,%IF4,
%IF5,%IF5,
%IF6,%IF6,
%IF7,%IF7,
%IF8,%IF8,
%IF9,%IF9,
%QF0,%QF0,
%QF1,%QF1,
%QF2,%QF2,
%QF3,%QF3,
%QF4,%QF4,
%QF5,%QF5,
%QF6,%QF6,
%QF7,%QF7,
%QF8,%QF8,
%QF9,%QF9,
%T0,%T0,Old Timer
%T1,%T1,Old Timer
%T2,%T2,Old Timer
%T3,%T3,Old Timer
%T4,%T4,Old Timer
%T5,%T5,Old Timer
%T6,%T6,Old Timer
%T7,%T7,Old Timer
%T8,%T8,Old Timer
%T9,%T9,Old Timer
%TM0,%TM0,New Timer
%TM1,%TM1,New Timer
%TM2,%TM2,New Timer
%TM3,%TM3,New Timer
%TM4,%TM4,New Timer
%TM5,%TM5,New Timer
%TM6,%TM6,New Timer
%TM7,%TM7,New Timer
%TM8,%TM8,New Timer
%TM9,%TM9,New Timer
%M0,%M0,One-shot
%M1,%M1,One-shot
%M2,%M2,One-shot
%M3,%M3,One-shot
%M4,%M4,One-shot
%M5,%M5,One-shot
%M6,%M6,One-shot
%M7,%M7,One-shot
%M8,%M8,One-shot
%M9,%M9,One-shot
%C0,%C0,Counter
%C1,%C1,Counter
%C2,%C2,Counter
%C3,%C3,Counter
%C4,%C4,Counter
%C5,%C5,Counter
%C6,%C6,Counter
%C7,%C7,Counter
%C8,%C8,Counter
%C9,%C9,Counter
%E0,%E0,Error Flag Bit
%E1,%E1,Error Flag Bit
%E2,%E2,Error Flag Bit
%E3,%E3,Error Flag Bit
%E4,%E4,Error Flag Bit
%E5,%E5,Error Flag Bit
%E6,%E6,Error Flag Bit
%E7,%E7,Error Flag Bit
%E8,%E8,Error Flag Bit
%E9,%E9,Error Flag Bit
_/FILE-symbols.csv
_FILE-timers_iec.csv
1,0,0
1,0,0
1,0,0
1,0,0
1,0,0
1,0,0
1,0,0
1,0,0
1,0,0
1,0,0
_/FILE-timers_iec.csv
_FILE-counters.csv
0
0
0
0
0
0
0
0
0
0
_/FILE-counters.csv
_FILE-com_params.txt
MODBUS_MASTER_SERIAL_PORT=
MODBUS_MASTER_SERIAL_SPEED=9600
MODBUS_MASTER_SERIAL_DATABITS=8
MODBUS_MASTER_SERIAL_STOPBITS=1
MODBUS_MASTER_SERIAL_PARITY=0
MODBUS_ELEMENT_OFFSET=0
MODBUS_MASTER_SERIAL_USE_RTS_TO_SEND=0
MODBUS_MASTER_TIME_INTER_FRAME=100
MODBUS_MASTER_TIME_OUT_RECEIPT=500
MODBUS_MASTER_TIME_AFTER_TRANSMIT=0
MODBUS_DEBUG_LEVEL=0
MODBUS_MAP_COIL_READ=0
MODBUS_MAP_COIL_WRITE=0
MODBUS_MAP_INPUT=0
MODBUS_MAP_HOLDING=0
MODBUS_MAP_REGISTER_READ=0
MODBUS_MAP_REGISTER_WRITE=0
_/FILE-com_params.txt
_FILE-sequential.csv
#VER=1.0
_/FILE-sequential.csv
_FILE-rung_1.csv
#VER=2.0
#LABEL=
#COMMENT=
#PREVRUNG=0
#NEXTRUNG=0
1-0-50/0 , 1-0-50/1 , 2-0-60/2 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 50-0-60/1
0-0-50/0 , 0-0-50/0 , 0-0-50/0 , 0-0-50/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 99-1-0/0 , 99-0-0/0 , 60-0-60/0
1-0-50/0 , 1-0-50/2 , 2-0-60/1 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 50-0-60/2
0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 0-0-0/0 , 99-1-0/0 , 99-0-0/0 , 60-0-0/1
2-0-60/1 , 2-0-60/2 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 99-0-0/0 , 99-0-0/0 , 60-0-0/2
9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 9-0-0/0 , 99-0-0/0 , 99-0-0/0 , 60-0-0/3
_/FILE-rung_1.csv
_FILE-monostables.csv
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
1,0
_/FILE-monostables.csv
_FILE-sections.csv
#VER=1.0
#NAME000=Prog1
000,0,-1,1,0,0
_/FILE-sections.csv
_/FILES_CLASSICLADDER
mb2hal.ini

Kod: Zaznacz cały

#Infos:
# 05.01.2022
#VFD N700E 2.2kW
#Load the modbus HAL userspace module as the examples below,
#change to match your own HAL_MODULE_NAME and .ini file name
#Using HAL_MODULE_NAME=mb2hal or nothing (default): loadusr -W mb2hal config=config_file.ini
#Using HAL_MODULE_NAME=mymodule: loadusr -Wn mymodule mb2hal config=config_file.ini

#dodaj w custom.hal loadusr -Wn bestia mb2hal config=mb2hal.ini
#Żeby to działało musisz zaltualizować MB2HAL 2,7,15 (chyba że masz nantowszy linuxCNC podobno jest OK 2.8...)



[MB2HAL_INIT]

#OPTIONAL: Debug level of init and INI file parsing.
# 0 = silent.
# 1 = error messages (default).
# 2 = OK confirmation messages.
# 3 = debugging messages.

INIT_DEBUG=3

#OPTIONAL: HAL module (component) name. Defaults to "mb2hal".

HAL_MODULE_NAME=bestia 

#OPCJONALNIE: Wstaw opóźnienie „FLOAT sekund” między transakcjami w kolejności
#aby nie mieć dużo logów i ułatwić debugowanie.
#Przydatne, gdy używasz DEBUG=3 (NOT INIT_DEBUG=3)
#Dotyczy WSZYSTKICH transakcji.
#Użyj "0.0" dla normalnej aktywności.

SLOWDOWN=0.0

#REQUIRED: The number of total Modbus transactions. There is no maximum.

TOTAL_TRANSACTIONS=4
#One transaction section is required per transaction, starting at 00 and counting up sequentially.
#If there is a new link (not transaction), you must provide the REQUIRED parameters 1st time.
#Warning: Any OPTIONAL parameter not specified are copied from the previous transaction.

[TRANSACTION_00]
#NOTSTOP Funktion!

#Allgememeine Kommunkitaktionseinstellungen:
LINK_TYPE=Serial
SERIAL_PORT=/dev/ttyUSB0
SERIAL_BAUD=9600

#Data bits. One of 5,6,7,8.
SERIAL_BITS=8

#Data parity. One of: even, odd, none.
SERIAL_PARITY=none

#Stop bits. One of 1, 2.
SERIAL_STOP=1

#Opóźnienie portu szeregowego między tylko dla tej transakcji.
# W ms. Domyślnie 0.
# AC10 nie nadąża, jeśli ta wartość jest za mała
SERIAL_DELAY_MS=10

MB_SLAVE_ID=1


#dla falowninka N700E rejest dla CW CCW STOP to 0002hex inaczej 2dec
#FIRST_ELEMENT= nr. pierwszego  rejsetru do odczytu lub zapisu
#podana wartośc jest podawana w dec ale nie może być 2 trzeba uzupoełnic puste 0002

#odczyt prądu wyjściowego d02 = d=0x01 02dec=0x02 0102HEX =258dec
FIRST_ELEMENT=258



#PIN_NAMES zastępuje NELEMENTS=1 nie moga one występowac razem
#ten sam przykładowy zapis w HAL: PIN_NAMES= domek NELEMENTS=1 
#net freq bestia.HzOut.domek.float <= classicladder.0.floatout-01
#net freq bestia.HzOut.00.float <= classicladder.0.floatout-01
#PIN_NAMES=cycle_start,stop,feed_hold
PIN_NAMES=A
#NELEMENTS=1

#REQUIRED unless NELEMENTS is specified: A list of element names.
#these names will be used for the pin names, e.g mb2hal.plcin.cycle_start
#NOTE: there must be no white space characters in the list


#REQUIRED: Modbus transaction function code (see www.modbus.org specifications).
#    fnct_01_read_coils               (01 = 0x01)
#    fnct_02_read_discrete_inputs     (02 = 0x02)
#    fnct_03_read_holding_registers   (03 = 0x03)
#    fnct_04_read_input_registers     (04 = 0x04)
#    fnct_05_write_single_coil        (05 = 0x05)
#    fnct_06_write_single_register    (06 = 0x06)
#    fnct_15_write_multiple_coils     (15 = 0x0F)
#    fnct_16_write_multiple_registers (16 = 0x10)

#fnct_02_read_discrete_inputs: creates boolean output HAL pins.
#fnct_03_read_holding_registers: creates a floating point output HAL pins.
#                           also creates a u32 output HAL pins.
#fnct_04_read_input_registers: creates a floating point output HAL pins.
#                         also creates a u32 output HAL pins.
#fnct_15_write_multiple_coils: creates boolean input HAL pins.
#fnct_16_write_multiple_registers: creates a floating point input HAL pins.

#The pins are named based on component name, transaction number and order number.
#Example: mb2hal.00.01 (transaction=00, second register=01 (00 is the first one))

#fnct_03_read_holding_registers: creates a floating point output HAL pins, also creates a u32 output HAL pins.

#The pins are named based on component name, transaction number and order number.
#Example: mb2hal.00.01 (transaction=00, second register=01 (00 is the first one))

 

MB_TX_CODE=fnct_03_read_holding_registers

#OPTIONAL: Response timeout for this transaction. In INTEGER ms. Defaults to 500 ms
#This is how much to wait for 1st byte before raise an error.

##St500: Kein Wert angegeben, jedoch mit 250ms getestet!
MB_RESPONSE_TIMEOUT_MS=250

#OPTIONAL: Byte timeout for this transaction. In INTEGER ms. Defaults to 500 ms.
#This is how much to wait from byte to byte before raise an error.

##St500: Kein Wert angegeben, jedoch mit 250ms getestet!
MB_BYTE_TIMEOUT_MS=250

#OPTIONAL: Instead of giving the transaction number, use a name.
#Example: mb2hal.00.01 could become mb2hal.plcin.01
#The name must not exceed 32 characters.
#NOTE: when using names be careful that you dont end up with two transactions
#usign the same name.

HAL_TX_NAME= CurrentWork

#OPTIONAL: Maximum update rate in HZ. Defaults to 0.0 (0.0 = as soon as available = infinit).
#NOTE: This is a maximum rate and the actual rate may be lower.
#If you want to calculate it in ms use (1000 / required_ms).
#Example: 100 ms = MAX_UPDATE_RATE=10.0, because 1000.0 ms / 100.0 ms = 10.0 Hz

MAX_UPDATE_RATE=0

#OPTIONAL: Debug level for this transaction only.
#See INIT_DEBUG parameter above.

DEBUG=3

[TRANSACTION_01]

MB_TX_CODE=fnct_03_read_holding_registers 
FIRST_ELEMENT=264
NELEMENTS=1
#PIN_NAMES=A
HAL_TX_NAME=HzIn
#MAX_UPDATE_RATE=100.0
DEBUG=3



[TRANSACTION_02]

MB_TX_CODE=fnct_06_write_single_register
FIRST_ELEMENT=2
#NELEMENTS=1
PIN_NAMES=command
HAL_TX_NAME=runmode
#MAX_UPDATE_RATE=100.0
DEBUG=3

[TRANSACTION_03]

MB_TX_CODE=fnct_06_write_single_register
FIRST_ELEMENT=4
#NELEMENTS=1
PIN_NAMES=Hz
HAL_TX_NAME=HzOut
#MAX_UPDATE_RATE=100.0
DEBUG=3

Dodane 5 minuty 29 sekundy:
Rafal1231 pisze:Może ma ktoś wiedzę jak to zrobić. Chyba że lepiej to zrobić poprzez konfigurację hal ?
tak czy inaczej robisz połączenie HAL a w CL robisz tylko logikę
Zhan pisze:właśnie obejrzałem Twoje poradniki i zainteresował mnie temat wędki na modbusie. Zastanawiam się tylko jak to powinno wyglądać, załóżmy, że chciałbym mieć możliwość sterowania z wędki prędkością wrzeciona ale żeby w programie wyświetlała się informacja o ustawionej liczbie obrotów i też żeby z programu dało się ustawić ten parametr. Czy wędka zapisywałaby bezpośrednio rejestr falownika a program tylko by go odczytywał czy program powinien jakoś pośredniczyć w komunikacji między wędką a falownikiem?
trochę spóźniona odp. :) zależy jak zrobisz wędkę .. można np. dać arduino i wtedy faktycznie wartość obr. zapisujesz w rejestr > linuxcnc to odczytuje> i zadaje do wykonania falownikowi
sorki za wszystkie błędy ... (dyslektyk) :?
Zobacz moje filmy http://www.youtube.com/user/pokachontass/videos

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”