Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: RS232-portista lukeminen

Teme [18.06.2003 11:47:32]

#

Miten pystyy lukemaan RS232 -portista 8 * 8 kokoisen taulukon? Kun mulla on semmonen "kesätyö" ja tarttis saada se valmiiks kesäkuun loppuun mennessä. Siitä koko projektista on tehty jo noin 50 % mutta nyt tuli se vaikein osa. Kun työ on valmis, ohjelman pitäisi osata lukea 8 * 8 taulukko portista ja analysoida se. Ei se analysointi oo niin kamalan vaikee mut tarttis saada ensiks se taulukko luettua.

Voiskos joku kys. asiasta tietävä kertoa kaiken tarpeellisen? Pliis auttakaa joku, pilaan maineeni jos en saa tätä esittelykuntoon tässä kuussa. Ja kun maine menee, töitä on turha pyytää ainakaan samalta firmalta, jolle on kämminy.

Jogge [18.06.2003 13:46:13]

#

Niin, ja onkos tämä sitten QB vai VB kysymys?

thefox [18.06.2003 14:34:08]

#

Mitenkähän spesifistä tietoa kaipailet? Luet vain aivan normaalisti tavua portista ja tökit ne sitten sopivasti sinne taulukkoon.

Teme [19.06.2003 11:34:06]

#

VB 6:llä mä tätä teen. No mun tarttis pystyä lukemaan kahdeksaa kytkintä, eli onko se nolla vai yksi.

Tämäntapaista tietoa pitäisi lukea sieltä:

-----------------
|0|0|0|0|0|1|0|0|
|0|1|0|0|0|0|1|0|
-----------------

Tommosia rivejä tuleepi sieltä kahdeksan kerralla. Sitten ne tarttee analysoida ja päättää niistä tiedoista, että mitä kytkintä/kytkimiä painettiin.

trinit [20.06.2003 17:09:42]

#

MikroBitissä oli joskus tee-se-itse releohjain artikkeli jossa oli mm. VB6:lle ohje kuinka rinnakkaisportista pystyi lukemaan tietoa. Kyseinen toiminto vain vaatii WIN95IO.DLL kirjaston.

Rakentelin tuon releohjaimen silloin aikanaan ja nyt sitä kokeillessani en sitä saanut toimimaan (Windows XP Pro), mutta tällaisella koodilla sen _pitäisi_ toimia:

Declare Sub vbOut Lib "WIN95IO.DLL" (ByVal nPort As Integer, ByVal nData As Integer)
Declare Function vbInp Lib "WIN95IO.DLL" (ByVal nPort As Integer) As Integer

Public Const PortAddress As Integer = 888       'heksana &H378 = kirjoitinportti

Public Function ReadBit(rbPort As Integer, rbBIT) As Integer

    Dim NumOfBits As Integer
    Dim PortBits() As Integer
    Dim PortNum As Integer

    If rbPort = 888 Then NumOfBits = 8
    'If rbPort = 889 Then NumOfBits = 5
    'If rbPort < 888 Or rbPort > 889 Then NumOfBits = 4

    ReDim PortBits(NumOfBits)
    PortNum = vbInp(rbPort)

    For i = 1 To NumOfBits
        PortBits(i) = PortNum Mod 2
        PortNum = Fix(PortNum / 2)
     Next

     ReadBit = PortBits(rbBIT)

End Function

Täysin takuuseen toimivuudesta en mene, mutta voithan sitä kokeilla. Kirjasto löytyy esim. osoitteesta http://www.softcircuits.com/sw_tools.htm

Esimerkki ReadBit funktion käytöstä, jossa RelayStatus(x) taulukossa oli jokaisen releen tila (päällä = true, pois = false):

Public Sub SetRelayStatus()

    For i = 1 To 8
        If ReadBit(PortAddress, i) = 1 Then RelayStatus(i) = True Else RelayStatus(i) = False
    Next

End Sub

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta