Mach3 automatyczna zmiana przełożenia.

Dyskusje dotyczące najpopularniejszego programu sterującego maszynami CNC

Autor tematu
amator_25852
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 5
Posty: 16
Rejestracja: 04 kwie 2016, 22:50
Lokalizacja: PL

Mach3 automatyczna zmiana przełożenia.

#1

Post napisał: amator_25852 » 25 sie 2016, 13:02

Posiadam wrzeciono z dwubiegową przekładnią sterowaną hydraulicznie elektrozaworami. Dodałem więc dwa przyciski które mają umożliwiać wybór przełożenia. Mam jednak problem z koncepcją: jak zrealizować sterowanie z poziomu mach3? Rozważam następujące opcje:
1. Zmiana przełożenia "przy okazji" wymiany narzędzia (obsługa z poziomu makra od wymiany narzędzia).
2. "Mózg" mach-a

Jestem w tej materii amatorem więc może ma ktoś lepszy pomysł.

Pierwsza opcja wydaje się prostsza, nie wiem jednak jak z poziomu makra zmienić "Pulley Number" tak aby konfiguracja w machu odpowiadała rzeczywistości.

Będę wdzięczny za wszelkie rady/sugestie.



Tagi:

Awatar użytkownika

k-m-r1
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 4
Posty: 1418
Rejestracja: 23 cze 2008, 10:38
Lokalizacja: OOL lub DW
Kontakt:

#2

Post napisał: k-m-r1 » 25 sie 2016, 15:08

Kod: Zaznacz cały

rpm=GetRPM()
pulley=GetOEMDRO(56)

If pulley=1 then
  if rpm>500 then
    Call SetOEMDRO(56,2)
    MachMsg ("Change Back-Gear To High Range","Pulley Error",0)
  end if
else
  if rpm<500 then
    Call SetOEMDRO(56,1)
    MachMsg ("Change Back-Gear To Low Range","Pulley Error",0)
  end if
end if
DoSpinCW()
MACH3 cncTworzenie Makr do palników magazynków THC OHC inneEKRANY dla firm producentów maszyn Budowa sprzedaż wypalarki plazma gaz obrotnice Elektrodrążarki Frezarki Tokarki Giętarki3D inne wg zlecenia 888 703 196 Tomek Komor [email protected]


Autor tematu
amator_25852
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 5
Posty: 16
Rejestracja: 04 kwie 2016, 22:50
Lokalizacja: PL

#3

Post napisał: amator_25852 » 25 sie 2016, 18:48

Dzięki za podpowiedź.
A tak przy okazji, czy istnieje możliwość zczytania stanu przycisku wyświetlanego na ekranie?
Kopie po internecie i widzę tylko DoOEMButton().

Awatar użytkownika

k-m-r1
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 4
Posty: 1418
Rejestracja: 23 cze 2008, 10:38
Lokalizacja: OOL lub DW
Kontakt:

#4

Post napisał: k-m-r1 » 25 sie 2016, 20:55

Nie
MACH3 cncTworzenie Makr do palników magazynków THC OHC inneEKRANY dla firm producentów maszyn Budowa sprzedaż wypalarki plazma gaz obrotnice Elektrodrążarki Frezarki Tokarki Giętarki3D inne wg zlecenia 888 703 196 Tomek Komor [email protected]

Awatar użytkownika

andmar2005
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 190
Rejestracja: 15 sie 2009, 08:55
Lokalizacja: kujawsko-pomorski
Kontakt:

#5

Post napisał: andmar2005 » 25 sie 2016, 23:06

lub w makro m3.m1s coś podobnego

'Zmienne
Dim SpinCW As Integer
Dim curenttime As Single

Const czasZatrzymania = 5
Const czasWbiciaBiegu = 2000

Sub Main

Sleep(1000)

'------------------------------------------------------------------------------------
'pobieranie aktualnych obrotów
SpinCW = GetRPM()
'------------------------------------------------------------------------------------

If SpinCW >261 Then ' zakres obrotow
If Not IsActive(OEMTRIG4) Then ' sprawdza stan krancowki
Call LowGear
End If

SetPulley(1)
While IsMoving
Sleep(10)
Wend
End If

If (SpinCW >97 And SpinCW <260) Then
If Not IsActive(OEMTRIG5) Then
Call HighGear
End If

SetPulley(2)
While IsMoving
Sleep(10)
Wend
End If

If SpinCW <96 Then
If Not IsActive(OEMTRIG6) Then
Call HHighGear
End If

SetPulley(3)
While IsMoving
Sleep(10)
Wend
End If

Call SpinSpindle

End Sub

'------------------------------------------------------------------------------------

Sub LowGear

DoSpinStop() 'wylancza obroty
While IsMoving
Sleep(10)
Wend

Call ZeroSpid ' przechodzi do sprawdzenia czy wrzeciono zatrzymane

Message "WłACZ 1 Bieg MAX Obroty od 261 do 800 obr/min"

curenttime = Timer
While Not (IsActive(OEMTRIG4) And IsActive(OEMTRIG7))

If Timer > czasWbiciaBiegu + curenttime Then 'odlicza czas na potwierdzenie wbicia biegu
SetSpinSpeed(0) 'zeruje zadana poprzednią predkosc wrzeciona
SetSpinSpeed(0)
DoOEMButton(1003) 'wciska stop po przekoroczeniu czasu wbicia biegu
MsgBox"ŁAZISZ JAK TO ku*** PO WSI - A BIEG KTO ZMIENI"
End
End If

Sleep(10)
Wend
End Sub

'------------------------------------------------------------------------------------

Sub HighGear

DoSpinStop()
While IsMoving
Sleep(10)
Wend

Call ZeroSpid

Message "WŁĄCZ 2 Bieg MAX Obroty od 97 do 260 obr/min"

curenttime = Timer
While Not (IsActive(OEMTRIG5) And IsActive(OEMTRIG7))

If Timer > czasWbiciaBiegu + curenttime Then
SetSpinSpeed(0)
SetSpinSpeed(0)
DoOEMButton(1003)
MsgBox"ŁAZISZ JAK TO ku*** PO WSI - A BIEG KTO ZMIENI"
End
End If

Sleep(10)
Wend
End Sub

'------------------------------------------------------------------------------------

Sub HHighGear

DoSpinStop()
While IsMoving
Sleep(10)
Wend

Call ZeroSpid

Message "WŁĄCZ 3 Bieg MAX Obroty od 10 do 96 obr/min"

curenttime = Timer
While Not (IsActive(OEMTRIG6) And IsActive(OEMTRIG7))

If Timer > czasWbiciaBiegu + curenttime Then
SetSpinSpeed(0)
SetSpinSpeed(0)
DoOEMButton(1003)
MsgBox"ŁAZISZ JAK TO ku*** PO WSI - A BIEG KTO ZMIENI"
End
End If

Sleep(10)
Wend
End Sub

'------------------------------------------------------------------------------------

Sub SpinSpindle
Sleep(100)
Message "Włanczam odbroty = " & GetRPM() & ". Obr/min NO I TERA BEDZIE BUM!!!"
SetSpinSpeed( SpinCW )
DoSpinCW()
While IsMoving
Sleep(10)
Wend
End Sub

'------------------------------------------------------------------------------------

Sub ZeroSpid ' do sprawdzenia czy wrzeciono zatrzymane
curenttime = Timer
While GetUserDro(1600) > 0 ' pobiera dane o obrotach

If Timer > czasZatrzymania + curenttime Then 'jesli przekroczy czas
DoOEMButton(1021) ' wywali reset
Sleep(150)
Message"Przekroczono czas zatrzymania wrzeciona"
End
End If

Sleep(10)
Wend
End Sub


krzysiekgrab
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 2
Posty: 741
Rejestracja: 16 lip 2008, 15:07
Lokalizacja: Polska, Augustow

#6

Post napisał: krzysiekgrab » 26 sie 2016, 09:23

Jeżeli chodzi o odczyt stanu przycisków, to zależy jakie to przyciski - możemy to zrobić odczytując stan ledów - getuserled - dużo przycisków jest powiązanych z ledami....
&#8222;Jeżeli nie znasz portu do którego płyniesz,
to żadne wiatry nie będą Ci sprzyjać&#8221;

Programowanie sterowników PLC Fatek, HMI Weintek, sterowniki maszyn CNC, Mach3;


Autor tematu
amator_25852
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 5
Posty: 16
Rejestracja: 04 kwie 2016, 22:50
Lokalizacja: PL

#7

Post napisał: amator_25852 » 28 sie 2016, 10:34

Chcę sterować zmianą biegów za pomocą fizycznych przycisków na pulpicie, mam już dwa makra odpowiadające za wrzucenie poszczególnych biegów. Nie wiem jednak jak podpiąć je pod fizyczne przyciski.
Jak to zrealizować aby po pojawieniu się sygnału (Input#X czy OemTrig#X) dane makro było wykonywane?


krzysiekgrab
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 2
Posty: 741
Rejestracja: 16 lip 2008, 15:07
Lokalizacja: Polska, Augustow

#8

Post napisał: krzysiekgrab » 28 sie 2016, 13:01

Trzeba dodać na pulpiit dwa przyciski, do których trzeba przypisać wykonywanie makra, a potem przy pomocy menu operator/edit button script przypisać do niego dane makro.

korzystając z oemtrigów możemy wywołać jedno makro jeżeli dobrze pamiętam. Le teoretycznie możemy jednym dzielonym makrem możemy to wykonać - uruchamiamy to samo makro dwoma przyciskami, tylko sprawdzamy, które wejście jest aktywowane ->wówczas wykonujemy przypisane do danego wejścia część makra...
&#8222;Jeżeli nie znasz portu do którego płyniesz,
to żadne wiatry nie będą Ci sprzyjać&#8221;

Programowanie sterowników PLC Fatek, HMI Weintek, sterowniki maszyn CNC, Mach3;


dziabi3
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 2
Posty: 874
Rejestracja: 13 sie 2009, 16:15
Lokalizacja: xxx

#9

Post napisał: dziabi3 » 03 wrz 2016, 12:04

[ Dodano: 2016-09-03, 12:11 ]
krzysiekgrab pisze:Trzeba dodać na pulpiit dwa przyciski
On chce dwa przyciski fizyczne nie wirtualne na ekranie



Da się to zrobić ale przez macropump.

Sprawdzamy w nim czy pojawił się sygnał i wywołujemy komendą coode "M20" (to przykład)

Wywołanie musi odbyć się raz , czyli należy zrobić blokadę aby makro nie mogło zostać powtórnie wywołane dopóki się nie zakończy.

Krótko mówiąc jest to możliwe ale trzeba się trochę napisać.


Przykład :

'----------------------------------------------------------------------------------------------
'Wywołanie makr zmiany biegów
'----------------------------------------------------------------------------------------------

If Not GetOEMLED(800) Then

'Idle + Spindle off + VFD off
'----------------------------------------------
If Not GetOEMLED(804) And Not GetOEMLED(80) And GetOemDRO(DroRPM) = 0 Then

'Klawisz Neutralnego biegu
'----------------------------------------------
If GetIOIn_II(Bieg_N) Then 'Detekcja wciśniętego klawsza zmiany biegu
If Not Blok_Rep_N Then 'Zabezpieczenie aby klawisz tylko raz wywołał macro
Blok_Rep_N = true
If (Not GetIOIn_II(Bieg_I) And Not GetIOIn_II(Bieg_II) And Not GetIOIn_II(Bieg_III) And Not GetIOIn_II(Bieg_IV)) Then 'Zabezpieczenie przed wciśnieciem wiecej niż 1 klawisza 'Aktywacja blokady opisanej wyżej
If GetUserLed(Led_Bieg) = 0 Then 'Zabezpiecznie aby macro niemogło zostać wielokrotnie wywołane w jednym czasie
SetUserLed(Led_Bieg, 1) 'Aktywacja blokady opisanej wyżej
Code"M40" 'Wywołanie macra
End If
End If
End If
Else
Blok_Rep_N = false 'Jeśli klawisz zwolniony blokada zostaje zdjeta
End If


'Klawisz pierwszego biegu
'----------------------------------------------
If GetIOIn_II(Bieg_I) Then
If Not Blok_Rep_I Then
Blok_Rep_I = true
If (Not GetIOIn_II(Bieg_N) And Not GetIOIn_II(Bieg_II) And Not GetIOIn_II(Bieg_III) And Not GetIOIn_II(Bieg_IV)) Then
If GetUserLed(Led_Bieg) = 0 Then
SetUserLed(Led_Bieg, 1)
Code"M41"
End If
End If
End If
Else
Blok_Rep_I = false
End If

'Klawisz drugiego biegu
'----------------------------------------------
If GetIOIn_II(Bieg_II) Then
If Not Blok_Rep_II Then
Blok_Rep_II = true
If (Not GetIOIn_II(Bieg_I) And Not GetIOIn_II(Bieg_N) And Not GetIOIn_II(Bieg_III) And Not GetIOIn_II(Bieg_IV)) Then
If GetUserLed(Led_Bieg) = 0 Then
SetUserLed(Led_Bieg, 1)
Code"M42"
End If
End If
End If
Else
Blok_Rep_II = false
End If

'Klawisz trzeciego biegu
'----------------------------------------------
If GetIOIn_II(Bieg_III) Then
If Not Blok_Rep_III Then
Blok_Rep_III = true
If (Not GetIOIn_II(Bieg_I) And Not GetIOIn_II(Bieg_II) And Not GetIOIn_II(Bieg_N) And Not GetIOIn_II(Bieg_IV)) Then
If GetUserLed(Led_Bieg) = 0 Then
SetUserLed(Led_Bieg, 1)
Code"M43"
End If
End If
End If
Else
Blok_Rep_III = false
End If

'Klawisz czwartego biegu
'----------------------------------------------
If GetIOIn_II(Bieg_IV) Then
If Not Blok_Rep_IV Then
Blok_Rep_IV = true
If (Not GetIOIn_II(Bieg_I) And Not GetIOIn_II(Bieg_II) And Not GetIOIn_II(Bieg_III) And Not GetIOIn_II(Bieg_N)) Then
If GetUserLed(Led_Bieg) = 0 Then
SetUserLed(Led_Bieg, 1)
Code"M44"
End If
End If
End If
Else
Blok_Rep_IV = false
End If
End If
End If


A to jedno z wywoływanych makr

'---------------------------------------------------------------------------------------------------------------------------------
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
'---------------------------------------------------------------------------------------------------------------------------------

'Input
'-------------------------------
Const GoraLewaSw = 12
Const GoraPrawaSw = 11
Const DolLewaSw = 9
Const DolPrawaSw = 10
Const NeutralSw = 13

'Output
'-------------------------------
Const GoraLewaZaw = 4
Const GoraPrawaZaw = 5
Const DolLewaZaw = 6
Const DolPrawaZaw = 7
Const NeutOnZaw = 9
Const NeutOffZaw = 8

Const Lamp_N = 0
Const Lamp_I = 1
Const Lamp_II = 2
Const Lamp_III = 3
Const Lamp_IV = 4

'Stałe
'-------------------------------
Const delay = 10
Const DroRPM = 39
Const SpindlePulley = 56
Const Led_Bieg = 1100 'numer dro blokady macr M20-M24
Const timecheck = 8000 'Czas na pojawienie sie sygnału czujników
Const zwlokaStopWrze = 20000 'Czas na zatrzymanie wrzeciona
Const MinRpmSpin = 900 'Min obroty wrzeciona

'Zmienne
'-------------------------------
Dim curenttime As Long
Private ObrZap As Long

'----------------------------------------------------------------------------------------------------------------------------------

Sub Main

'----------------------------------------------------------------------------------------------------------------------------------

'Blokada aby ie można było wywołać makra z przycisku
'----------------------------------------------
SetUserLed(Led_Bieg, 1)

'Wrzeciono Stop
'----------------------------------------------
DeActivateSignal(output1)
DeActivateSignal(output2)

'Czekam na zerowe obroty
'----------------------------------------------
curenttime = GetTickCount
While Not GetOEMDro(DroRPM) = 0
If GetTickCount > zwlokaStopWrze + curenttime Then
If Not GetOEMLed(800) Then
DoOEMButton(1021)
End If
Sleep(150)
Message"M40 > Wrzeciono nadal pracuje"
Sleep(150)
Call EndEnd
End If
Wend

'Minimalne obroty wrzeciona
'----------------------------------------------
ObrZap = GetRPM()
SetOemDro(SpindlePulley, 10)
sleep(50)
'----------------------------------------------
SetSpinSpeed(MinRpmSpin/(GetOemDro(74)/100))

'Wyłaczenie biegu Neutralnego
'---------------------------------------------
Call SetCsmioOut(NeutOffZaw, true) 'OFF
Call SetCsmioOut(NeutOnZaw, false) 'ON

'Górny zabiera w lewo
'---------------------------------------------
Call SetCsmioOut(GoraPrawaZaw, false) 'OFF
Call SetCsmioOut(GoraLewaZaw, true) 'ON

Sleep(200)
ActivateSignal(output1)
Sleep(800)
DeActivateSignal(output1)

If Not (WaitForCsmioIn((GoraLewaSw), true, (timecheck))) Then
If Not GetOemLed(800) Then
DoOemButton(1021)
End If
Sleep(150)
Message"M40 > Brak sygnału górnego wybierak - lewa krancówka"
Sleep(150)
Call EndEnd
End If

'Załaczenie biegu Neutralnego
'---------------------------------------------
Call SetCsmioOut(NeutOffZaw, false) 'OFF
Call SetCsmioOut(NeutOnZaw, true) 'ON

'Przywrucenie poprzednich wywołanych obrotów
'---------------------------------------------
SetSpinSpeed(ObrZap)

Sleep(200)
ActivateSignal(output1)
Sleep(800)
DeActivateSignal(output1)

If Not (WaitForCsmioIn((NeutralSw), true, (timecheck))) Then
If Not GetOemLed(800) Then
DoOemButton(1021)
End If
Sleep(150)
Message"M40 > Brak sygnału górnego wybierak - środkowa krancówka"
Sleep(150)
Call EndEnd
End If


'Wywołanie odpowiedniego SP
'---------------------------------------------
SetOemDro(SpindlePulley, 10)

'Zapalenie odpowiedniej kontrolki na pulpicie
'---------------------------------------------
Call SetIOOut_II(Lamp_N, true) 'ON
Call SetIOOut_II(Lamp_I, false)
Call SetIOOut_II(Lamp_II, false)
Call SetIOOut_II(Lamp_III, false)
Call SetIOOut_II(Lamp_IV, false)

'Koniec makra i zgaszenie diody kontroli.
'----------------------------------------------
SetUserLed(Led_Bieg, 0)
End

'----------------------------------------------------------------------------------------------------------------------------------

End Sub

'----------------------------------------------------------------------------------------------------------------------------------
'Funkcją łaczoca dziłanie zwykłego "End i wyłaczenia diody kontroli trwania zmiany biegu,

Sub EndEnd
SetUserLed(Led_Bieg, 0)
Call SetIOOut_II(Lamp_N, false)
Call SetIOOut_II(Lamp_I, false)
Call SetIOOut_II(Lamp_II, false)
Call SetIOOut_II(Lamp_III, false)
Call SetIOOut_II(Lamp_IV, false)
End
End Sub

'---------------------------------------------------------------------------------------------------------------------------------
'CSMIO/IP-S/A in WaitFor

Public Function WaitForCsmioIn (c_in As Integer, state As Boolean, tout_ms As Long) As Boolean
Dim t_ms As Long
Dim in_save As Integer

in_save = c_in
t_ms = GetTickCount ' Get system time (miliseconds)
While true
' Check CSMIO input state
If(GetCsmioIn(c_in) = state) Then
WaitForCsmioIn = true
Sleep(delay)
Exit Function
End If
' Check for time out
If(GetTickCount - t_ms) > tout_ms Then
WaitForCsmioIn = false
Exit Function
End If
' restore input number
c_in = in_save
' Sleep to prevent excessive CPU load
sleep(20)
Wend
End Function
'---------------------------------------------------------------------------------------------------------------------------------
'CSMIO/IP-S/A in

Public Function GetCsmioIn (n As Integer) As Boolean
Dim reg As Integer
Dim tmp As Integer

tmp = n

If(tmp < 16) Then
reg = 90
Else
reg = 91
tmp = tmp - 16
End If

If(GetInBit(reg, tmp)) Then
GetCsmioIn = true
Else
GetCsmioIn = false
End If
Exit Function
End Function
'---------------------------------------------------------------------------------------------------------------------------------
'CSMIO/IP-S/A out

Public Sub SetCsmioOut (ByVal n As Integer, ByVal state As Boolean)
If(state) Then
SetOutBit(90, n)
Else
ResetOutBit(90, n)
End If
End Sub
'---------------------------------------------------------------------------------------------------------------------------------
'CSMIO-IO in

Public Function GetIOIn (n As Integer) As Boolean

If(GetInBit(100, n)) Then
GetIOIn = true
Else
GetIOIn = false
End If
Exit Function
End Function

'---------------------------------------------------------------------------------------------------------------------------------
'CSMIO-IO out

Public Sub SetIOOut (ByVal n As Integer, ByVal state As Boolean)
If(state) Then
SetOutBit(100, n)
Else
ResetOutBit(100, n)
End If
End Sub

'------------------------------------------------------------------------------------------------------------
'CSMIO-IO_II out

Public Sub SetIOOut_II (ByVal n As Integer, ByVal state As Boolean)
If(state) Then
SetOutBit(101, n)
Else
ResetOutBit(101, n)
End If
End Sub
Mach3 + CSMIO = :-) :-) :-)

Awatar użytkownika

k-m-r1
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 4
Posty: 1418
Rejestracja: 23 cze 2008, 10:38
Lokalizacja: OOL lub DW
Kontakt:

#10

Post napisał: k-m-r1 » 03 wrz 2016, 16:00

Po co 2 przyciski?
Nie ma innej opcji jak bieg 1 bieg 2.
1 gałka do biegów wystarczy.

1 makro
1 przycisk
+ kontrola tego co sie dzieje tak jak dziabi3, przytoczył krótkie makro.

Makro sprawdza która przekładnia jest aktualnie i zmienia na przeciwną.
MACH3 cncTworzenie Makr do palników magazynków THC OHC inneEKRANY dla firm producentów maszyn Budowa sprzedaż wypalarki plazma gaz obrotnice Elektrodrążarki Frezarki Tokarki Giętarki3D inne wg zlecenia 888 703 196 Tomek Komor [email protected]

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Mach 2 / 3 / 4 (ArtSoft software)”