Strona 1 z 1

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

: 07 sty 2018, 01:04
autor: jacikb
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

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

: 17 sty 2018, 17:58
autor: djronin
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.

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

: 19 sty 2018, 09:23
autor: jacikb
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

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

: 19 sty 2018, 20:39
autor: k-m-r1
Po co wyłamywać drzwi skoro to rozwiązanie jest wbudowane w program. Po co wymyślać coś co działa???