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.
Niin, ja onkos tämä sitten QB vai VB kysymys?
Mitenkähän spesifistä tietoa kaipailet? Luet vain aivan normaalisti tavua portista ja tökit ne sitten sopivasti sinne taulukkoon.
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.