Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Releji i visual basic

[es] :: Visual Basic 6 :: Releji i visual basic

Strane: 1 2

[ Pregleda: 5283 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Kiter

Član broj: 128170
Poruke: 25
86.61.93.*



Profil

icon Releji i visual basic07.04.2008. u 22:35 - pre 194 meseci
Imam uređaj koji se spaja na com port, dakle, relej sa 8 'dioda' - kad je recimo 1. upaljen, onda 1. svijetli i tako redom do 8 :)

Ne mogu preko visual basica zadati naredbu da ukljuci 2 te žaruljice odjednom, već samo jednu.
A to ide preko neke varijable recimo:

a$ = chr(3) + chr(0) + chr(0) + chr(3) ---> to je recimo da se upali 1. dioda

b$ = chr(3) + chr(1) + chr(0) + chr(6) ---> to je recimo da se upali 2. dioda

- onda ovu varijablu (recimo a$) saljem na mscomm. komponentu (koja se povezuje preko com porta na uređaj) i upali se 1. dioda

Ali ne mogu istovremeno upalit obadvije! Ako pošaljem ove dvije varijable, pročita prvih 4 znakova i opet zasvijetli prva i dalje ništa.
Kako to riješiti?
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
77.46.182.*



+1 Profil

icon Re: Releji i visual basic07.04.2008. u 23:54 - pre 194 meseci
Na 3, 0, 0, 3 se pali prva, a na 3, 1, 0, 6 druga...

Imas li semu tog uredjaja, ili bar neko uputstvo?

Moras znati zasto se za paljenje jedne diode salje 4 bajta.

Jer da je tako jednostavno slao bi se samo jedan bajt i sa njim bi se pokrile sve kombinacije. Za svaki bit po jedna dioda, ukupno 256 kombinacija.

Moja predpostavka je da je 3 - signal za inicijalizaciju ili promenu stanja, jer se javlja u oba primera.

Sad samo jos da se provali za sta sluze ostala 3 bajta.

Mogao bi da nam postavis i kombinacije za ostale diode, mozda se nesto da i zakljuciti iz toga.
 
Odgovor na temu

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: Releji i visual basic08.04.2008. u 07:28 - pre 194 meseci
Da dobro bi bilo da posaljes i ostale kombinacije. Moguce je recimo da se sa trecim bajtom koji je 0 gase ostale diode pa zato ne mozes upaliti dve od jednom.
Probavaj razne kombinacije i prati.
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.49.*



Profil

icon Re: Releji i visual basic08.04.2008. u 08:16 - pre 194 meseci
Evo ovako, jucer sam napisao one chr$ za primjer, a evo i tocnih:
Code:

If led = "0" Then send$ = Chr$(3) + Chr$(0) + Chr$(0) + Chr$(3): GoTo prikaz
If led = "1" Then send$ = Chr$(3) + Chr$(1) + Chr$(1) + Chr$(3): GoTo prikaz
If led = "2" Then send$ = Chr$(3) + Chr$(1) + Chr$(2) + Chr$(0): GoTo prikaz
If led = "3" Then send$ = Chr$(3) + Chr$(1) + Chr$(4) + Chr$(6): GoTo prikaz
If led = "4" Then send$ = Chr$(3) + Chr$(1) + Chr$(8) + Chr$(10): GoTo prikaz
If led = "5" Then send$ = Chr$(3) + Chr$(1) + Chr$(16) + Chr$(18): GoTo prikaz
If led = "6" Then send$ = Chr$(3) + Chr$(1) + Chr$(32) + Chr$(34): GoTo prikaz
If led = "7" Then send$ = Chr$(3) + Chr$(1) + Chr$(64) + Chr$(66): GoTo prikaz
If led = "8" Then send$ = Chr$(3) + Chr$(1) + Chr$(128) + Chr$(130): GoTo prikaz
prikaz:
MSComm1.Output = send$


Znači, ukoliko je led = "0" onda su sve diode ugašene. Ako je 1 onda je 1. dioda upaljena i tako do 8.
Ja trebam dobit da se dvije zajedno upale (kao što sam i prije napomenuo).

U uputstvima (koje sada ne mogu naci) je ispisan ovaj program dolje i koliko znam, nista konkretno ne pise.

A ovo je program koji sam dobio sa uređajem, preko njega sam i dosao do tih chr$. Uglavnom, cini mi se da ovaj program u jednom slucaju upali nekoliko lampica zajedno (ne mogu ovo sa sigurnoscu reci jer ne mogu isprobati program - kao da je kompjuteru prebrz :) isprobao sam ga pred par godina na drugom kompjuteru):
Code:


CLS: CLEAR
DIM inbuf(800)
DIM outbuf(8)
OPEN "com2:19200,n,8,1,bin,cs,ds" FOR RANDOM AS #1

'----- INTERRUPT SERIAL INTERFACE ON -----
COM(2) ON
ON ERROR GOTO BADCOM
ON COM(2) GOSUB GETFRAME

'----- INITIALIZE RELAIS BOARD -----
PRINT "INITIALIZE BOARD"
outbuf(0) = 1: outbuf(1) = 1: outbuf(2) = 0: GOSUB sendframe
FOR delay = 1 TO 1000000: NEXT: CLS

'----- SWITCH RELAIS -----
teststart:
r = 1
rt:
outbuf(0) = 3: outbuf(1) = 1: outbuf(2) = r: GOSUB sendframe
FOR delay = 1 TO 1000000: NEXT: CLS
r = r * 2: IF r < 256 THEN GOTO rt
GOTO teststart

'||||| SERIAL COMMUNICATION |||||
'---------------------------------
'----- READ 4 BYTE DATAFRAME -----
'---------------------------------
GETFRAME:
inbuf(bz) = ASC(INPUT$(1,#1))
bz = bz + 1
IF bz = 4 THEN GOTO checkframe
RETURN
'----- CHECK VALIDITY -----
checkframe:
ERROR$ = "ERROR"
IF inbuf(0) XOR inbuf(1) XOR inbuf(2) = inbuf(3) THEN
ERROR$ = "OK"
bz = 0: PRINT "RECEIVED:"; "  "; inbuf(0); "  "; inbuf(1); "  "; inbuf(2); "  "; inbuf(3); "  "; ERROR$
PRINT "-----------------------------------------------------------------": RETURN
END IF
'---------------------------------
'----- SEND 4 BYTE DATAFRAME -----
'---------------------------------
sendframe:
outbuf(3) = outbuf(0) XOR outbuf(1) XOR outbuf(2)
send$ = CHR$(outbuf(0)) + CHR$(outbuf(1)) + CHR$(outbuf(2)) + CHR$(outbuf(3))
PRINT #1, send$
PRINT "TRANSMITTED: "; "  "; outbuf(0); "  "; outbuf(1); "  "; outbuf(2); "  "; outbuf(3)
RETURN

'***** ERROR HANDLER *****
BADCOM:
PRINT "----- DATA ERROR -----"
RESUME
RETURN

ende:
END



I još nešto:
Code:

send$ = Chr$(3) + Chr$(1) + Chr$(1) + Chr$(3) -----> pali 1. diodu
send1$ = Chr$(3) + Chr$(1) + Chr$(128) + Chr$(130) -----> pali 8. diodu
MSComm1.Output = send$
MSComm1.Output = send1$



- ovaj kod bi trebao upaliti prvu diodu i osmu diodu, međutim, upali samo 1. diodu... ali pokušao sam stavit jednostavnu petlju kojom mu napravim neki delay, recimo ovako:
Code:

send$ = Chr$(3) + Chr$(1) + Chr$(1) + Chr$(3)
MSComm1.Output = send$

For i = 1 To 100000000
Next i

send1$ = Chr$(3) + Chr$(1) + Chr$(128) + Chr$(130)
MSComm1.Output = send1$

- onda pali 1. diodu, ceka cirka 2 sekunde i upali 8. diodu (ali 1. diodu ugasi)

Došao sam do zaključka da on sa jednim chr$ gasi sve ostale diode (što ste i vi pretpostavili), tj. barem se nadam da je tako, sada još treba otkriti koji je to chr$, jer sam vec sve probao izmjeniti i ne mogu to dobiti. Hvala!



Skuzio sam nest, hmm...

Code:

send$ = Chr$(3) + Chr$(1)
MSComm1.Output = send$


Kada ucitam ovu funkciju dva puta, onda pali prve dvije diode. A dalje sad ne znam :)

A mogu i zadat ovako:
Code:

send$ = Chr$(3) + Chr$(1) + Chr$(3) + Chr$(1)

---------> moze biti i send$ = Chr$(3) + Chr$(0) + Chr$(3) + Chr$(0)


Onda pali prve dvije odmah :) Trazim dalje... ako tko ima prijedlog, neka napise!

[Ovu poruku je menjao Aleksandar Ružičić dana 08.04.2008. u 16:27 GMT+1]
 
Odgovor na temu

djpero.84
Pero Knezevic
Prijedor

Član broj: 120188
Poruke: 190
*.teol.net.

Sajt: www.littlefrog.ba


Profil

icon Re: Releji i visual basic08.04.2008. u 11:11 - pre 194 meseci
Probaj ovako:
Code:

send$ = "0"
MSComm1.Output = send$

sta si sad dobio?

[Ovu poruku je menjao Aleksandar Ružičić dana 08.04.2008. u 16:28 GMT+1]
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.48.*



Profil

icon Re: Releji i visual basic08.04.2008. u 11:15 - pre 194 meseci
Na ovo ne trza uopce, ne pali ni jednu! A niti ne gasi nista.
 
Odgovor na temu

djpero.84
Pero Knezevic
Prijedor

Član broj: 120188
Poruke: 190
*.teol.net.

Sajt: www.littlefrog.ba


Profil

icon Re: Releji i visual basic08.04.2008. u 11:33 - pre 194 meseci
Samo mi reci koji port pokreces i koliko diodica imas pa cu ti dati drugaciji prijedlog.
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.49.*



Profil

icon Re: Releji i visual basic08.04.2008. u 11:37 - pre 194 meseci
Com2, napisao sam vec gore da relej ima 8 diodica. Ja trebam dobit da se 2 istovremeno upale, ali one koje ja zadam (recimo 1. i 4., pa 5. i 8.).

Sa programom koji sam dobio sa uređajem mogu palit sve diodice, i odjednom vise njih (to nije program koji sam gore naveo, vec neki njihov .exe s kojim mozes jednostavno slozit skriptu kak ce se palit sta, ali meni bas treba u visual basicu jer imam neke dodatne funkcije).
 
Odgovor na temu

djpero.84
Pero Knezevic
Prijedor

Član broj: 120188
Poruke: 190
*.teol.net.

Sajt: www.littlefrog.ba


Profil

icon Re: Releji i visual basic08.04.2008. u 12:17 - pre 194 meseci
Nadji na internetu "port.dll" ili "port32.dll" ucitas ga, deklarises outport i inport funckije. Takodje imas i "inpout32.dll". Evo ti link

http://logix4u.net/Legacy_Port...for_Windows_98/2000/NT/XP.html

Sluzi i za Com port, samo upisi adresu Com porta
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.49.*



Profil

icon Re: Releji i visual basic08.04.2008. u 12:33 - pre 194 meseci
Da li mi mozes malo konkretnije objasniti kako se s ovim radi? Ne kuzim bas :) Hvala! Sada isprobavam...

Nasao sam adresu com2 porta (valjda) i upisao i ispise mi 255. Hm:) Sto sad dalje?

[Ovu poruku je menjao Kiter dana 08.04.2008. u 13:44 GMT+1]
 
Odgovor na temu

djpero.84
Pero Knezevic
Prijedor

Član broj: 120188
Poruke: 190
*.teol.net.

Sajt: www.littlefrog.ba


Profil

icon Re: Releji i visual basic08.04.2008. u 13:42 - pre 194 meseci
Ako je 255, onda ti on vraca da su sve upaljene ali vjerovatno to nije tako.....

Standardna adresa tvog COM1 porta 3F8

- udji u BIOS i pogledaj konfiguraciju portova, i tamo ces naci na koji IRQ i Adresu ti je dodjeljen COM2, ako taj koristis.

onda upisi tu adresu (bez &H) u textbox1 i pritisni "IN" i dobices status. Tako ces skontati koji ti broj odgovara izlazu/ulazu na COM portu,
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.49.*



Profil

icon Re: Releji i visual basic08.04.2008. u 14:31 - pre 194 meseci
Hm, u biosu sam samo nasao 2F8/IRQ3 --> za com2 port. I sad upisem taj 2F8 i pritisnem IN i dobijem '255'. A gdje si uzeo da bi uopce morao biti taj &H, tj. da upisem bez toga, jer ja nisam uopce niti naisao na to.
 
Odgovor na temu

djpero.84
Pero Knezevic
Prijedor

Član broj: 120188
Poruke: 190
*.teol.net.

Sajt: www.littlefrog.ba


Profil

icon Re: Releji i visual basic08.04.2008. u 14:42 - pre 194 meseci
Da, bez toga upisi, zavisno od ploce, jer se inace adresa tako pise ...... upisi samo "2F8". Skini te ledove sa Com porta, pa pokusaj ponovo, morao bi ti dati vrijednost 0
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
77.46.182.*



+1 Profil

icon Re: Releji i visual basic08.04.2008. u 15:17 - pre 194 meseci
0 = 3, 0, 0, 3
1 = 3, 1, 1, 3
2 = 3, 1, 2, 0
3 = 3, 1, 4, 6
4 = 3, 1, 8, 10
5 = 3, 1, 16, 18
6 = 3, 1, 32, 34
7 = 3, 1, 64, 66
8 = 3, 1, 128, 130

Moja predpostavka je da je brvi bajt za promenu stanja, drugi za broj sijalica, treci pokazuje na sijalice, ali cetvrti mi i nije bas najjasniji za sta sluzi, ali je u vecini slucajeva to 3 bajt uvecan za 2.

Jedna od navedenih kombinacija bi trebala da upali prvu i osmu sijalicu:

3, 2, 129, 131

3, 1, 129, 131

Code:

128  64  32  16  8   4   2   1
 o   o   o   o   o   o   o   o

128  64  32  16  8   4   2   1
 x   o   o   o   o   o   o   x = 129

128  64  32  16  8   4   2   1
 x   x   x   x   x   x   x   x = 255


Treci bajt racunas tako sto sabiras vrednosti iznad sijalica koje zelis da upalis!

S tim da je vrednost 1 verovatno iznad prve sijalice s' desne strane, u suprotnom ti vrednosti idu od 1 do 128 umesto od 128 do 1.

Mislim da nema potrebe za citanje com porta, sve komande tom uredjaju mozes poslati i preko MSCOMM, koji je i mnogo jednostavniji za koriscenje od API f-ja.
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.49.*



Profil

icon Re: Releji i visual basic09.04.2008. u 11:04 - pre 194 meseci
3, 1, 129, 131

Pali 1. i 8. diodu.

Veliko hvala!!
Sad moram racunat, ak mi nesto ne bude jasno se javim :)
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.48.*



Profil

icon Re: Releji i visual basic09.04.2008. u 11:42 - pre 194 meseci
Ajd molim te, malo pojasni ovo racunanje, ne mogu sad izracunat recimo za 2. i 5. heh:))
Otkud 131 na kraju? Kuzim da je to treci bajt uvecan za 2, ali pogledaj:

3, 1, 130, 132
- ovo bi trebalo upaliti 2. i 8. diodu jel? Ali nista se ne desava. Hmm...

Ako zbrajam se desne strane, onda pali sve po redu, recimo:
3, 1, 240, 242
- pali 5,6,7,8 diodu

--------------------------------------------
Skuzio sam sad:
znaci
3, 1, 132, 134
- pali 3. i 8. diodu

3, 1, 130, 128 (jer je tamo kod 2. diode na kraju 2, 0 - pa sam ovaj 130 umanjio za 2 i radi)
- pali 2. i 8. diodu

[Ovu poruku je menjao Kiter dana 09.04.2008. u 13:14 GMT+1]

[Ovu poruku je menjao Kiter dana 09.04.2008. u 13:17 GMT+1]
 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.48.*



Profil

icon Re: Releji i visual basic09.04.2008. u 12:40 - pre 194 meseci
Nakon 'otkrića' kako se dvije diode pale istovremeno, naisao sam na novi problem:)

Imam datoteku sadrzaja:
01081214

Ovu datoteku ovako ucitavam u visual basic:
- prve dvije znamenke ucita u textbox1, znaci 01 (što predstavlja prvu diodu koja se mora upaliti)
- druge dvije znamenke ucita u textbox2, znaci 08 (što predstavlja drugu diodu koja se mora upaliti)
- sljedece dvije znamenke oznacavaju koliko sekundi mora biti upaljena prva dioda (ucitam u textbox3)
- i zadnje dvije znamenke oznacavaju koliko sekundi mora biti upaljena druga dioda (ucitam u textbox4)

Problem je, kako zadati sad funkciju da recimo, istovremeno se upale 1. i 8. dioda (u ovom slucaju), te da se nakon 12 sekundi ugasi prva dioda, a nakon 14 sekundi ugasi druga dioda bez prekidanja određene diode?




 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
77.46.182.*



+1 Profil

icon Re: Releji i visual basic09.04.2008. u 14:34 - pre 194 meseci
3, 1, 129, 132

Pa posle 12 sekundi:

3, 1, 128, 130

a zatim za gasenje:

3, 0, 0, 3

Znaci nema gasenja, nego uvek postavljas novo stanje...
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
77.46.182.*



+1 Profil

icon Re: Releji i visual basic09.04.2008. u 20:17 - pre 194 meseci
Zaboravih da ti kazem da ako hoces da stopiras program na neko vreme nije pametno da stavis iteraciju koja ce ti napraviti zauzece procesora od 100% i biti zavisna od brzine masine na kojoj se izvrsava, vec probaj to da resis sa TIMER-om ili sa API f-jom Sleep ili SleepEx iz KERNEL32.DLL.

Znaci ne:
Code:

For i = 0 to 1000000
Next i


nego:
Code:

' U globalnim deklaracijama
Private Declare Function SleepEx Lib "kernel32" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long
' i u programu
SleepEx 1000, False ' gde je 1000 = vreme za koje hoces da stopiras izvrsenje u milisekundama


 
Odgovor na temu

Kiter

Član broj: 128170
Poruke: 25
80.80.48.*



Profil

icon Re: Releji i visual basic10.04.2008. u 12:34 - pre 194 meseci
Ok, sve razumijem, i ubacio sam ovaj timer za pauzu i radi sve.

E sad jos samo moram to isprogramirat. Nemam bas ideje kako poceti, posto imam 4 textboxa (opisana u gornjem slucaju). Sada bih morao sa 'IF' naredbom ispitati sve moguce situacije ili postoji kakva bolja ideja? Jer ono if textbox1 = "01" and textbox2 = "02" then ukljuci_prvu_i_drugu_diodu mi se ne cini bas pametno:) a jos tu treba i sekunde ubaciti...
 
Odgovor na temu

[es] :: Visual Basic 6 :: Releji i visual basic

Strane: 1 2

[ Pregleda: 5283 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.