Hi,
unter http://www.relaiskarte.thomas-dohl.de/
gibt nen C/C++ Programm.
moin!
Ich hab mir für die Schule ein Projekt rausgesucht, bei dem ich mit C++ eine Relaisplatine ansteuern möchte.
Dafür habe ich mir die RELAISPLATINE 8-fach seriell von Conrad gekauft, und einen USB-Serial-Cable gekauft.
Da ich dieses Projekt mit meinem Laptop vorführen möchte, und ich daran keinen COM-Anschluss (RS232) habe, brauchte ich das Kabel, welches von USB auf COM geht.
Mit einem, der Relaiskarte beigefügten Programm, habe ich schon erfolgreich getestet, ob das mit dem USB überhaupt geht.
Jetzt muss ich nur noch in C++ ein Programm coden, welches die einzelnen Relais ansteuern soll.
Aber in dem Handbuch der Karte ist leider nur ein Beispiel für BASIC. Doch damit kann ich recht wenig anfangen.
Könnte mir bitte jemand sagen, wo ich die nötigen Funktionen und Header-Dateien und sonstiges finden kann, um mein Projekt zu realisieren?
vielen Dank schon mal im vorraus!
Hi,
unter http://www.relaiskarte.thomas-dohl.de/
gibt nen C/C++ Programm.
vielen dank
werde gleich mal nachsehen
erm.. gibt es die programme auch für windows?
oder laufen die nur unter Linux?
Also das o.g. Programm gibts nur für Linux.
Aber vielleicht läufts auch unter cygwin und dann damit
unter win.
okay muss ich mal testen..
aber kann ich gerade nicht machen, da ich letzte und diese Woche immer auf die Examen lernen muss.. (ProgTech[C++], InfoTech[Assambler], KommTech[DOS und Linux und NetWare] und ElektroTechnik[das wohl für mich schwierigste; elektronische Schaltungen... hatte heute im Examen bestimmt ne 5 geschrieben darin..] )
und bis nach den Ferien sollte ich mein Projekt (diese Relais ansteuerung) fertig haben.. mal sehen, wie es klappt...
ich such immernoch in jeder freien Minute im Netz nach so nem Programm, oder bessergesagt dem Code.. aber finde es einfach nicht.
Wo könnte ich denn noch danach suchen, als bei Google?
Also, ich habe jetzt diesen Code... aber irgendwie sendet er immernoch nicht..
Das Programm sagt mir zwar "Done..." aber meine RelaisPlatine macht nicht "Klick"....
Woran kann das liegen?
//#include <cstdlib>
#include <windows.h>
//#include <string.h>
//#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <dos.h>
//#include <stdlib.h>
#include <time.h>
#include <unistd.h>
//#include <string>
int main()
{
DCB dcb;
HANDLE hComm;
BOOL fSuccess;
char *pcCommPort = "COM2";
hComm = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hComm == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf ("CreateFile failed with error %d.\n",
GetLastError());
}
// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.
fSuccess = GetCommState(hComm, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n",
GetLastError());
}
// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_9600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hComm, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n",
GetLastError());
}
else
{
char frame[4];
frame[0] = 1;
frame[1] = 1;
frame[2] = 0;
frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);
DWORD dwBytesWritten = 0;
WriteFile(hComm, &frame, sizeof
(frame), &dwBytesWritten, NULL);
//TransmitCommChar(hComm,frame);
frame[0] = 3;
frame[1] = 1;
frame[2] = 5;
frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);
WriteFile(hComm, &frame, sizeof
(frame), &dwBytesWritten, NULL);
BOOL bResult;
DCB dcb_alt;
SetCommState(hComm, &dcb_alt);
bResult = CloseHandle(hComm);
hComm = INVALID_HANDLE_VALUE;
}
cout << "Done...";
cout << endl ;
getch();
return 0;
}
Kollege, sizeof(frame) ist nur 1 , das reicht vielleicht nicht.
Wenn du alle 4 schicken willst, schreib "4" hin
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ich hab jetzt den Fehler rausgefunden...
Wie ich ja schon am Anfang gesagt habe, habe ich mir so ein Kabel von USB auf RS232 gekauft..
Jetzt habe ich das mal an dem PC meiner Mum ausprobiert, und dann da direkt an den RS232-Port gegangen. Da geht es.
Aber ich wollte es ja eigentlihc über den USB port machen, aber das kann ich mir dann wohl stecken..
Denn ich hab wie gesagt nur noch kurz Zeit (bis Mittwoch)..
Darum werde ich das jetzt einfach mal so lassen...
Denn ich konzentrier mich jetzt auf andere Sachen (Ob es geht, aus ner Tabelle oder Datenbank Informationen zu ziehen), und ein kleines GaragenTor mit Motor bauen.
Mein Dad programmiert FeuerWehrSoftware, und da sollte ich dann mein Programm mit einbinden..
Mein Programm wird dann von dem HauptProgramm aufgerufen, und als Übergabeparameter bekommt es dann eine FahrZeugNummer...
Mit Hilfe dieser Nummer wird mein Programm dann (wenn es funktioniert) aus der Tabelle raussuchen, in welchem Tor das jeweilige Fahrzeug steht, und dann das jeweilige Tor öfnen (dafür die RelaisKarten ansteuerung)
hmm.. also neues problem..
Wie oben funktioniert das Programm..
Aber wenn ich jetzt da ne AuswahlMöglichkeit reinbau, funktionierts nichtmehr..
(die fett gedruckten Teile sind neu. mit denen funktioniert es nichtmehr)
#include <windows.h>
#include <iostream.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <unistd.h>
int main()
{
int relais;
cout<<"\nBitte wählen sie das Relais aus: "
cin>>relais;
DCB dcb;
HANDLE hComm;
BOOL fSuccess;
char *pcCommPort = "COM3";
hComm = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hComm == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf ("CreateFile failed with error %d.\n",
GetLastError());
}
// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.
fSuccess = GetCommState(hComm, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n",
GetLastError());
}
// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_19200; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hComm, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n",
GetLastError());
}
else
{
char frame[4];
frame[0] = 1;
frame[1] = 1;
frame[2] = 0;
frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);
DWORD dwBytesWritten = 0;
WriteFile(hComm, &frame, (BYTE)frame, &dwBytesWritten, NULL);
//TransmitCommChar(hComm,frame);
frame[0] = 3;
frame[1] = 1;
frame[2] = relais;
frame[3] = static_cast<BYTE>(frame[0] ^ frame[1] ^ frame[2]);
WriteFile(hComm, &frame, (BYTE)frame, &dwBytesWritten, NULL);
BOOL bResult;
DCB dcb_alt;
SetCommState(hComm, &dcb_alt);
bResult = CloseHandle(hComm);
hComm = INVALID_HANDLE_VALUE;
};
cout << "Done...";
cout << endl ;
getch();
return 0;
}
Lesezeichen