VB6 - Compoort IO-BOX

Op school heb ik es een IO-box gemaakt. Een IO-box is een kastje met 3 printen.

print 1 bevat een atmel processor, AT90S8515.
print 2 is een kaart die tussen de processor zit en de relays / ingangen.
print 3 bevat 8 relays en 8 inleespoortjes.

schematisch gezien ziet het er zo uit :

pc - atmel - print2 (adres1) - print3

ook is de mogelijkheid om deze uit te breiden door nogmaals een print 2 + 3 te maken en print 2 op adres 2 te zetten. dit kan 255 keer zodat je 255 kaarten hebt met 8 relays / inleespoortjes.

momenteel heb ik het schema hier boven.. met 1 adres print dus :)

het probleem waar ik op stuit met het programmere in VB is,

wanneer ik een relay wil aanzetten doe ikhet volgende :

mscomm1.output = chr(1) &chr(1) &chr(10) &chr(13)
zo wordt op print 1 relay 1 aangezet
wil ik relay 3 aanzette doe ik:
mscomm1.output = chr(1) &chr(4) &chr(10) &chr(13)

de eerst chr geeft aan welke print aangestuurd moet worden, dus als ik hem zou uitbreiden met meerdere kaarten kun je zo aangeven welke aangestuurd moet worden.
tot zo ver nog geen probleme :p

een poortje van de 8 is actief wanneer er bijvoorbeeld 12 volt op staat, wanneer je dit uitleest zal bij port 1 een waarde van 1 komen, bij poort 7 een waarde van 64.

het uitlezen is echter een probleem

als eerste moet ik dus het adres aangeven dit doe ik doormiddel van :
mscomm1.output = chr(1)
daar na moet ik de input uitlezen door middelvan :
var = mscomm1.input

wanneer ik deze regels onder een knop zet, en 1x uitvoer werkt het. voer ik het een tweede keer uit wordt ineens relay1 aangeschakeld @#$@#$

na wat prutsen ben ik der achter gekomen dat wanneer ik inlees de mscomm1.output = chr(1) op 1 of andere manier blijft bestaan. dus wanneer ik een tweede keer uitlees, komt er nog een chr(1) bij dus wordt relay 1 aangezet :(

hoe kan ik dit nou goed oplossen ?
ik moet dus op 1 of andere manier een adres mee geven
en zorgen dat het na het uitlezen weer wordt 'afgesloten'

groeten
nash

Hoi Nash

Probeer deze eens:
mscomm1.InBufferCount = 0

Dat zou de buffer moeten resetten.

Succes
Fred

damn werkt niet :(

mijn code s nu als volgt :

code:


Private Sub Command1_Click()
'MSComm1.Break = True
'MSComm1.CDHolding = True






'Call flushtxbuf


MSComm1.Output = Chr(1) '& Chr(0) '& Chr(10) & Chr(13)
sdata = MSComm1.Input '& Chr(13) & Chr(10)
MSComm1.Output = Chr(1) & Chr(0)
MSComm1.Output = Chr(1) & Chr(0)
MSComm1.Output = Chr(1) & Chr(0)
Text3.Text = sdata
'MSComm1.Output = Chr(1) & Chr(0)
'MSComm1.CTSHolding = False
'MSComm1.DSRHolding = False



'MSComm1.Output = Chr$(cmdtnx) & Chr(10) & Chr(13)

End Sub

Private Sub flushtxbuf()
Do
DoEvents
Text2.Text = Text2.Text & MSComm1.InBufferCount
Loop Until (MSComm1.InBufferCount = 0)

End Sub


Public Sub inbufferclear(commcontrol)
Dim dummy
dummy = commcontrol.Input
commcontrol.Output = dummy
End Sub

Private Sub Command2_Click()
    MSComm1.Output = Chr(1) '& Chr(0) & Chr(10) & Chr(13)
    MSComm1.Output = Chr(0) & Chr(13) & Chr(10)
End Sub

Private Sub Form_Load()
    MSComm1.CommPort = 2
    MSComm1.Settings = "9600,N,8,1"
    'MSComm1.SThreshold = 1
    MSComm1.PortOpen = True
    MSComm1.RTSEnable = True
    MSComm1.DTREnable = True
    MSComm1.InputLen = 0
    MSComm1.RThreshold = 1
 
' MSComm1.InputMode = comInputModeBinary

'MSComm1.Output = "1"
'MSComm1.Output = "5 & vbCrLf"

'Debug.Print buffer
'& Chr(13)
    MSComm1.Output = Chr(1) '& Chr(0) & Chr(10) & Chr(13)
    MSComm1.Output = Chr(0) & Chr(13) & Chr(10)
    'MSComm1.NullDiscard = True
    
    
End Sub

Private Sub MSComm1_OnComm()
Dim s As String
'MSComm1.Output = Chr(1)
Select Case MSComm1.CommEvent
    Case comEvSend
    Case comEvReceive
        s = MSComm1.Input
        If s = Chr(13) Then
            Text1.Text = s
        Else
            Text1.Text = s
        End If
    Case comEventRxOver
        Text1.Text = " recveive buffer overfl0w"

    Case Else
        Text1.Text = "juist"
    End Select
End Sub

Private Sub Timer1_Timer()

buffer = MSComm1.Input


'If (buffer = Null) Then
 '   Text1.Text = buffer
'End If

Text1.Text = buffer
' MsgBox buffer

End Sub

wanneer ik 1keer op de knop drukt gaat het goed
maar omdat MSComm1.Output = Chr(1) geen 'afsluit' char heeft blijft die denk ik in het apparaatje hangen.
zodra ik een 2e keer druk komt er nog een chr1 bij en ziet die dit als : ik moet op print 1 relay 1 aanzetten.

zodra ik de stekker die in de comport zit er uit haal na 1 keer op de knop te hebben gedrukt, en deze er weer in doe en weer druk werkt het. net zolang tot ik de stekker er na de eerste keer drukke niet uithaal.

op 1 of andere manier moet ik dus na het inlezen van een port

code:


MSComm1.Output = Chr(1) 
var = mscomm1.input
MSComm1.Output = afsluiten 

zoiets

maar als je dus als afsluiter b.v.:

code:


MSComm1.Output = Chr(1) & Chr(4)& Chr(10) &Chr(13) 

zou doen dan gaat relay 3 dus aan :/
ook kan ik niet

code:


MSComm1.Output = Chr(1) & Chr(10) &Chr(13)
var = mscomm1.input 

of

code:

 
MSComm1.Output = Chr(1)
var = mscomm1.input 
MSComm1.Output = Chr(10) &Chr(13) 

omdatie dan die chr(10) als poort ziet die die moet schakelen

[Bericht gewijzigd door nash op zondag 1 februari 2004 13:27:31