Avatar billede cholmis Nybegynder
31. august 2007 - 13:02 Der er 12 kommentarer

RS232 c++ i visual studio 2005 vers 8

Nogen der kan hjælpe.
Har søgt og søgt, men kan ikke finde noget om hvordan man åbner en comport. læser og skriver til den osv. i C++ Visual Studio 2005 vers 8. Er der nogen der har en smule kode eller en henvisning på nettet.
Avatar billede intel4004 Novice
31. august 2007 - 19:35 #1
Programmerer du C++ ved brug MFC/Win32 eller er det C++/CLI .NET?

Til win32 kan du måske bruge denne artikel: http://www.codeproject.com/system/chaiyasit_t.asp

Mvh Intel4004
Avatar billede intel4004 Novice
31. august 2007 - 19:53 #2
Og hvis det er til .NET, så eksisterer der et namespace System.IO.Ports med klasser til seriel kommunikation: http://msdn2.microsoft.com/en-gb/library/system.io.ports.aspx.
Avatar billede intel4004 Novice
31. august 2007 - 19:56 #3
Avatar billede bertelbrander Novice
31. august 2007 - 19:58 #4
Der er et kort eksempel her:
http://damb.dk/comport.php
Avatar billede cholmis Nybegynder
01. september 2007 - 00:49 #5
Det jeg gerne vil have er nogle programlinier til win32 Console Application og eller almindelig dosvindue, det hedder CLR Console Application. Ikke noget med DOT Net eller lignende.
Bare ganske almindelig Visual Studio 2005 C++
Ved det i sidste ende bare drejer sig om at sætte nogle registre i en UART IC Kreds for baud rate og lignende. Og så læse nogle registre for modtagne data.
Dette skal så bare foregå i C++ højniveau sprog. Mangler de kommandoer.
Er nok for meget maskinkode vant.
Programmet skal køre som et windows program, men vil gerne starte med at lave det som console program.
Og så skrive det om til windows.
Avatar billede bertelbrander Novice
01. september 2007 - 00:59 #6
Den metode som jeg viser med eksemplet er nok det letteste.
Man kan ikke rigtigt tilgå UART registre direkte fra normale Windows applikationer.
Avatar billede cholmis Nybegynder
01. september 2007 - 09:19 #7
har brugt bertelbrander's forslag
Det virker i DEVcpp compileren fra Bloodshed.
Men i Visual studio hvor jeg gerne vil have det til at virke får jeg en fejlmeddelelse fra denne linie. Dvs det er noget med at "COM1" ikke forstås.

  HANDLE ComPort = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);


1>.\RS232_3.cpp(65) : error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [5]' to 'LPCWSTR'

Modsat i devcpp vil jeg gerne have mulighed for at overføre en streng til tx. Men kan ikke få det til at virke. Den protesterer mod const char.
Vil gerne definere en streng. Tildele strengen en værdi og skrive noget i retning af
Tx(ComPort, strengnavn); i stedet for
Tx(ComPort, "ATZ");

Er det mig der roder noget sammen eller er der ikke noget der hedder
string text;
text = "test";
Tx(ComPort, test);
Avatar billede bertelbrander Novice
01. september 2007 - 13:09 #8
Jeg tror at du skal have den sat op til ikke at bruge unicode:
Project -> Properties -> General -> Character Set -> Not Set

Så bør det virke.

Der er lidt sammenblanding af begreber;
"pop"
char *p = "something"
const *cp = "foobar"
string x = "Whatever"

Den første er en "string literal"
p er en pointer til char
cp er en pointer til const char
x er end std::string
De bliver alle kaldt strenge...

I mit eksempel bruger jeg både const char * og string literals, men ikke std::string.
Avatar billede cholmis Nybegynder
03. september 2007 - 20:19 #9
Perfekt Bertelbrander. Nu virker det. Men hvad betydning har det med at sætte characterset til not set i stedet for Unicode.
Kunne desuden bruge NULL på pladsen for COM1. Spekulerer på om det så bliver default COM1.
Men jeg oprettede en variabel
LPSTR Test = "COM1"
Denne variabel kunne så stå i som portnavn i Handlen.
HANDLE ComPort = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
Derudover vil jeg jo gerne give dig point men kan ski ikke finde ud af hvordan. Skylder dig faktisk 30 point fra sidt som jeg på underfundelig måde fik tildelt mig selv. Den er ikke alt for logisk denne her med tildeling af point.
Avatar billede bertelbrander Novice
03. september 2007 - 21:00 #10
Det er muligt at det vil virke med NULL som port navn, men det er nok bedre at skrive hvilken du vil bruge, hvis der skulle være mere end 1 com-port.

Uni-code er et helt kapitel for sig selv, men hvis ikke du har brug for at skrive speciale tegn eller japansk eller arabisk får du ikke brug for det.

For at kunne give mig point skal jeg lave et "svar" og ikke blot en "kommentar". Men jeg samler ikke på point, så jeg laver kun kommentarer. Hvis problemet er løst så lav et svar og accepter det, så bliver spørgsmålet markeret som lukket og du får dine point tilbage.
Avatar billede cholmis Nybegynder
03. september 2007 - 21:18 #11
Takker mange gange for hjælpen.....
Avatar billede bertelbrander Novice
03. september 2007 - 22:07 #12
Husk at acceptere dit svar.
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
Kurser inden for grundlæggende programmering

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