Strona 1 z 1

Makro / CSMIO - problem...

: 02 kwie 2018, 16:21
autor: Czepek
Witam,
mam jak dla mnie dziwny problem i nie mogę sobie z nim poradzić.
Dla przykładu stworzyłem makro które nie działa jak powinno.

Sekwencja powinna wyglądać tak: po wywołaniu start silnika, najazd na czujnik i wyłączenie silnika.

O ile silnik startuje to nie zatrzymuje się na czujniku. CSMIO sygnalizuje załączenie czujnika, ale silnik nie staje.
Przypuszczam, że problem leży w składni kodu VB....

Kod: Zaznacz cały

    'Deklaracja wejść
    Const CZUJNIK_1 = 17              'CSMIO input

    'Deklaracja wyjść
    Const SILNIK_1 = 12                'CSMIO output

    'Załączenie silnika
    Call SILNIK()

End Sub


Function SILNIK()
    Call SetCsmioOut(SILNIK_1, True)        'załączenie silnika
    If GetCsmioIn(CZUJNIK_1, True) Then
        Call SetCsmioOut(SILNIK_1, False)   'wyłączenie silnika
    End If
End Function


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

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

    If (GetInBit(reg, n)) Then
        GetCsmioIn = True
    Else
        GetCsmioIn = False
    End If
    Exit Function
End Function

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
Kolejny problem to, że gdy wyjście silnika nie jest wpisane w Ports&Pins makro nie uruchamia silnika....
Ja już zgłupiałem, z tego co wiem powinienem nie wpisywać w Machu a tylko odwoływać się w makro bezpośrednio do wyjść.

Pozdrawiam.

Re: Makro / CSMIO - problem...

: 09 maja 2018, 05:59
autor: andmar2005
co to jest "n"
poza tym Panowie z cismo pomogą jak zadzwonisz

Re: Makro / CSMIO - problem...

: 06 maja 2020, 12:48
autor: grekot
Oczekiwanie na zadziałanie czujnika musisz zrobić w pętli While

Function SILNIK()
Call SetCsmioOut(SILNIK_1, True) 'załączenie silnika

'OCZEKIWANIE NA ZADZIAŁANIE CZUJNIKA
While Not GetCsmioIn(CZUJNIK_1)
Sleep(15)
Wend

Call SetCsmioOut(SILNIK_1, False) 'wyłączenie silnika
End If
End Function

Re: Makro / CSMIO - problem...

: 07 maja 2020, 21:10
autor: qqaz
Dobrym zwyczajem jest wstawienie dodatkowego warunku kończącego pętlę
While coś lub jakieś inne
bo może się na coś nie doczekać i z pętli nie wyjdzie
a Mach tymczasem zakończył program i operator ładuje następny Gkod nie mając pojęcia że po załadowaniu pojawi się w nim nowe coś które zakończy pętle cały czas czekającą w tle która uruchomi reakcję z poprzedniego programu.
To chodzi pod Windows!