Shock Media

Navigatie

[tip][vb] seriële poort

Forum > Ontwikkeling > [tip][vb] seriële poort
Naam Bericht
timmie

wie weleens eens met de seriële poort heeft gewerkt onder VB2005/2008 heeft vast wel gemerkt dat je waarde boven de 127 niet kan verzenden, of beter gezegt dat je dan ? of 63 eruit krijgt.

dit is echter te verhelpen met een paar vrij simpele programeerregels

nu zullen er vast heel veel mooie methode voor zijn maar dit is toch wel een van de makkelijkere denk ik

code:
imports system
imports system.text

public class naam

dim utf8 as new UTF8Encoding()

mijncompoort.encoding = utf8

public sub Open_port()
mijncompoort.open
end sub

public sub send_data(byval data as byte)
mijncompoort.write = (data)
end sub

'wat ook mogelijk is
public sub send_data_2(byval data as integer)'waarde tussen 0 en 255
mijncompoort.write(chrW(data))
end sub

end class


hopelijk hebben jullie er wat aan

mocht er vraag zijn naar een C equilvant dan ben ik bereid die heir ook te posten

succes
[Bericht gewijzigd door timmie op 26 mei 2008 22:34:36]
my place, DMX interface
Stynus

Bedankt.

Dit had ik net nodig bij 1 van men projectjes.
http://www.elektronicastynus.be ||| http://www.schematheek.net ||| Goedkope kwaliteits webhosting
timmie

om toch deze nog een keer om hoog te schoppen heb ik hier weer een tipje voor in vb dit keer om een bestand aan te maken en deze te beschrijven.

ik heb gekozen voor een csv file die op de C directory staat

code:
 Using writer As StreamWriter = New StreamWriter(pad) 'open een streamwriter
            writer.WriteLine(text als string) 'schrijf naar het bestand
        End Using


in mijn geval dus:
code:
 Using writer As StreamWriter = New StreamWriter("C:/save_file.csv") 'open een streamwriter
            writer.WriteLine(TimeOfDay & ";" & SerialPort1.ReadChar) 'schrijf naar het bestand
        End Using


hopelijk hebben jullie er iets aan
my place, DMX interface
timmie

en zo creëer je dus een file
code:
Dim file As System.IO.FileStream
file = System.IO.File.Create(C:/save_file.csv)

je moet wel even
system en system.io importeren.
my place, DMX interface
sunoke

quote:
Op 2 maart 2008 19:33:29 schreef timmie:
wie weleens eens met de seriële poort heeft gewerkt onder VB2005/2008 heeft vast wel gemerkt dat je waarde boven de 127 niet kan verzenden, of beter gezegt dat je dan ? of 63 eruit krijgt.


Heeft dit niet gewoon te maken met het signed zijn van je waarde? Dan heb je een waarde tussen -128 en 127. Ik weet niet hoe dit in basic is geregeld, maar in C gebruik je dan gewoon de unsigned declaratie, bijvoorbeeld:
code:
unsigned char i;
in plaats van
code:
char i;

Stynus

Nee komt omdat ascii maar tot 127 gebruikt.

Overigens werkte de code hierboven ook niet helemaal goed bedacht ik me net.
Ik heb deze code gebruikt:
code:
Private WithEvents MSComm1 As New System.IO.Ports.SerialPort

MSComm1.Encoding = System.Text.Encoding.Default

quote:
Op 4 mei 2008 14:19:49 schreef timmie:
zet er even bij welke VB je gebruikt en de het gebruikte component

vb.net 2005

[Bericht gewijzigd door Stynus op 4 mei 2008 14:48:04]
http://www.elektronicastynus.be ||| http://www.schematheek.net ||| Goedkope kwaliteits webhosting
Wristy

het volgende werkt voor mij perfect en ja ik maak ook gebruik van de extended ascii-tabel karakters (>127)

code:
        If serialPort.IsOpen Then
            serialPort.Close()
        End If
        Try
            With serialPort
                .WriteBufferSize = 10
                .PortName = cbbCOMPorts.Text
                .BaudRate = 19200
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
                .Encoding = System.Text.UnicodeEncoding.Default
            End With
            serialPort.Open()
            serialPort.Write(SpecCode + "v")
            lblMessage.Text = cbbCOMPorts.Text & " connected."
            btnConnect.Enabled = False
            btnDisconnect.Enabled = True
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
timmie

zet er even bij welke VB je gebruikt en de het gebruikte component

voor mij geld:
VB2008
serialport component
.net framework 3.5

volgens msdn2 moet het volgens bovenstaand(eerste post van mij)

en voor mensen die net zoals ik de msdn help op hun computer hebben hier de directe link
ms-help://MS.MSDNQTR.v90.en/fxref_system/html/18320aae-c9c6-fef7-d437-56d8dacd9219.htm
[Bericht gewijzigd door timmie op 4 mei 2008 14:28:03]
my place, DMX interface
timmie

quote:
Op 4 mei 2008 12:34:05 schreef sunoke:
[...]

Heeft dit niet gewoon te maken met het signed zijn van je waarde? Dan heb je een waarde tussen -128 en 127. Ik weet niet hoe dit in basic is geregeld, maar in C gebruik je dan gewoon de unsigned declaratie, bijvoorbeeld:
code:
unsigned char i;
in plaats van
code:
char i;


ja dat zou je normaal misschien zeggen omdat je moet worstelen met unsigned chars maar de encoding die standaard ingesteld is is ASCII encoding die maar tot 127 strekt.
dus de read command leest 7 bits uit omdat dat de encoding aangeeft.
in C zal je dat ook moeten veranderen.

quote:
Op 4 mei 2008 12:52:39 schreef Wristy:
het volgende werkt voor mij perfect en ja ik maak ook gebruik van de extended ascii-tabel karakters (>127)

/knip een end code

euhm ja dat klopt omdat jij unicode encoding gebruikt dat dus ook extended ascii gebruikt
my place, DMX interface
timmie

werken met multiform apps

even een trucje voor het makkelijk aanroepen van andere forms binnen je app

code:
syntax
designname.show()'zorg dat het form wordt geladen
appactivate(designname.text)'activeer het form


in mijn geval
code:
settings.show()
appactivate(settings.text)


zou een van de mods de titel kunnen aanpassen naar
tips en trics in vb? mocht er geen bezwaar zijn dat dit topic openblijft
[Bericht gewijzigd door timmie op 13 mei 2008 21:33:21]
my place, DMX interface
Zoeken in topic