[ mrHenkey @ 17.07.2009. 20:10 ] @
| Pozdrav svima.
Totalno sam nov u VB2008 programiranju, a pomoc mi hitno treba.
Potrebno je da cifre koje saljem racunaru iz mikrokontrolera prikazem u tri odvojena dijela. Napravio sam tri RichTextBox-a, ali ne znam koje komande trebam kucati za prijem podataka. Primjeri na internetu su vezani, uglavnom, za mscomm koji se koristio u ranijim verzijama VB-a, a malo je primjera sa Serialport tool-om.
Svaka pomoc je dobro dosla. |
[ bobby63 @ 19.07.2009. 19:23 ] @
Da bi citao seriski port mozes da koristis events ili u novom threadu da citas podatke iz seriskog porta. Obe metode imaju prednosti i mane ali evo ti sta treba za event metodu.
Nazvacemo tool ComPort
Prvo negde moras do otvoris seriski port. Code: If ComPort.IsOpen = False Then ComPort.Open()
Zatim ti trebaju taj event i sub koji obradjuje podatke (poziva se preko delegata) Code: Public Delegate Sub myDelegate()
Public Shared SerialIN as Byte
Public Sub ComPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles ComPort.DataReceived
If ComPort.BytesToRead > 0 Then SerialIN = (ComPort.ReadByte())
Invoke(New myDelegate(AddressOf ProcessSerialData), New Object() {})
End Sub
Sub ProcessSerialData()
'Ovde Obradjujes podatke i pises po Controlama ako treba
End Sub
Ovaj primer radi citanje podataka bajt po bajt
[ zivadin_despot @ 31.07.2009. 09:34 ] @
Pozdrav,
mene interesuje kako da u VB 2008, ako imam neki proces koji kao rezultat daje vreme, da to vreme iskoristim i toliko da drzi otvoren jedan od izlaza na paralelnom portu (LPT)?
Da kazem samo da sam pocetnik...
Hvala unapred
[ zivadin_despot @ 31.07.2009. 17:33 ] @
Nije valjda da niko nema neki savet o ovome, mislim da ovo nije og zna kako komplikovano.....
[ icobh @ 31.07.2009. 21:29 ] @
Nisi dobro formulisao pitanje, zato možda niko ne odgovara. Znači, šta tebi treba, da dok process traje da ti držiš port otvoren, ili da rezultat neke metode/funkcije, koje je vrijeme, iskoristiš da u narednom periodu otvoriš port i držiš ga otvorenim toliko vremena?
[ zivadin_despot @ 01.08.2009. 10:14 ] @
Ovo drugo, imam rezultat neko vreme i kasnije da iskoristim to, toliko vremena da drzim otvoren port, u nekom slucaju cu ja sam mozda uneti vreme koje ce se gledati se kao rezultat i opet ce port biti kasnije otvoren to vreme...
Interesuje me kako uopste da komadnujem portom, kojim funkcijama...
Da mozda bude lakse i meni i vama, evo primer;
Otvorim aplikaciju na kojoj ce biti TextBox i Button, u TextBox unosi vreme (npr 5 sec) i kada kliknem na Button da on drzi otvoren port narednih 5 sec.
Ako moze code...
Kada skontam na ovom primeru, nadam se da cu i ovo prvo...
Hvala unapred
[ icobh @ 01.08.2009. 12:40 ] @
Pa sad, sa COM portom je lako raditi u .NET okruženju ali sa LPT portom se malo teže radi. Evo baci pogled ovdje http://support.microsoft.com/?kbid=823179
[ zivadin_despot @ 01.08.2009. 17:04 ] @
E da budem jasniji sta mi treba
U txtUnos treba da unesem vreme
i kada kliknem ukljuci da on ukljuci port i ostavi ukljucen za uneto vreme
Ako je lakse moze objasnjenje i za COM port, svejedno mi je...
Nije valjda ovo tako ozbiljan programski zahtev???
[ zivadin_despot @ 02.08.2009. 09:33 ] @
Izleda da je ovo ne resivo :(....
[ bobby63 @ 02.08.2009. 10:21 ] @
Najjednostavnije.
Prevuces u formu tajmer.
Startujes tajmer sa vremenom koje si ukucao.
Kada se tajmer startuje nakon tog vremena u njemu stavis da zatvori taj port ili sta ti vec treba.
Relativno lako ce da ukapiras kako se koristi tajmer.
[ zivadin_despot @ 02.08.2009. 13:54 ] @
Nije meni proble da ukljucim i iskljucim timer vec kako da pristupim portu, kako da ga otvorim i kako zatvorim.....
Znaci problem je pristup portu i nista vise, samo otvaranje i zatvaranje...
Hvala na brzom odgovoru, samo nastavi :)
Za kasnije probleme javim, ako bude bilo...
[ Boško @ 02.08.2009. 15:04 ] @
Kako je taj tvoj kontroler povezan sa računarom?
Ne vidim kako bi bilo svejedno ako je komunikacija serijska ili paralelna. To su dve totalno različite stvari.
Ako je paralelna, a verovatno nije, priča je prilično komplikovana. Najbolje bi bilo da koristiš neku biblioteku sa neta, npr. inpout32.
http://logix4u.net/Legacy_Port...for_Windows_98/2000/NT/XP.html
Ako je serijska, bobby63 ti je već napisao
Code: If ComPort.IsOpen = False Then ComPort.Open()
Zatvara se slično
Code: If ComPort.IsOpen = True Then ComPort.Close()
A kako ćeš dalje komunicirati sa svojim kontrolerom je druga priča. To ti niko ne može pomoći dok ne vidi kontroler (njegov komunikacijski protokol).
[ bobby63 @ 03.08.2009. 12:43 ] @
Takodje sumnjam da je u pitanju paralelni port, mogucnost postoji, ali je malo verovatno.
[ zivadin_despot @ 03.08.2009. 20:50 ] @
Nemam nikakav kontroler, samo malo eksperimentisem, za neke kasnije radove....
Sa kolegom sam proverio, trebace nam ipak LPT port, naime evo sta treba da uradim na lpt cu vezati 1 diodu, i zelim da je preko programa upalim, i to je to... Znaci onaj gore primer, kada unesem vreme i kada kliknem ukljuci da dioda svetli vreme koje sam uneo....
Unapred hvala...
[ bobby63 @ 04.08.2009. 11:32 ] @
Evo upravo ta primena
I/O Ports Uncensored - 1 - Controlling LEDs (Light Emiting Diodes) with Parallel Port
http://www.codeproject.com/KB/cs/csppleds.aspx?msg=2275543
[ zivadin_despot @ 04.08.2009. 21:00 ] @
Hvala, nasao sam sta treba....
Evo da napisem da ostale, ako jos nekom treba...
Program ukljucuje LPT1 ili LPT2 i iskljucuje
Mora se kopirati inpout32.dll na c:\windows\system i na c:\windows\system32
Code: Imports System
Imports System.Runtime.InteropServices
Public Class Form1
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Out(&H378, 255)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Out(&H3BC, 255)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Out(&H378, 0)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Out(&H3BC, 0)
End Sub
End Class
"Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short"
definise se funkcija
"Out(&H378, 255)" izlaz na LPT1 (adresa:&H378), 255 (11111111) ukljucuje sve portove
&H3BC je adresa LPT2 porta
Da napomenem: 255(11111111) 8 linija tkz data lines se obicno koriste za izlaz (out) adresa (888)((&H378)
sledecih 4 [15(1111)] tkz control lines adresa 890
sledece 5 [31(11111)] tkz status lines obicno se koriste za ulaz (in) adresa 889
Ovo je nesto malo ukratko....
Evo korisnog linka http://www.aaroncake.net/electronics/vblpt.htm
[Ovu poruku je menjao zivadin_despot dana 05.08.2009. u 01:46 GMT+1]
[ adopilot @ 08.08.2009. 22:57 ] @
Možda će ovaj odgovor biti malo OFF,
Moja velika peporuka da se projekte gdije nam treba dodir sa stvarnim svijetom izvan softwera (korišenje outputa i inputa u naponskom obliku)
korise uređaji specijalne namjene za takvo nešto. Kao što su USB kontrolori.
Danas je cijena jednog takvog uređaja ispod 50 eura a isiti dođe sa predefinisanim driverima i funkcijama za različite programske jezike.
Poslije toga je na programreru da se uključi u riješavanje pravih problema, to jeste kada propustiti neki napon a kada ne i kada uhvatiti neki input.
Mi smo uradili vlastiti projekat kontrole rampe (Parkingmanagment) gdije se jedan ovakav uređaj sa pet digitalnih i dva analogna inputa i isto toliko ouputa pokazao perfeknim.
Iako je isti urađen u kučnoj radinosti ono "elektro pjonir" dobiješ ploču i elemente pa sam lemiš i sastavljaš.
[ zivadin_despot @ 12.08.2009. 16:25 ] @
Pozdrav, ponovo ja....
Interesuj me sledece, nikako ne mogu da resim, na prve dve linije vezem diode i hocu da se jedna upali 3 puta u sekundi a druga 10 puta, ali da zajedno rade 1 sekudnu, ne prvo 1 pa druga... Kako got da uradim to svaka vodi svoju politiku. Naime muci me kako da otvorim 1 liniju a da druge ne diram da rade sta rade, ako bi ukucao 10000000 ukljucio bi jednu ali bi ostale ogasio, a to necu....
Nasao sam negde da se prvo iscita stanje pa se doda ona koju ja zelim pa se taj rezultat salje kao izlaz, ali opet ne radi, brljave da je to strasno....
Unapred hvala na svakoj pomoci....
[ zivadin_despot @ 12.08.2009. 19:40 ] @
ES je nekada bio brzi sa odgovorima..... Sta se desava, nije valjda da i ovde utice Svetska kriza :(
[ icobh @ 12.08.2009. 19:55 ] @
Pogledaj malo Thread-ove u C#
[ zivadin_despot @ 13.08.2009. 11:49 ] @
Nisam se uspeo snaci, moze li jos neka pomoc... Kako bi izgledalo u vb?
[ Boško @ 13.08.2009. 13:25 ] @
Evo npr. ovako:
Code: Private StanjeLPTPorta As Integer
Private PortID As String = 378 'Najčešće je lpt1
Private Sub PaliDiodu(ByVal KojuDiodu as Integer)
StanjeLPTPorta = StanjeLPTPorta Or (2 ^ (KojuDiodu - 1))
Out(Val("&H" & PortID), StanjeLPTPorta)
End Sub
Private Sub GasiDiodu(ByVal KojuDiodu as Integer)
StanjeLPTPorta = StanjeLPTPorta And (255 - (2 ^ (KojuDiodu - 1)))
Out(Val("&H" & PortID), StanjeLPTPorta)
End Sub
Public Sub GasiSve()
StanjeLPTPorta = &H0
Out(Val("&H" & PortID), StanjeLPTPorta)
End Sub
Public Sub PaliSve()
StanjeLPTPorta = &HFF
Out(Val("&H" & PortID), StanjeLPTPorta)
End Sub
I koristi malo više Google. Sve može da se pronađe veoma lako. Mada je najlakše kad neko to uradi umesto tebe.
[ zivadin_despot @ 13.08.2009. 17:51 ] @
Pokusavao sam, al' mi je tesko islo. Nije da sam lenj nego nisam nista nasao :)
Hvala, probacu ovo, pa javim....
Pozdrav
[ zivadin_despot @ 13.08.2009. 18:59 ] @
Bosko nije mi jasno kako ti ovde proveravas stanje porta, po ovome 2 ^ (KojuDiodu - 1) ja palim diodu koju hocu ali ostale gasim, ispravi ako gresim....
Da li si negde StanjeLPTPorta definisao tako da cita stanje porta ili ne? Malko mi je nejasno...
Da ponovim, meni treba evo ovako da dve diode rade, to jest' da se jedna upali 10 puta u sekundi a druga 2 puta.... Evo ovo ako resimo sve ostalo mi je reseno dalje....
Ako imate neki link, ali da ovu temu resava, moze...
Hvala,
nadam se da nisam naporan, a i ako malo jesam progledajte mi kroz prste ;)
[ Boško @ 14.08.2009. 11:23 ] @
Nema šta da proveravaš stanje porta. Startuješ program i pozoveš f-ju GasiSve. Tako si StanjeLPTPorta postavio na nulu.
Kada hoćeš da upališ diodu na pinu 4 (to je dioda br. 3) kažeš: PaliDiodu(3) i ta će da svetli sve dok ne pozoveš GasiDiodu(3), a sve to je nezavisno od ostalih dioda. U međuvremenu možeš da pališ i gasiš ostale koliko hoćeš.
[ zivadin_despot @ 14.08.2009. 13:32 ] @
Bosko, radi izvini sbog sumnje :)
Jel mi mozes objasniti ove korake
StanjeLPTPorta = StanjeLPTPorta Or (2 ^ (KojuDiodu - 1))
StanjeLPTPorta je ovde promenljiva koja nema vrednost gore je definisana kao integer, sta ona vraca ovde kao rezultat? Nije mi jasno kako uporedjuje nesto sto nema vrednost i broj....
Necu vise dosadjivati obecevam.
Hvala jos jednom
[ Boško @ 14.08.2009. 14:59 ] @
StanjeLPTPorta ima vrednost čim je dimenzionisana kao Integer. Ona je nula. To je tvoja promenljiva i možeš da joj dodeliš vrednost koju hoćeš. Ako si primetio, odmah nakon dodeljivanja vrednosti njoj, ta vrednost se f-jom Out dodeljuje i portu, tako da su vrednosti promenljive i porta uvek iste. Ovo je ubačeno da ne bi stalno koristio f-ju Inp koja čita vrednost sa porta. Preduslov je, naravno, da na početku pozoveš f-ju GasiSve i tako postaviš vrednost svih izlaza na portu na nulu i kreneš od nule.
Što se ovog drugog tiče to ti je Bulova algebra - prvi čas programiranja. Ako ćemo ovde o tome...
Da probam da ti pojasnim:
Izlazni pinovi na lpt portu su pin2 do pin9. Njihova vrednost može biti 0 ili 1. Zajedno izgleda ovako 00000000 (kada su svi ugašeni) ili npr. 00101001 kada su uključeni pinovi 2, 5 i 7 (gleda se s desna na levo). E tu sad dolazi Bulova algebra. Ako bi hteo da pored pinova 2, 5 i 7 uključiš još i 4 morao bi da uradiš sledeće: 00101001 OR 00000100 = 00101101 (pinovi 2, 5 i 7 OR pin 4 = pinovi 2, 4, 5 i 7).
Nemam ideju kako ovo prostijim rečima da ti objasnim.
Moraćeš da pogledaš Bulovu algebru.
[ zivadin_despot @ 14.08.2009. 20:05 ] @
Ne treba prostije, razumeo...
Ne znam sta da ti kazem, svaka cast...
Hvala
Pozdrav
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|