mscomm programlama

Başlatan koordinat, 19 Temmuz 2004, 12:36:29

koordinat

ya arkdaadşlar bu mscomm u kullanmayı güzel anlatan bir site biliyormusunuz?

yıldırım ak

Herhalde VB Mscomm nesnesini kastediyorsun. Öğrenmek istediğin konu nedir ? açıklarsan yardımcı olabilirim.

Saygı ve Sevgiler...
"... Bana kulluk et; Beni anmak için namaz kıl" (Taha 14)

koordinat

yabenim öğrenmek istediğim bu jan alexson un kitabını aldım ben ama yani bu kadar detaylı ve kafa karıştırıcı anlatılır yani.ayrıca o sinyal girdi bu sinyal cıktı gibisinden hepsini teker teker yazacakmıyız.kitapta nasıl programlanır anlatmıyor bide
bu mscomm nesnesini  çok ii bulmuyolar.neden?

fsan

merhaba,
asagida linkte MSComm Control ile yapilmis örnekler.. belki isine yarar

Understanding and Using Visual Basic
* Sending Data From The PC to a Microcontroller
* Receiving Data From The Microcontroller

http://www.rentron.com/VisualBasic.htm

miot

bu mscomm objesinde bazı sorunlar yaşıyorum mesela gelen bilgilerin bir kısmı sanırım tampon buffer da bekletiliyor bu yüzden gelen bilginin tamamı bir anda gelmiyor. bu da ak kod yazılmasını gerektiriyor. her ne kadar ek kod ve kontrollerle problemimi çözmüş olsam da bu mscomm.ocx yerine kullanılabilecek daha az sorunlu bir obje bilen arkadaşlar varsa ve bu konuda bana yardımcı olabilirlerse sevinirim.

yıldırım ak

Seri port bilgisini bilgisayara gönderen donanımın ne olduğunu yazmamışssın ama bir mikrokonrol olduğunu tahmin ederek şöyle bir yol izlemeni tavsiye ederim.

Her gönderimi bir standart ile bitir. Örneğin bu standart "OK" olsun.

ve aşağıdaki kod ile gelen data içinde "OK" standardını bekle.

Do
   DoEvents
   Buffer = Buffer & Form1.MSComm1.Input
Loop Until InStr(Buffer, "OK")

Yukarıdaki döngü peşi sıra O ve K gelene dek devam eder.

Döngü çıkışında Buffer soldan OK uzunluğu olan 2 kadar kırparsan Buffer değişkeninde sadece gelen data kalır.

Saygı ve Sevgiler...
"... Bana kulluk et; Beni anmak için namaz kıl" (Taha 14)

asm_Coder

yada seri haberleşme için şu standartı kullan.Gönderilen bütün karakterleri
BCC Calculation işlemine tabi tut. Yani:

Gönderilecek değer = '123456' ise
BCC karakterini bir değişken olarak tanımla:

1.yol  BCC = 1 xor 2 xor 3 xor 4 xor 5 xor 6;
2.yol  BCC = 1 + 2 + 3 + 4 + 5 + 6;
3.yol  BCC = 1 - 2 - 3 - 4 - 5 - 6;

Göderilecek data = '123456BCC'; olur.

Alıcı terminal aynı yöntemi kullanarak BCC yi hesaplar ve her iki BCC birbirini tutuyorsa haberleşmede hata yok demektir.Hata oluşmuşsa son gönderilen datanın tekrar gönderilmesi alıcı tarafından verici terminalden istenir.

Control teknik servo moto sürücüsü ve Visual Basic6 haberleşmesi aşağıdadır.Problemsiz çalışıyor arzu edene detaylı açıklamasını yapabilirim.

Private Sub Command1_Click(Index As Integer)
On Error Resume Next

Dim s, ST

Adress$ = Left$(Text3.Text, 1) & Left$(Text3.Text, 1) & Right$(Text3.Text, 1) & Right$(Text3.Text, 1)

If Val(Text1(0).Text) < 10 Then
   Parameter$ = "0" & Text1(0).Text
Else
   Parameter$ = Text1(0).Text
End If

If Val(Text1(1).Text) < 10 Then
   Parameter$ = Parameter$ & "0" & Text1(1).Text
Else
   Parameter$ = Parameter$ & Text1(1).Text
End If
   
If Index = 0 Then
           
   Message$ = Chr$(4) & Adress$ & Parameter$ & Chr$(5)
   'Text4.Text = Message$
   
   MSComm1.PortOpen = True
   If Err Then MsgBox "COM Port Receive "
   
   MSComm1.InBufferCount = 0
   MSComm1.Output = Message$
   
   FromDrv$ = ""
   ST = 0
   Do
       ST = ST + 1
       If ST > 10000 Then Exit Do
       dummy = DoEvents()
       For ss% = 0 To 10000
           dummy = DoEvents()
       Next ss%
      If MSComm1.InBufferCount Then
         For ss% = 0 To 10000
           dummy = DoEvents()
         Next ss%

           FromDrv$ = FromDrv$ + MSComm1.Input
           
           If InStr(FromDrv$, Chr$(3)) Then
               'BCC calculation
               BC = 0
               For s = 2 To (Len(FromDrv$) - 1)
                   BC = BC Xor Asc(Mid(FromDrv$, s, 1))
               Next
               If BC < 32 Then BC = BC + 32
               If Chr$(BC) = Right$(FromDrv$, 1) Then
                   Text1(2).Text = Str$(Val(Mid(FromDrv$, 6, (Len(FromDrv$) - 1))))
                   Exit Do
               Else
                   Text1(2).Text = "HATA!"
                   Exit Do
               End If
           End If
       End If
   Loop
   MSComm1.PortOpen = False
Else
   Message$ = Chr$(4) & Adress$ & Chr$(2) & Parameter$ & Text1(2).Text & Chr$(3)
'BCC calculation
   BC = 0
   For s = 7 To Len(Message$)
       BC = BC Xor Asc(Mid(Message$, s, 1))
   Next
   If BC < 32 Then BC = BC + 32
   Message$ = Message$ + Chr$(BC)
   'Text4.Text = Message$
   
   MSComm1.PortOpen = True
   If Err Then MsgBox "COM Port Receive "
   
   MSComm1.InBufferCount = 0
   MSComm1.Output = Message$

'ACK
   FromDrv$ = ""
   ST = 0
   Do
       ST = ST + 1
       If ST > 10000 Then Exit Do
       
       dummy = DoEvents()
       If MSComm1.InBufferCount Then
           FromDrv$ = FromDrv$ + MSComm1.Input
           If InStr(FromDrv$, Chr$(6)) Then
               Exit Do
           Else
               Exit Do
           End If
       End If
   Loop
   MSComm1.PortOpen = False

End If


End Sub

Private Sub Command2_Click()
On Error Resume Next

   If Val(Text2(0).Text) = 1 Or Val(Text2(0).Text) = 2 Then MSComm1.CommPort = Text2(0).Text
   If Val(Text2(1).Text) = 2400 Or Val(Text2(1).Text) = 4800 Or Val(Text2(1).Text) = 9600 Or Val(Text2(1).Text) = 19200 Then MSComm1.Settings = Text2(1).Text + ",e,7,1"
   If Val(Text2(2).Text) > 10 And Val(Text2(2).Text) < 100 Then Text3.Text = Text2(2).Text

End Sub







    [list=][/list]
      y=f(x);

      beautifulriver

      bu programın açıklamasını yaparsan sevinirim.