[ shpiki @ 14.05.2010. 21:13 ] @
Video sam dosta tema vezanih za ovo, ali i dalje ne uspevam da napisem ono sto mi treba.
Dakle, imam PIC16F877, on mi konstantno salje 4 vrednosti, ja treba da ih razdvojim u 4 txt boxa.

Kako???

Znam da ide OnComm() Event kod MSComm1 kontrole i znam da moram da izaberem .CommEvent = comEvReceive, MSComm1.Input je ono sto je PIC poslao, ali sta dalje?
U vbTerm (sample koji dolazi uz VB) postoji linija
Code:
ShowData txtTerm, (StrConv(Buffer, vbUnicode))
i funkcija ShowData koja mi nikako nije jasna.
Molim za pomoc.
Pozdrav.
[ t.marko016 @ 15.05.2010. 12:13 ] @
Konacno da se neko javi ko koristi VB6 za Hardware ;).

Ja sam to pokusavao na LPT-u ali nisam uspeo i mene zivo zanima sta ce drugi reci.

A u medjuvremenu probaj ovo, ovde ima IO.dll fajl preko kog sam ja radio sa LPT-oma, mozda uspes:
http://vojo.milanovic.org/parport/serport-00.htm

Pozdrav
[ SpizaGenije @ 15.05.2010. 12:55 ] @
Ajd pošalji mi kôd koji imaš pa da vidim gde je problem... ovako te ništa ne razumem...
[ shpiki @ 15.05.2010. 21:01 ] @
@t.marko16
sa LTP-om sam uspeo (bar što se tiče pisanja), ako zapneš probaću da pomognem.

@SpizaGenije
izvinjavam se na "objašnjenju", pisao sam ga poprilično iznerviran.
Pronašao sam gde je kvaka, uspeo da pročitam i "dešifrujem", kasnije i da razdelim u 4 txt boxa. (okačiću kôd sutra, nisam za mojim računarom).

Još jedno pitanje: ako želim da mi se podaci refresh-uju svaki put kad stigne podatak na CommPort, da li koristim
Code:
MSComm1.CommEvent = comEvReceive
ili nešto drugo?

Pozdrav.
[ t.marko016 @ 16.05.2010. 10:59 ] @
Ma uspeo sam i ja da pisem ali nisam uspeo da procitam.

Ajde pa kad okacis kod videcu kako bi treblo da izgleda .
[ vuchko.vuchko @ 17.05.2010. 10:43 ] @
Da i ja nesto kazem na ovu temu , ja sam radio sa lpt portom i usio sam da saljem signale na odredjene pinove lpt porta ( sto vi ovde nazivate pisanje ) i to sam vrlo uspjesno radio sa inpout.dll. Cak sam napravio jedan mali programcic za testiranje pinova na portovima i mogu to okaciti ovde ako nekome treba.
Ali nisam nikada radio citanje sa ulaznih pinova na bilo kom portu , pa bi i ja volio da vidim neke primjere iz te oblasti ukoliko je neko to radio a voljan je da to podijeli sa nama...
Eto toliko od mene....
[ SpizaGenije @ 17.05.2010. 13:46 ] @
Evo dela mog starog projekta gde čitam i šaljem podatke na RS232...
Na RS232 mi je "nakačena" digitalna vaga koja šalje niz podataka i iz tog niza izvlačim ono što mi je potrebno...
Opet kažem, to mi je stari projekat na kome sam u stvari vežbao pa i nije baš najprofesionalnije odrađeno... sample code sam skinuo sa MSDN-a...
sada koristim drugi način ali i ovo će vam biti od pomoći (ako sam ja čitao i slao podatka i vi ćete :) )

PS... pošto nisam na svom računaru, ne mogu vam objasniti kôd u detalje, ali nije se teško snaći...


Code:

Const Xon = &H11
Const Xoff = &H13


Private Sub form_load()
      
    
         Me.Caption = "V A G A NJ E"
         Text1.Text = ""   ''// ovo je txt box koji prikazuje primljene podatke
        
         
            With MSComm1                     ''// MSComm je objekat koji morate dodati... preko njega VB komunicira sa portom
            .Handshaking = 2 - comRTS    ''// ovo su podešavanja MScomm-a
            .RThreshold = 1
            .RTSEnable = True
            .Settings = "9600,n,8,1"
            .SThreshold = 1
            End With
            

      End Sub

Private Sub MSComm1_OnComm()

         Dim InBuff As String

         Select Case MSComm1.CommEvent
         ' Handle each event or error by placing
         ' code below each case statement.

         ' This template is found in the Example
         ' section of the OnComm event help topic
         ' in VB help.

         ' Errors
            Case comEventBreak   ' A Break was received.
                       
            Case comEventCDTO    ' CD (RLSD) Timeout.
            Case comEventCTSTO   ' CTS Timeout.
            Case comEventDSRTO   ' DSR Timeout.
            Case comEventFrame   ' Framing Error
            Case comEventOverrun ' Data Lost.
            Case comEventRxOver  ' Receive buffer overflow.
            Case comEventRxParity   ' Parity Error.
            Case comEventTxFull  ' Transmit buffer full.
            Case comEventDCB  ' Unexpected error retrieving DCB]

         ' Events   (možete pronaći objašnjenja svakog događaja pojedinačno u helpu ili na netu, ja nemam vremena sada svaki pojedinačno da objašnjavam
                       ''// a i oni su ih bolje objasnili u svakom slučaju :)
            Case comEvCD   ' Change in the CD line.
            Case comEvCTS  ' Change in the CTS line.
            Case comEvDSR  ' Change in the DSR line.
            Case comEvRing ' Change in the Ring Indicator.
            Case comEvReceive ' Received RThreshold # of chars.  
               Label1.Caption = "Vaga - Prijem podataka"
               InBuff = MSComm1.Input  ''// ovde prima podatke sa RS232
               Call ParseChars(InBuff)
            Case comEvSend ' There are SThreshold number of
                          ' characters in the transmit
                           ' buffer.
            Case comEvEOF  ' An EOF character was found in the input stream.

     
         End Select

      End Sub

      Sub HandleInput(InBuff As String)
         ' This is where you will process your input. This
         ' includes trapping characters, parsing strings,
         ' separating data fields, etc. For this case, you
         ' are simply going to display the data in the text
         ' box.
      Text1.Text = InBuff & Text1.Text
 
End Sub

      Sub ParseChars(ByVal InString As String)
         Dim temp As String
         Dim X As Long
         Dim OutString As String

         For X = 1 To Len(InString)
            temp = Mid$(InString, X, 1)
            If temp = Chr$(Xoff) Then
               Label1.ForeColor = vbRed
               Label1.Caption = "Xoff received"
               temp = ""
            ElseIf temp = Chr$(Xon) Then
               Label1.ForeColor = vbGreen
               Label1.Caption = "Xon received"
               temp = ""
            End If
            OutString = OutString & temp
            temp = ""
         Next X
         Call HandleInput(OutString)
      End Sub
      


      Private Sub Timer1_Timer()
      Dim var_R As String
      var_R = "R"
          MSComm1.Output = var_R & Chr$(Xoff)   ''// ovde šalje podatke na RS232 
      End Sub
      
      Private Sub cmdZero_Click()
      Dim var_Z As String
      var_Z = "Z"
        On Error GoTo greska
          MSComm1.Output = var_Z '& Chr$(Xoff)  ''// ovde šalje podatke na RS232 
        Exit Sub
      
greska: MsgBox "Može se koristiti samo kada je port otvoren!", vbInformation
      End Sub
      
      Private Sub cmdTare_Click()
      Dim var_T As String
      var_T = "T"
        On Error GoTo greska
          MSComm1.Output = var_T '& Chr$(Xoff)   ''// ovde šalje podatke na RS232  
        Exit Sub
      
greska: MsgBox "Može se koristiti samo kada je port otvoren!", vbInformation
      End Sub
             
[ SpizaGenije @ 17.05.2010. 13:52 ] @
Eh da... umalo da zaboravim...
Ko ne zna... treba mu MSCOMM32.OCX

@vuchko.vuchko ajd mi nalepi taj kôd za LPT da vidim kako si ti to odradio... :) Imam neke nedoumice... nešto sam petljao ali sve je to bože pomozi! :p
[ vuchko.vuchko @ 17.05.2010. 15:22 ] @
Evo ovaj mali projekat, dosta je primitivan ali radi....

*Samo da napomenem ovaj program bi trebao samo da posalje signal na odabrani pin na LPT portu
[ t.marko016 @ 17.05.2010. 23:54 ] @
Kako bi smo razmenili iskustva evo i mog davno radnjenog Data Port Controller-a koji je za mene bio samo eksperiment
jer svoje softvere lepo dizajniram ;).

A da umalo da zaboravim, koristio sam io.dll.

Pozdrav
[ shpiki @ 18.05.2010. 01:05 ] @
io.dll je isto što i inpout.dll, razlika je kako ga ko nazove, u suštini ista stvar.
Obećao sam moj kod: (pišem samo deo za čitanje, bez podešavanja CommPort.a)
Code:

Private Sub Timer1_Timer()
On Error Resume Next
If MSComm1.InBufferCount Then
    temp = MSComm1.Input                'Dim temp, podatak() as String prethodno, mozes u General
    podatak = Split(Mid$(temp, 2), ".") 'tacke ignorisi, podatke izmedju koristi
    FreqNet = CDbl(podatak(0))          'kovertuj podatke u double
    FreqGen = CDbl(podatak(1))
    VoltageNet = CDbl(podatak(2))
    VoltageGen = CDbl(podatak(3))
End If
End Sub

Olakšao sam sebi tako što sam postavio da mi uC šalje . pre svakog podatka, a kasnije ih razvrstao.

Ako zapneš, shout! ;)

Pozdrav.
[ SpizaGenije @ 18.05.2010. 14:22 ] @
hehehehe....
ma da i ja pokušam da objasnim taj .dll da ne dolazi više do zabune... iako je to shipki fino objasnio... ali da "nacrtam".. :)

io.dll i inpout.dll su u stvari skraćenice za input/output.... et toliko od mene :)
ZA SADA!!! :)
[ Dacex @ 10.06.2010. 10:44 ] @
Stavi u tajmer koji je intervala 50ms. Ubaci u njega kod
Code:

ulaz = ""
ulaz = Mscomm1.Input
Label1.Caption = Ulaz


i onda sa rastavi sa "mid" taj string.
[ djpero.84 @ 22.07.2010. 21:03 ] @
Sve je ovo super. Ja radim jedan servis sa GSM modemom i sluzim se MSCOMM kontrolom, medjutim.

Kako isfiltrirati samo onaj dio koji se odnosi na odgovor na AT komandu a ne da uvijek moram da trazim neki string (instr) u kompltetnom input temp stringu?

Da li je neko radio sa modemima i MScomm kontrolom?



P.S. Sad mi je palo na pamet
[ Dacex @ 30.07.2010. 02:45 ] @
Ja sam malo radio sa siemensom tc35, nije mi jasno gde zapelo ? ako modemo posaljes at on treba da ti vrati OK...ili bilo koja druga naredba različite stringove vraća. Kasnije sve te stringove središ pomoću mid,left,right.... i ostane ti cisto ono sto ti treba.