Mach3 automatyczna zmiana przełożenia.
-
amator_25852
Autor tematu - 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.
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.
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:
-
k-m-r1
- ELITA FORUM (min. 1000)

- Posty w temacie: 4
- Posty: 1417
- Rejestracja: 23 cze 2008, 10:38
- Lokalizacja: OOL lub DW
- Kontakt:
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()[b]MACH3 cnc[/b]Tworzenie Makr do palników magazynków THC OHC inne[b]EKRANY dla firm producentów maszyn[/b] Budowa sprzedaż wypalarki plazma gaz obrotnice Elektrodrążarki Frezarki Tokarki Giętarki3D inne wg zlecenia 888 708 196 Tomek Komor [email protected]
-
amator_25852
Autor tematu - Czytelnik forum poziom 1 (min. 10)

- Posty w temacie: 5
- Posty: 16
- Rejestracja: 04 kwie 2016, 22:50
- Lokalizacja: PL
-
k-m-r1
- ELITA FORUM (min. 1000)

- Posty w temacie: 4
- Posty: 1417
- Rejestracja: 23 cze 2008, 10:38
- Lokalizacja: OOL lub DW
- Kontakt:
Nie
[b]MACH3 cnc[/b]Tworzenie Makr do palników magazynków THC OHC inne[b]EKRANY dla firm producentów maszyn[/b] Budowa sprzedaż wypalarki plazma gaz obrotnice Elektrodrążarki Frezarki Tokarki Giętarki3D inne wg zlecenia 888 708 196 Tomek Komor [email protected]
-
andmar2005
- Specjalista poziom 1 (min. 100)

- Posty w temacie: 1
- Posty: 190
- Rejestracja: 15 sie 2009, 08:55
- Lokalizacja: kujawsko-pomorski
- Kontakt:
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
'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)

- Posty w temacie: 2
- Posty: 743
- Rejestracja: 16 lip 2008, 15:07
- Lokalizacja: Polska, Augustow
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....
Programowanie sterowników PLC Fatek, Samkoon, Leadshine, HMI Weintek,Samkoon; budowa sterowników maszyn CNC, Mach3/Mach4; Automatyzacja
-
amator_25852
Autor tematu - Czytelnik forum poziom 1 (min. 10)

- Posty w temacie: 5
- Posty: 16
- Rejestracja: 04 kwie 2016, 22:50
- Lokalizacja: PL
-
krzysiekgrab
- Specjalista poziom 3 (min. 600)

- Posty w temacie: 2
- Posty: 743
- Rejestracja: 16 lip 2008, 15:07
- Lokalizacja: Polska, Augustow
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...
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...
Programowanie sterowników PLC Fatek, Samkoon, Leadshine, HMI Weintek,Samkoon; budowa sterowników maszyn CNC, Mach3/Mach4; Automatyzacja
-
dziabi3
- Specjalista poziom 3 (min. 600)

- Posty w temacie: 2
- Posty: 874
- Rejestracja: 13 sie 2009, 16:15
- Lokalizacja: xxx
[ Dodano: 2016-09-03, 12:11 ]
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
On chce dwa przyciski fizyczne nie wirtualne na ekraniekrzysiekgrab pisze:Trzeba dodać na pulpiit dwa przyciski
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 =

-
k-m-r1
- ELITA FORUM (min. 1000)

- Posty w temacie: 4
- Posty: 1417
- Rejestracja: 23 cze 2008, 10:38
- Lokalizacja: OOL lub DW
- Kontakt:
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ą.
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ą.
[b]MACH3 cnc[/b]Tworzenie Makr do palników magazynków THC OHC inne[b]EKRANY dla firm producentów maszyn[/b] Budowa sprzedaż wypalarki plazma gaz obrotnice Elektrodrążarki Frezarki Tokarki Giętarki3D inne wg zlecenia 888 708 196 Tomek Komor [email protected]




