VB Script nie mogę zwrócić nic w funkcji

Dyskusje dotyczące najpopularniejszego programu sterującego maszynami CNC

Autor tematu
jacikb
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 2
Posty: 88
Rejestracja: 16 gru 2009, 14:09
Lokalizacja: Łódź
Kontakt:

VB Script nie mogę zwrócić nic w funkcji

#1

Post napisał: jacikb » 07 sty 2018, 01:04

Pisze skrypt do skanowania powierzchni czystej PCB. Potem to będę chciał nałożyć na GCOD do grawerowania - ale to później :)

Teraz mam problem z VB i składnią.
Nie mogę nic zwrócić nic z funkcji - wywala błąd
w VB pisze pierwszy raz więc proszę o wyrozumiałość ;)


Function Probe(ByVal X As Integer, ByVal Y as Integer) As Double

Dim ZPos as Double ' Nic nie daje
.......
ZPos = GetOEMDRO (802) 'Get Z

Return ZPos <- SYNTAX ERROR zaznacza mi zmienną
End Function

Dodane 2 godziny 21 minuty 7 sekundy:
W opisie MS jest Return wartość. Natomiast tu trzeba przypisać do nazwy funkcji ;)
Probe = ZPos

Już całość działa ale mam błędne odczyty z osi X i Y

Osie X i Y dawno stoją a zapisują się wartości jak by była w trakcie ruchu.
Z Zapisuje poprawnie
x = GetOEMDRO (800)
y = GetOEMDRO (801)
z = GetOEMDRO (802)
Write #1, x , y, z



Awatar użytkownika

djronin
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 262
Rejestracja: 22 kwie 2011, 01:19
Lokalizacja: Jarocin

Re: VB Script nie mogę zwrócić nic w funkcji

#2

Post napisał: djronin » 17 sty 2018, 17:58

Function Probe(ByVal X As Integer, ByVal Y as Integer) As Double
Ten kawałek tworzy funkcje i określa jej parametry wejściowe, lecz w tej formie raczej się nie zda.
Function Probe(ByVal X As Integer, ByVal Y as Integer) As Double

komenenda Function tworzy funkcję po niej podajemy nazwę funkcji nasze Probe i jeśli funkcja Probe przyjmuje jakieś zmienne deklarujemy je w nawiasie jeśli nie zostawiamy pusty nawias ( Function Probe() )
w Twoim przykładzie zainicjowałeś tylko dwie zmienne i to ostatnie As Double jakby zbędnne..
Pozatym widzę że przekazujesz funkcji zmienne dla wartości x y i jako typ danych wskazujesz na Integer co mi średnio pasuje z racji narury tego typu znaków. W dużym skrócie to typy danych wyglądają następująco (ich część (to nie poradnik :)):

kilka typów zmiennych, ich nazwa i zakres:

liczby zmiennoprzecinkowe np -123.765, 999.999
Single = –3.402823538 do 3.402823538
Double = –1.79769313486231570308 do 1.79769313486231570308

liczby całkowite: -1, -4, 8, 100, 1000
Long = –9,223,372,036,854,775,808 do 9,223,372,036,854,775,807
Integer = –2,147,483,648 do 2,147,483,647

String = łańcuch znaków np "www.cnc.info.pl"
char = przechowuje pojedyńczy znak np : 'a'

byte = 0..255 jeden bajt pamięci
Boolean = True, False (logiczne zero lub jedynka logiczna 0, 1)

Deklarując zmienne typu integer dla osi XY w funkcji Probe ograniczasz dokładność danych do 1 co nie jest raczej pożądane.
lepiej zastosować single albo double.

Dim ZPos as Double ' Nic nie daje
Choć wydawać się może, że ten kod nie działa, tak naprawdę jest jak najbardziej poprawny i działa.
Dim to deklaracja zmiennej
ZPos nazwa zmiennej
as przypisanie typu zmiennej
double typ zmiennej
ZPos = GetOEMDRO (802) 'Get Z
tutaj do zmiennej zpos została wprowadzona wartość pozycji osi Z
Return ZPos <- SYNTAX ERROR zaznacza mi zmienną
End Function
w ten sposób nie wyświetlisz wartości ZPos
możesz wykorzystać komendę MsgBox i jako jej jedyny argument podać jakiś text w cudzysłowiu, lub zmienną bez cudzysłowia np
MsgBox "hello world"
MsgBox "Pozycja Z: " & ZPos & "mm"

a to że jakaś komenda lub funkcja zwraca coś to wyglądać mże to np:

Kod: Zaznacz cały

Public Sub MsgPrint (ByVal sMsg As String, ByVal iType As Integer, ByVal sTitle As String)
    iMsgBack = MsgBox(sMsg, iType, sTitle)
End Sub
w tym przykładzie funkcja MsgBox zwraca wartość zakończenia do zmiennej typu integer o nazwie iMsgBack.

Dodane 56 minuty 40 sekundy:
To as double na początku wygląda jak deklaracja wartosci zwracanej przez funkcje. Przez co mogłem namieszać trochę. Sprawdzę to później.
...Programowanie ma to do siebie, że urzeczywistnienie nawet najbardziej
oczywistego pomysłu jest znakomitą definicją słowa "frustracja"...


Autor tematu
jacikb
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 2
Posty: 88
Rejestracja: 16 gru 2009, 14:09
Lokalizacja: Łódź
Kontakt:

Re: VB Script nie mogę zwrócić nic w funkcji

#3

Post napisał: jacikb » 19 sty 2018, 09:23

rezultat funkcji już działa i pobieranie Z ale odczyt w innej funkcji X i Y nie działa albo działa z opóźnieniem.
Mogę X i Y bo jest znany przed wywołaniem dać jako parametr ale chciałem mieć taka uniwersalna funkcje do zrzutu X Y Z do pliku

Awatar użytkownika

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

Re: VB Script nie mogę zwrócić nic w funkcji

#4

Post napisał: k-m-r1 » 19 sty 2018, 20:39

Po co wyłamywać drzwi skoro to rozwiązanie jest wbudowane w program. Po co wymyślać coś co działa???
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)”