Avatar billede pablopablo Nybegynder
22. januar 2004 - 15:31 Der er 15 kommentarer og
1 løsning

Komm. med COM-porten i C#

Hej eksperter ;)

Jeg er en datamatikker studerende der skal til at starte på 5 og afslutende sem...
Jeg/min gr. skal kort fortalt lave et prog. som bl.a kan modtaget data på com-porten
fra et analyse-instrument, samt kunne sende ønsket data videre...

Vi programmerer i C#...og det skal fungere på alle win. platforme...dvs. fra 95 - XP(longhorn:)

Det er meget vigtigt det bliver lavet på den bedste/mest optimale/korrekte måde som muligt!
Dette skyldes at det ikke bare er for sjov, men at mange mennesker vil komme til at benytte
programmet så det skulle MEGET gerne bare fun'ge! I u know what I mean ;)

Jeg har før stillet et lign. spg. herinde...og fik forslag/links til hvordan det skal implementeres...
Det er dog først NU jeg har rigtig tid til at gå igang med det, da jeg afsluttede min sidste 4. sem
eksamen igår :))

Blandt de forslag jeg fik - tror jeg denne løsning/fremgangsmåde er måden at gøre det på...?

http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx

Tjeck det lige ud...bemærk de øverste linier...hvor der står noget med, at den eneste måde at
kommunikere med com-porten er via den tidligere og noget forældet dll-fil(fra VB6 mener jeg)
og at denne vejl. skulle være en ny/bedre måde at lave det på, idet den benytter funktionalit
fra kernel32 i windows i stedet for...

Hvad siger i til det? Har i et bedre forslag eller andre gode tip er i MERE end velkomende!!!

mvh. PabloPablo
Avatar billede arne_v Ekspert
22. januar 2004 - 15:44 #1
Kan man bruge .NET på 95 ?
Avatar billede odegaard Nybegynder
22. januar 2004 - 15:48 #2
Nope. Kun support fra Win98 og op (ref: http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3&displaylang=en)

Paplo Paplo: Læs artiklen ordenligt. Den omhandler nemlig en måde at UNDGÅ at bruge VB6, men i stedet direkte går igennem Kernel32.dll.

Artiklen du har fundet er den korrekte, og den du bør bruge som udgangspunkt. Jeg har noget kode til Compact Framework .NET der gør det du efterspørger, og det er næsten det sammen, men da den benytter "Core.dll" istedet for "Kernel32.dll", er erklæringerne en anelse anderledes.
Avatar billede mortendahl2003 Nybegynder
22. januar 2004 - 15:53 #3
Ja jeg ville nok ogsaa goere det paa den maade. Hvis du ikke selv har fundet dem, saa har CodeProject haft en artikel (http://www.codeproject.com/csharp/csppleds.asp?target=led), og der har vaeret et sample paa GotDotNet (http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=FCBA7FC5-666E-4EB0-863F-0045B0C79EC7).

Ved ikke om det kan bruges til noget :)
Avatar billede pablopablo Nybegynder
22. januar 2004 - 17:07 #4
odegaard>> nej det er dig som skal læse ordentlig efter :) for det er nemlig lige det jeg skrev! Derudover skriver du at du har noget kode til Compact Framework .NET som benytter Core.dll...og hvad så? skal jeg heller benytte det synes du...eller?? Hvad er forskellen?

Andet spg. i de fleste prog. som kan komm. med com-porten og lign. kan man vælge imellem  port 1-6...? men hvor dan skal det forstås? jeg har aldrig set en com men 6stk com-porte ?-) Ja...det er noget med at O/S selv tildeler(navngiver) en ny enhed tilsluttet den næste ledige com-port - det næste ledige navn/nr...com1, com2 osv...men hvordan reg. man hvilken/den korrekte port igennem sit program? Kan man ikke lave et eller andet smart, således at programmet selv "Scanner"/undersøger div. com-porte og selv forbinder på den korrekte eller er dette ikke muligt...??
Avatar billede odegaard Nybegynder
22. januar 2004 - 21:22 #5
Nej det skal du heller ikke bruge. Det kører nemlig kun på PDA'ere. Det var mere for at fortælle at jeg har nogle kode-klip du måske kan bruge, men du kommer ikke uden om at sætte dig ind i P/Invoke.

Og nej jeg læser ikke forkert.
Fx. pkt 3 fra artiklen, der direkte skriver at der er tale om en erstatning af OCX'en fra VB6:
3.Build a direct replacement for the MSComm OLE Control Extension (OCX). In other words, create a class that encapsulates the API file handle and provides a number of generalized methods and events (Open, Close, Read, Write, and so on). You could reuse this functionality by instantiating an object of the library class within the application class—that is, by aggregation, COM-style.

Desuden i intro:
"This article describes the development of a lean, multithreaded, and modern RS232 base class library in C# managed code. The library uses Platform Invocation Services to interact with the Win32 API directly."

Hvorfor downloader du ikke bare koden? Det er jo som jeg husker det, et færdigt serial-comm library: "Application programmers can use the library from any .NET language through inheritance; the article explores examples written in C# and Visual Basic .NET"

Du finder ledige porte med try/catch (dvs. prøver dig frem).
Avatar billede r9 Nybegynder
22. januar 2004 - 23:08 #6
Avatar billede pablopablo Nybegynder
22. januar 2004 - 23:58 #7
odegaard>> Som man dog kan misforstå hinanden!!! Du har misforstået mig fra starten! læst min første besked igen! Jeg har hele tiden skrevet at artiklen omhandel en NY måde at komm. med com-porten på :) Jeg oversat blot de første par linier fra artiklen til jer, da det var det jeg synes var interessant! Nemlig at den IKKE benytter noget fra VB - men fra windows...og jeg ville blot være sikker på, at dette ER det bedste måde at implementere det på...!-) okey...got it :)
Avatar billede finger Nybegynder
27. januar 2004 - 10:19 #8
Jeg har selv lavet en del med .NET og RS232.
Derfor har jeg undersøgt hvad inDernettet kan tilbyde her.
.NET indeholder intet library til at kommunikere med RS232 porten, som du jo nok selv har opdaget.
Overordnet har du 3 muligheder:
1: brug komponenten fra VS 6.0 til dette formål og wrap den i .NET. Dette er uden tvivl den nemmeste og sikreste løsning i det at alt er gennemtestet og virker superb. Det er så absolut dette jeg vil anbefale.
2:Brug linket til den artikel du selv har fundet. Så kan du selv udvikle et modul der bruger WIN32 API'et ti lat kommunikere med COM porten. Dette er MAX meget komplekst og der kan gå rigtigt rigtigt mange ting galt. Dette vil jeg kalde den sidste udvej.
3: køb en komponent ligesom dem der er linket til ovenover. Dette er en nem men dyr udvej. sikkert ikke en reel mulighed for en studerende.

I .NET 2.0 kommer der et library til kommunikation med COM porten, men dette udkommer først om et års tid eller så....
Avatar billede odegaard Nybegynder
27. januar 2004 - 10:34 #9
finger: Jeg er ikke helt enig i (2). I nævnte link kan man jo downloade en gang kode som er lige så godt som en komponent.
Avatar billede finger Nybegynder
27. januar 2004 - 12:39 #10
ja det er rigtigt nok at man kan det. Men som regel vil der være brug for at tilpasse den. Eller ihvertfald sætte sig ind i hvordan den virker.
Hvis han kan bruge komponenten som den er der, så er det jo perfekt, men hvis den skal tilpasses, så er det at man skal have styr på sin kode :-)
Avatar billede odegaard Nybegynder
27. januar 2004 - 12:44 #11
>så er det at man skal have styr på sin kode

Skal man ikke altid det? :-)
Avatar billede finger Nybegynder
27. januar 2004 - 12:46 #12
jo da.
men det var nu lidt nemmere hvis man kunne bruge en færdig pakket og gennemtestet komponent. så var der lidt mindre at bekymre sig over.
Avatar billede pablopablo Nybegynder
27. januar 2004 - 21:34 #13
Vi skal blot kunne modtage og sende data via com-porten...dvs. jeg regner ikke med at der er brug for det store tilretning i div. eksisterende filer...i det link jeg har skrevet om tidligere, skriver de at det er en noget forældet og tildels begrænset måde at komm. med com-porten på...??

>finger< du lyder som om at det vil være MEGET bedre at benytte den gamle metode, altså den fil fra VB6 - hvilket som højst sandsynligt også tilfredsstiller vores begrænsede behov...? Ved du hvad man fx. ikke kan ved at bruge filen fra VB6?

Vores største problem lige nu er, at www.Devhood.com er død...?-( Kender i et andet sted hvor jeg kan finde samme eller lign. bedkrivelse...?

>finger< Du må meget gerne komme med andre links eller gode tip til hvordan vi bedst får implementeret det...det lyder jo som om du har styr på det ;)

Jeg forstår egentligt ikke helt, hvad forskellen er på at benytte den tidligere og den nye metode at impl. det på...altså ja - det er selvfølgelig to forskellige stykker kode/forskellige filer - men hvad er den reele funktionelle forskel - begge fungere da som stamklasser, man kan genbruge/arve fra...ikke sandt?

Håber MEGET i kan hjælpe os!! det begynder nemlig at haste lidt med at få fingeren ud!
Avatar billede pablopablo Nybegynder
27. januar 2004 - 21:37 #14
Skulle måske lige sige, at det er på www.Devhood.com jeg at tidligere havde set en guide til hvordan man benytter fil fra VB6 hvis nogen skulle være i tvivl...
Avatar billede odegaard Nybegynder
28. januar 2004 - 12:05 #15
Det mest åbenlyse problem er at ønsker man at benytte VB6 ocx'en, skal man have licens til Visual Basic/Studio 6.
Derudover så er der fejl i den, og man undgår at benytte interops.
Desuden kalder artiklen den gamle mscomm komponent for "outdated and somewhat limited".

Den største fordel ved at lave en nye, er fleksibel, multithreaded komponent baseret på managed kode.
Avatar billede odegaard Nybegynder
28. januar 2004 - 12:06 #16
jeg kan slet ikke se hvorfor man skulle være så bange for at bruge det kode fra Microsoft selv. Det fungerer formidabelt, og det er veldokumenter med mange kommentarer i sourcen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester