Sledování stavu COM portu přes VBA(Excel)   otázka

VB6/VBA

Nejsem tak zdatný v programování OOP, snažil jsem se najít nějaké informace na NETu, ale bez úspěchu (zejména pro VBA).

Konkrétně: k PC (Windows 2000) mám připojenou čtečku karet do COM5 na adresách 9000h-9008h. Připravuju tabulku pod Excelem, která potřebuje kartu přečíst a data dále zpracovat (celkem pravděpodobně 6 Bytů dat odeslaných najednou). Snažil jsem se data načíst pomocí "kernel32.dll", zkoušel i nahrát jinými oblíbenou knihovnu "RSCOM.dll", ale kromě toho, že nevím, jak správně nastavit veškeré parametry, mám hlavně problém s tím, že již obsazený port (systém nebo program nalezl připojený hardware) nelze ani otevřít. Připojim zdroják, který jsem sesmolil a kde je určitě něco nebo více špatně:

-------------------------------------------------

Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" ( _

ByVal lpFileName As String, _

ByVal dwDesiredAccess As Long, _

ByVal dwShareMode As Long, _

ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _

ByVal dwCreationDisposition As Long, _

ByVal dwFlagsAndAttributes As Long, _

ByVal hTemplateFile As Long) _

As Long

Declare Function ReadFile Lib "kernel32.dll" ( _

ByVal hFile As Long, _

ByRef lpBuffer As Any, _

ByVal nNumberOfBytesToRead As Long, _

ByRef lpNumberOfBytesRead As Long, _

ByRef lpOverlapped As OVERLAPPED) _

As Long

Declare Function CloseHandle Lib "kernel32.dll" ( _

ByVal hObject As Long) As Long

Type SECURITY_ATTRIBUTES

nLength As Long

lpSecurityDescriptor As Long

bInheritHandle As Long

End Type

Type OVERLAPPED

ternal As Long

ternalHigh As Long

offset As Long

OffsetHigh As Long

hEvent As Long

End Type

Const GENERIC_READ As Long = &H80000000

Const OPEN_EXISTING As Long = 3

Const FILE_FLAG_OVERLAPPED As Long = &H40000000

Dim atributH As SECURITY_ATTRIBUTES

Dim atributX As OVERLAPPED

-------------------------------------------------

Sub NactiStav()

PortCOM = "COM2"

HandleCOM = CreateFile(PortCOM & Chr(0), GENERIC_READ, 0, atributH, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)

MsgBox " Handle na: " & PortCOM & vbCr & HandleCOM

StavPortu = ReadFile(HandleCOM, AktStav, 6, 6, atributX)

MsgBox " Stav: " & vbCr & StavPortu & vbCr & AktStav

ukoncit = CloseHandle(HandleCOM)

End Sub

-------------------------------------------------

První výpis by měl podle mého vypsat handle na otevřený port (obsazený port třeba myší nepovolí a výstup je -1) - no nevím, ale výsledná hodnota je kolem 1000 a např. příkaz "Application.Hwnd" mi hodí o 3 řády vyšší číslo, ale dejme tomu. Druhý výpis pro stav portu je vždy na 0.

Ukáže mi nějakej šikula/šikulka způsob, jak takovou zdánlivě primitivní funkci sestavit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud máte licenci na Visual Studio (Visual Basic) 6.0, doporučoval bych použít ActiveX komponentu MSCOMM32.OCX pro komunikaci se sériovým portem. Použití je velmi jednoduché, nevýhoda je nutnost registrace komponenty na cílových počítačích. Načítat data ze sériového portu pomocí Windows API je příliš hardcore řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohužel mám pouze klasickou instalaci Office. Přesto jsem zkusil tento postup, našel jakýsi zdroják, soubor MSCOMM32.ocx jsem měl už v počítači po instalací komunikačního programu pro multimetr a podle návodu jsem se snažil komponentu zaregistrovat - nezadařilo se a VBA stejnak hlásí, že nemám licenci. Ješte si s tím pohraju, ale mám dojem, že tato cesta bude obtížná.

Děkuji za odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback