Visual Basic

Sezione dedicata a Mach3
Rispondi
munand
Senior
Senior
Messaggi: 1497
Iscritto il: lunedì 3 dicembre 2007, 17:13
Località: Vicenza

Visual Basic

Messaggio da munand » venerdì 24 aprile 2009, 9:28

Apro questo post per avere de chiarimenti su alcuni comandi di Visual Basic per mach3.
Innanzi tutto il mio fine è di realizzare un programmini per il cambio utensile, questo programmino esistendo già  in forma incompleta per permettere ai vari utenti di personalizzarlo a piacere.
Per scriverlo utilizzo VB Script Editor lo si trova all'interno di Mach3.

Mi sto cimentando nel capire come funziona l'input nelle varie porte.
Prima cosa in Mach3 setto in "Ports and Pins" L'input, Input1= pin 13 e porta 1, nel programma scritto in Visual Basic non rieasco a vedere lo stato del Input 1
Ho provato scrivendo la seguente riga :

Var1=Input1
MsgBox Var1

Ma mi da sempre il valore 18

Mi potete aiutare?

munand
Senior
Senior
Messaggi: 1497
Iscritto il: lunedì 3 dicembre 2007, 17:13
Località: Vicenza

Re: Visual Basic

Messaggio da munand » venerdì 24 aprile 2009, 19:51

Qualcuno sa darmi una dritta su come posso leggere con Visual Basic lo stato del IMPUT#1

velleca55

Re: Visual Basic

Messaggio da velleca55 » venerdì 24 aprile 2009, 19:57

Ti faccio compagnia ... :cry: ... ma non so aiutarti ... #-o ...

Avatar utente
enrico04239
God
God
Messaggi: 4525
Iscritto il: martedì 26 giugno 2007, 17:47
Località: Genova Isoverde
Contatta:

Re: Visual Basic

Messaggio da enrico04239 » venerdì 24 aprile 2009, 22:59

mi dispiace ma per me stai entrando nel difficile, non so aiutarti.
Comunque seguirò con interesse, ora siamo in due a farti compagnia.

Hai provato a dare un'occhiata al post che c'è in evidenza in questa sezione?
Linguaggio MACRO per Mach3 - ITALIANO ...
Ciao Enrico
Il sapere e la ragione parlano il torto e l'ignoranza urlano.

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Visual Basic

Messaggio da Pedro » venerdì 24 aprile 2009, 23:21

con le macro ci si fa poco se non associare dei comandi, macro appunto, a dei bottoni sullo schermo, leggere valori dro, offsettare o fare degli spostamenti . Se si vuole leggere un pin di input, e poi elaborarlo, si deve usare il "brain" di mach3 che comunica con i vari input ed output e associa una funzione entro mach3. Il programma da usare è il mach3lobe.exe, compreso in mach. E' abbastanza intuitivo: si mette un imput, si associa una operazione (o se non si vuole non la si associa e il comando passa dritto a mach) e si da un output. L'input, mnemonico, conviene associarlo a un input sulla porta quindi nel tuo caso che so input#1 per il pin che userai dal pannello di configurazione di mach. Fatto ciò, dai un nome a questo brain che sarà  salvato nella directory brain sotto mach. RIlanci mach e controlli sotto "operator>brain control" dal menù di mach3 se correttamente caricato...poi cosa accade a quell'input dipende da cosa vuoi farci; puoi metterlo in una macro o lasciare ad esempio che il brain faccia di per lui già  qualcosa tipo attivare a sua volta una uscita
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

munand
Senior
Senior
Messaggi: 1497
Iscritto il: lunedì 3 dicembre 2007, 17:13
Località: Vicenza

Re: Visual Basic

Messaggio da munand » sabato 25 aprile 2009, 0:28

Ho letto ma rileggerò domani adesso è tardi ..

Quello che non capisco è che con Output lo si può fare direttamente:
ActivateSignal(Output1)

In pratica questa istruzione attiva l'uscita 1 e perchè non si può fare direttamente con Input? a me serve per il cambio utensili e prima di eseguire delle operazioni devo verificare, con una condizione, in che stato è l'imput.

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Visual Basic

Messaggio da Pedro » sabato 25 aprile 2009, 1:10

ho capito: non è che devi far avvenire qualcosa quando il pin è attivo, in qual caso servirebbe il brain, ma testare quando vuoi tu il pin. La funzione che ti serve è la funzione

Function IsActive (sigNo as Integer) as Boolean

torna, essendo boleana, o true o false e signal number, se associ il tuo pin all'input 1, sarà  18. Quindi se tu metti

variabile = IsActive(18)

ti verrà  messo in variabile o true o false secondo se quel pin sarà  attivo o disattivo (e dallla configurazione scegli tu se attivo è alto o basso)
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

munand
Senior
Senior
Messaggi: 1497
Iscritto il: lunedì 3 dicembre 2007, 17:13
Località: Vicenza

Re: Visual Basic

Messaggio da munand » sabato 25 aprile 2009, 8:26

Grazie Pedro, se vuoi la verità  non ho capito, scusami non è colpa tua.

Non so cos'è il Brain .

Mi sembra di aver capito che sulla variabile troverò memorizzato un True o false, risultato della funzione che hai scritto:

Function IsActive (sigNo as Integer) as Boolean
variabile = IsActive(18)

In pratica questa serie di istruzioni verifica lo stato di una porta Input, ma quale porta, la 1 ,2 3,...?

Il valore "18" l'ho messo perché era il valore della variabile del mio esempio di sopra.

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Visual Basic

Messaggio da Pedro » sabato 25 aprile 2009, 8:45

colpa mia che mi sono spiegato forse di fretta

allora, il brain di mach(è compreso nel pacchetto mach) è un modo per far "entrare" dei segnali in mach o leggere comandi di modbus. Nel tuo caso questo in efffeti non serve, avevo capito male io in quanto sei tu che vai a testare un pin e non è il pin che ad un certo tempo provoca l'evento...dimentichiamo quindi il brain


Function IsActive (sigNo as Integer) as Boolean

è quello che si chiama prototipo della funzione cioè come è strutturata (è una function e non una call, ad esempio) e il valore che restituisce (un boleano in questo caso)

variabile = IsActive(18)

è come si usa. Variabile è un mnemonico nostro, puoi scriverci quello che vuoi al suo posto. 18 invece è la costante di input1 (parola riservata, costante, che ti ritorna, come tu hai visto, proprio il numero 18...scivere per esempio a=18 o a=input1 da lo stesso risultato in parole povere)

spero di essermi spiegato meglio :)
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

munand
Senior
Senior
Messaggi: 1497
Iscritto il: lunedì 3 dicembre 2007, 17:13
Località: Vicenza

Re: Visual Basic

Messaggio da munand » sabato 25 aprile 2009, 9:39

Grazie, il discorso Brain l'ho capito ed è molto interessate, magari lo svilupperemo più avanti o in un'altro post, se ti va.

Se ho capito bene quando scrivo l'istruzione che mi hai descritto avrò sulla variabile ( per esempio "var10") un "vero" o "falso" che posso verificare con una istruzione di condizione IF THEN ELSE.

Ho provato a scrivere la seguente istruzione

var10 = IsActive(18) ' assegno alla variabile Var10

MsgBox var10 ' visualizzo a video con un messaggio il cntenuto di var10


Come risultato ho un messaggio con true, essendo la porta imput non in corto.


Quello che mi chiedo è se devo o no scrivere anche :

Function IsActive (sigNo as Integer) as Boolean

Perché se la scrivo mi da err di sintax.


Tenghiù

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Visual Basic

Messaggio da Pedro » sabato 25 aprile 2009, 9:46

no, non devi perchè quella definizione di struttura della funzione è già  definita da sistema, e se la riscrivi da ovviamente errore. Però è importante sapere come una funzione è definita, quindi serve a noi, perchè ci dice sia come si entra nella funzione, appunto è una function e basta la chiamata implicita mentre se fosse stata una sub sarebbe stata necessaria una call, e quale valore essa torna

parrebbe ok allora per adesso, vero? :)
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

munand
Senior
Senior
Messaggi: 1497
Iscritto il: lunedì 3 dicembre 2007, 17:13
Località: Vicenza

Re: Visual Basic

Messaggio da munand » sabato 25 aprile 2009, 11:28

Allora, innanzitutto Grazie e spero possa servire anche ad altri per questo ho fatto delle prove e ho capito quanto segue.

Ogni input da parallela di solito noi assegniamo un numero di pin, le macro invece va a verificare lo stato con l'istruzione :

IsActive(Num)

Il numero tra parentes può essere da 0(zero) in su, ho notato che se noi andiamo a vedere su Mach3/config/ports and pins/imputs signal il 0 corrisponde a X++, l'1 a X-- il 2 a Home X e così via fino a trovare :

Imput1 Num=18
Input2 Num=19
...

Estop Num =25

ecc.

Se assegno una variabile al contenuto di IsActive(num) otterrò una stringa false/true.

Domanda per usare una variabile con questo contenuto su una condizione sono obbligato ad usare una condizione
IF the Else e confrontarla con una stringa tipo "TRUE" oppure c'è una funziona dedicata?

Ho scritto queste due righe per capire come funziona, lo allego se magari a qualcuno può interessare per capire meglio, sperando che non faccia l'opposto, confusione.



'Macro Verifica stato Imput Mach3
Sub Main()

var10 = IsActive(0) 'Restituisce stato X++ vero falso
var11 = IsActive(1) 'Restituisce stato X--
var12 = IsActive(2) ' Restituisce stato Home X
var13 = IsActive(3) 'Restituisce stato Y++ vero falso
var14 = IsActive(4) 'Restituisce stato Y--
' continua in progressione come lista su Ports and Pins
var18 = IsActive(18) 'Restituisce stato Imput1 vero falso
var19 = IsActive(19) 'Imput2
var20 = IsActive(20) 'Imput3
var21 = IsActive(21) 'Imput4

Var25 = IsActive(25) ' EStop
' E così via fino alla fine della lista

MsgBox var18 ' visualizza Box con lo stato(true/false) dell'imput1


If Var18=True Then
MsgBox "Vero"
Else
MsgBox "falso"
End If

End Sub
Main




Allego anche il file, per lanciarlo da mac bisogna chiamare la macro con M765
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Visual Basic

Messaggio da Pedro » sabato 25 aprile 2009, 11:51

bene allora :)


per la funzione if........

la funzione if già  di per se assume un operatore logico, cioè if operatore logico se vero esegue il then se falso esegue l'else.


Mi spiego: se scrivo if Prova then (esegui qualcosa).......else(esegui qualcosa altro).......end if

significa se Prova contiene un valore true (vero) eseguirà  qualcosa se false(falso) qualcosa d'altro. Prova può essere o una costante di tipo boleano o un operatore logico come il maggiore o minore o uguale (che a sua volta torna ovviamente o true o false). Quindi se scrivo if 5>3 then..... siccome 5 è veramente maggiore di 3 allora eseguirà  le funzioni di then.



Tornando al nostro esempio da te riportato


se si vuole usare l'if direttamente con una variabile, o costante, boleana si può scrivere semplicemente:


if IsActive(Num) then.......

perchè di per se, essendo il valore ritornato dalla funzione IsActive boleano, è corretta come sintassi. Quindi dove tu scrivi

If Var18=True Then
MsgBox "Vero"
Else
MsgBox "falso"
End If

che è corretto può essere comunque sostituito con:

If Var18 Then
MsgBox "Vero"
Else
MsgBox "falso"
End If

che anche è corretto uguale ma risparmia una comparazione (tempo macchina)


Aggiungo, per comodità  di chi volesse, l'elenco delle "costanti" di sistema. Notare che usare o il mnemonico o il valore è la stessa cosa




OUTPUT1 7
OUTPUT2 8
OUTPUT3 9
OUTPUT4 10
OUTPUT5 11
OUTPUT6 12
OUTPUT7 16
OUTPUT8 17
OUTPUT9 18
OUTPUT10 19
OUTPUT11 20
OUTPUT12 21
OUTPUT13 22
OUTPUT14 23
OUTPUT15 24
OUTPUT16 25
OUTPUT17 26
OUTPUT18 27
OUTPUT19 28
OUTPUT20 29
DIGTRIGGER 0
ENABLE1 1
ENABLE2 2
ENABLE3 3
ENABLE4 4
ENABLE5 5
ENABLE6 6
CHARGE 13
CHARGE2 14
CURRENTHILOW 15
XPLUS 0
XMINUS 1
XHOME 2
YPLUS 3
YMINUS 4
YHOME 5
ZPLUS 6
ZMINUS 7
ZHOME 8
APLUS 9
AMINUS 10
AHOME 11
BPLUS 12
BMINUS 13
BHOME 14
CPLUS 15
CMINUS 16
CHOME 17
INPUT1 18
INPUT2 19
INPUT3 20
INPUT4 21
DIGITIZE 22
INDEX 23
LIMITOVER 24
EMERGENCY 25
THCON 26
THCUP 27
THCDOWN 28
OEMTRIG1 29
OEMTRIG2 30
OEMTRIG3 31
OEMTRIG4 32
OEMTRIG5 33
OEMTRIG6 34
OEMTRIG7 35
OEMTRIG8 36
OEMTRIG9 37
OEMTRIG10 38
OEMTRIG11 39
OEMTRIG12 40
OEMTRIG13 41
OEMTRIG14 42
OEMTRIG15 43
TIMING 44
JOGXP 45
JOGXM 46
JOGYP 47
JOGYM 48
JOGZP 49
JOGZM 50
JOGAP 51
JOGAM 52
HOMING 53
PROBING 54
START 55


sperando possa essere stato utile e chiaro
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

munand
Senior
Senior
Messaggi: 1497
Iscritto il: lunedì 3 dicembre 2007, 17:13
Località: Vicenza

Re: Visual Basic

Messaggio da munand » sabato 25 aprile 2009, 13:11

Ancora grazie adesso il discorso If... mi è molto chiaro ma scusami se insisto nel chiederti ancora delle delucidazioni.

E' molto utile l'elenco delle costanti.
Nel caso delle costanti che vanno da 0 a
XSTART(01) a START(55) mi è chiaro e ho capito che scrivendo

IsActive (XSTART) O IsActive(01) è la stessa cosa ( ho verificato quindi è corretto)


Non mi trovo invece con l'altra serie di costanti , quella che va da Output1 a Start55, come le uso non penso con Isactive()?

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Visual Basic

Messaggio da Pedro » sabato 25 aprile 2009, 17:04

quello è l'elenco delle "costanti" di sistema che puntano alle "variabili" di sistema, come ho scritto. NB non è un controsenso parlare di costanti e di variabili nello stesso contesto perchè noi vediamo che input1 corrisponde alla costante 18 che ci punta alla variabile che contiene il valore letto associato all'input numero 1. E' una costante perchè se facciamo un print di input1, come fatto da te, ci darà  sempre 18 ma il contenuto della variabile identificata da quella costante, 18 appunto, è una variabile. Ovvio che una variabile di input verrà  letta da un comando di input come una di otput verrà  comandata da un comando di output....


Però una variabile di output, una volta scritta o comunque sempre, può essere letta da un comando di lettura, magari ad inizio programma per vedere la variabile come è impostata o come il programma al punto dell'esecuzione della macro come ha settato quella variabile di output. Ovvio che una di input si può modificare solo da contatto o segnale comunque esterno
Ultima modifica di Pedro il sabato 25 aprile 2009, 17:20, modificato 2 volte in totale.
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Rispondi

Torna a “Mach3”