Mach3 automatyczna zmiana przełożenia.
-
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:
-
- 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]
-
Autor tematu - Czytelnik forum poziom 1 (min. 10)
- Posty w temacie: 5
- Posty: 16
- Rejestracja: 04 kwie 2016, 22:50
- Lokalizacja: PL
-
- 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]
-
- 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
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 2
- Posty: 741
- 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....
„Jeżeli nie znasz portu do którego płyniesz,
to żadne wiatry nie będą Ci sprzyjać”
Programowanie sterowników PLC Fatek, HMI Weintek, sterowniki maszyn CNC, Mach3;
to żadne wiatry nie będą Ci sprzyjać”
Programowanie sterowników PLC Fatek, HMI Weintek, sterowniki maszyn CNC, Mach3;
-
Autor tematu - Czytelnik forum poziom 1 (min. 10)
- Posty w temacie: 5
- Posty: 16
- Rejestracja: 04 kwie 2016, 22:50
- Lokalizacja: PL
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 2
- Posty: 741
- 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...
„Jeżeli nie znasz portu do którego płyniesz,
to żadne wiatry nie będą Ci sprzyjać”
Programowanie sterowników PLC Fatek, HMI Weintek, sterowniki maszyn CNC, Mach3;
to żadne wiatry nie będą Ci sprzyjać”
Programowanie sterowników PLC Fatek, HMI Weintek, sterowniki maszyn CNC, Mach3;
-
- 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 =




-
- 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]