Avatar billede flemmingschmidt Nybegynder
27. april 2005 - 21:46 Der er 9 kommentarer

comport,hex-tal og hardware-flow control

hejsa ....

jeg har købt et byggesæt med 32 udgange og 24 indagnge
jeg skal i den forbindelse sende 3-4 byte til den og får så 1-4 byte retur. jeg kan bare ikke få det til at virke, jeg har prøvet at bruge Mscomm control men jeg aner ikke om der kommer noget frem til seriel kortet (der kommer ikke noget retur) demo programmet der følger med virker fint både ind og ud.
bytes'ne jeg skal sende starter med 0xAA 0xAA derefter 0x01 0xFF
Det kan have noget at gøre med at jeg ikke er helt stiv i vb og comporte :-)
  jeg aner ikke hvad der der mere skal bruges for at kunne gennemskue mit problem

Vh Flemming
Avatar billede spuncut Nybegynder
27. april 2005 - 22:36 #1
Start med at finde ud af om porten er sat rigtigt op.

Standarden er :
9600 Baud
No parity
8 bit

Hvis du har to Com-porte
kan du bruge Hyperterminal
til at skrive noget til dit program.
Avatar billede spuncut Nybegynder
27. april 2005 - 23:03 #2
Er 0xAA = Hex AA = Decimal 170..??
Avatar billede flemmingschmidt Nybegynder
28. april 2005 - 08:57 #3
jo det er sat rigtigt : 9600,n,8,1

og jo det skulle være 170 i decimal ,men hvad gør "ox" ved det ??

der er desværre kun 1 com-port
Avatar billede spuncut Nybegynder
28. april 2005 - 16:36 #4
0x betyder bare Hex...
Jeg vender tilbage med nogle program eksempler.
Avatar billede flemmingschmidt Nybegynder
28. april 2005 - 19:16 #5
mange tak .

jeg glæder mig allerede ;-)
Avatar billede spuncut Nybegynder
28. april 2005 - 21:14 #6
Her kommer et eksempel på et modtage-program :


Formular :


Private Sub oComPort_OnComm()
   
    Select Case oComPort.CommEvent
        Case "2"
          Receive
        Case Else
           
    End Select
   
End Sub

Private Sub Form_Activate()
    txtTransmit.SetFocus
End Sub

Private Sub Form_Load()
    oComPort.CommPort = 1
    oComPort.Settings = "9600,N,8,1"
    oComPort.RThreshold = 1
    oComPort.InputLen = 0
    oComPort.InBufferSize = 1024
    oComPort.OutBufferSize = 512
    oComPort.Handshaking = 0
    oComPort.PortOpen = True
    cmdTransmit.Default = True
    tmrComOut.Interval = 500
    tmrCmdOut.Interval = 1000
End Sub



Modul:

Option Explicit

Public vBuffer As Variant
Public vResponse As Variant


Public Sub Receive()
   
    fRouterComMain.tmrComOut.Enabled = True
    Do
        Parse fRouterComMain.oComPort.Input
        DoEvents
    Loop Until fRouterComMain.oComPort.InBufferCount = 0 And tmrComOut.Enabled = False
   
End Sub

Public Sub Parse(ByVal vTmpBuffer As Variant)
   
    Dim vWritBuffer As Variant
    Dim iChCnt As Integer
    Dim sCh As String
       
    vBuffer = vBuffer & vTmpBuffer
   
    For iChCnt = 1 To Len(vBuffer)
        sCh = Mid(vBuffer, iChCnt, 1)
        vWritBuffer = vWritBuffer & sCh
       
        If sCh = Chr(10) Then
           
            fRouterComMain.lsComReceive.AddItem vWritBuffer
           
            Save vWritBuffer  'Her får du outputtet
           
        If fRouterComMain.tmrCmdOut.Enabled Then
                vResponse = vResponse & vWritBuffer & "|"
                fRouterComMain.tmrCmdOut.Enabled = True
            End If
            vWritBuffer = ""
            ScrollDown
           
        End If
       
    Next
   
        vBuffer = vWritBuffer
   
   
End Sub
Avatar billede flemmingschmidt Nybegynder
04. maj 2005 - 13:07 #7
jeg har nu prøvet at køre dit eksempel
jeg må så indrømme at jeg har ikke anelse hvad der foregår ;-)
så meget styr har jeg ikke på det ;-)
hvad mere skal der bruges for at få det til at virke ??



den fejler ved ;

Private Sub Form_Load()  <-  <-  <-  <-  <-  <-  <-
    oComPort.CommPort = 1
    oComPort.Settings = "9600,N,8,1"
    oComPort.RThreshold = 1
    oComPort.InputLen = 0
    oComPort.InBufferSize = 1024
    oComPort.OutBufferSize = 512
    oComPort.Handshaking = 0
    oComPort.PortOpen = True
    cmdTransmit.Default = True
    tmrComOut.Interval = 500
    tmrCmdOut.Interval = 1000
End Sub

VH
Flemming
Avatar billede flemmingschmidt Nybegynder
04. maj 2005 - 13:10 #8
jeg er lidt interesseret i at hvid hvordan man sender 2 bytes til en port(0xAA 0xAA)
skal man bare sende "170 170" i en byte-dim ??
Avatar billede spuncut Nybegynder
04. maj 2005 - 17:24 #9
AA i hex er lig med 170
fordi :
A (hex) = 10 (dec)
altså 10 * 16^0 + 10 * 16^1
= 16 * 10 + 1 * 10
= 160 + 10
= 170

Hvis du skal sende AA i een byte
kan du feks. sende chr$(170).

Mht fejlen : Du HAR trukket en Comm Comtrol
ind i dein form Ikk'.
Hvilken fejl får du ??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester