Na této stránce jsem uvedl schéma zapojení vstupně výstupní karty, kterou lze připojit ke COM portu počítače. Jenže aby se dala ovládat je potřeba nějaký program. Vytvářet samostatný program není moc flexibilní – každému vyhovuje jiný styl ovládání a často je potřeba výstupy ovládat automaticky. Z tohoto důvodu jsem naprogramoval knihovnu LMSIOCard.dll
Jméno programu | LMSIOCard |
Verze programu | 1.0. |
Jazyk | – |
Podporované OS | – |
Licence | freeware |
Velikost | 13 kB |
Potřebné knihovny | RSCOM.dll |
Vytvořeno v | VB.NET |
Stáhnout z | Tohoto webu |
Nebudem se zaobírat vnitřní stavbou knihovny, spíš popíšu jak knihovnu ovládat a jak vytvořit jednoduchý program, pomocí kterého lze I/O kartu ovládat.
Budu vycházet z programovacího jazyku VisualBasic.NET. Pokud v něm neumíte a máte pocit že byste měli, vřele doporučuji tento seriál. Nic kvalitnějšího v češtině a zadarmo nenajdete.
Ovládání COM portu
K ovládání COM portu používám knihovnu RSCOM.dll. Tuto knihovnu stačí vložit do složky s programem a ve VisualStudiu do projektu vložit Modul, do kterého vložíte tento kód:
Public pTXD As Boolean
Public pDTR As Boolean
Public pRTS As Boolean
Declare Function OPENCOM Lib „RSCOM“ (ByVal OpenString$) As Integer
Declare Sub TIMEOUTS Lib „RSCOM“ (ByVal b%)
Declare Sub BUFFERSIZE Lib „RSCOM“ (ByVal b%)
Declare Sub CLOSECOM Lib „RSCOM“ ()
Declare Sub SENDBYTE Lib „RSCOM“ (ByVal Dat%)
Declare Function READBYTE Lib „RSCOM“ () As Integer
Declare Sub SENDSTRING Lib „RSCOM“ (ByVal Dat$)
Declare Function READSTRING Lib „RSCOM“ () As String
Declare Sub CLEARBUFFER Lib „RSCOM“ ()
Declare Function INBUFFER Lib „RSCOM“ () As Integer
Declare Function OUTBUFFER Lib „RSCOM“ () As Integer
Declare Sub DTR Lib „RSCOM“ (ByVal b%)
Declare Sub RTS Lib „RSCOM“ (ByVal b%)
Declare Sub TXD Lib „RSCOM“ (ByVal b%)
Declare Function CTS Lib „RSCOM“ () As Integer
Declare Function DSR Lib „RSCOM“ () As Integer
Declare Function RI Lib „RSCOM“ () As Integer
Declare Function DCD Lib „RSCOM“ () As Integer
Declare Function INPUTS Lib „RSCOM“ () As Integer
Declare Sub TIMEINIT Lib „RSCOM“ ()
Declare Function TIMEREAD Lib „RSCOM“ () As Double
Declare Sub DELAY Lib „RSCOM“ (ByVal ms As Double)
Declare Sub REALTIME Lib „RSCOM“ ()
Declare Sub NORMALTIME Lib „RSCOM“ ()
Příslušný COM port lze poté otevřít příkazem
'Kontrola, zda je port volný
If OPENCOM(„COM1,1200,N,8,1“) = 0 Then
MsgBox(„Port obsazen!“)
End If
'Otevře port COM1
OPENCOM(„COM1,1200,N,8,1“)
'Uzavření portu
CLOSECOM()
V programu poté stačí jednoduchými příkazy otevřený port ovládat
'Nastavení všech třech výstupů na log. 1
DTR(1)
TXD(1)
RTS(1)
'Nastavení všech třech výstupů na log. 0
DTR(0)
TXD(0)
RTS(0)
'Četní vstupů (funkce vrátí datový typ Integer)
Vystup = DCD
Vystup = DSR
Vystup = CTS
Vystup = RI
Tak to by bylo k všeobecnému ovládání COM portu vše. Knihovna RSCOM samozřejmě nabízí i další funkce (stačí se podívat do modulu). Tohle ale prozatím stačí.
Ovládání knihovny LMSIOCard.dll
Nejprve je nutné si tuto knihovnu stáhnout a umístit někam do počítače. Doporučuji do složky s programem. Dále je nutné přidat do vašeho programu referenci na tuto knihovnu. Takže Project > Add Reference…
Do projektu (třeba do Formu) napište Imports LmsIOCard, abyste nemuseli knihovnu stále volat.
'importování Namespace
Imports LmsIOCard
Public Class Form1
End Class
Knihovna obsahuje jednu třídu IOCard a 5 funkcí. Ty si postupně popíšeme.
IOCard.Version
Tato funkce vrátí verzi ve tvaru „Version Major.Minor.MinorRevision.“ ‚vypíše verzi knihovny MsgBox(IOCard.Version)
IOCard.About
Tato funkce vrátí informaci o autorovi knihovny. ‚vypíše text: „Copyright (c) LMS Software 2011; www.mylms.ic.cz/iocard-sw“
MsgBox(IOCard.About)
IOCard.COMOut(Output, Delay, Invert)
Touto funkcí se nastaví pouze výstupy. Pokud nenastane závažná chyba, tak funkce vrátí text „ok“.
- Output – Datový typ String – Data, která se posílají na výstup. Vše kromě „1“ je log. 0
- Delay – Datový typ Integer – Spoždění mezi náběžnou a sestupnou hranou hodinového signálu. Minimální hodnota je 50. Pokud karta chybně komunikuje lze zvýšit. Běžně však stačí hodnoty kolem 100
- Invert – Datový typ Boolean – Pokud je True, tak se výstup invertuje. Místo 10101010 se na výstup zapíše 01010101
'Zapíše na výstup data 10101010
IOCard.COMOut("10101010", 100, False)
IOCard.COMIn(Delay, Invert)
Tato funkce čte a navrátí pouze vstupy.
- Delay – Datový typ Integer – Spoždění mezi náběžnou a sestupnou hranou hodinového signálu. Minimální hodnota je 50. Pokud karta chybně komunikuje lze zvýšit. Běžně však stačí hodnoty kolem 100
- Invert – Datový typ Boolean – Pokud je True, tak se přijímaná data invertují. Místo 10101010 se načte 01010101
'Čtení dat z karty
MsgBox(IOCard.COMIn(100, False))
IOCard.COMAll(Output, Delay, Invert)
Tato funkce zapíše i přečte log. hodnoty na IO kartě.
- Output – Datový typ String – Data, která se posílají na výstup. Vše kromě „1“ je log. 0
- Delay – Datový typ Integer – Spoždění mezi náběžnou a sestupnou hranou hodinového signálu. Minimální hodnota je 50. Pokud karta chybně komunikuje lze zvýšit. Běžně však stačí hodnoty kolem 100
- Invert – Datový typ Boolean – Pokud je True, tak invertuje vycházející i přicházející data.
'Zapíše na výstup data 10101010 a přečtená data zobrazí v MsgBoxu
MsgBox(IOCard.COMOut(„10101010“, 100, False))
Program na čtení a zapisování dat z/do karty
Ve VisualStudiu založíme nový projekt Windows Forms Application. Do něj přidejte Modul s kódem, který je výš. Poté přidejte referenci na knihovnu LMSIOCard.
Na Form natahejte tlačítka zhruba jako na obrázku.
- Open COM1 – Button1
- Version – Button2
- About – Button3
- Read / Write – Button4
- Textové pole – TextBox1
- Label – Label1
Do formu vložte tento kód:
Imports LmsIOCard
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If OPENCOM(„COM1,1200,N,8,1“) = 0 Then
‚kontrola portu COM1
MsgBox(„Port obsazen!“)
Else
OPENCOM(„COM1,1200,N,8,1“) ‚Otevření portu COM1
MsgBox(„Port otevřen“)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
MsgBox(IOCard.Version)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
MsgBox(IOCard.About)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Label1.Text = IOCard.COMAll(TextBox1.Text, 100, False)
End Sub
End Class
Komentáře myslím nejsou nutné, protože tohle je opravdu základ. Navíc jsem toho plno vysvětlil na začátku tohoto článku.