Hallo,
Ich bin ein ziemlicher Anfänger was Programmieren angeht, in der Schule
haben wir zwar schonmal ein paar kleine Sachen in C++ programmiert (mit
Borland) aber das war nichts wirklich schwieriges (Nur Programme wo mit
werten aus einem Textfeld etwas gerechnet wird)
Jetzt möchte ich mir ein Programm schreiben mit dem ich den Parallelport
ansteuern kann.
Dazu habe ich schon gesucht aber die meisten Leute versuchen immer nur
einen Pin beim Parallelport zu steuern. Bei mir ist das anders, denn
eigentlich weiss ich garnicht was ich genau am Parallelport steuern will
:)
Ich habe einen Plotter und dem kann ich bis jetzt per eingabe in die
console HPGL daten schicken die z.b. in einem Textdokument gespeichert
sind.
Das ganze sieht dann so aus: "copy print.txt LPT1:"
Nun würde ich gern wissen wie ich dem Plotter beibringe per Druck auf
eine Schaltfläche eine bestimmte Aktion auszuführen.
Wenn ich bisher den Stift 10 Schritte nach oben führen wollte habe ich
in die datei Print.txt "PR 0,10;" geschrieben - sonst nichts - und diese
mit dem obrigen Kommando an den Parallelport geschickt
Zugegebenermaßen habe ich das natürlich nicht oft (nur testweise)
gemacht aber so funtkioniert es jedenfalls.
Es soll also der Textstring "PR 0,10;" an den Parallelport geschickt
werden...
Hat da jemand z.b. einen schön erklärten Codeschnipsel?
Mein Problem ist dass ich eigentlich nicht weiss nach was ich da
eigentlich suchen soll, wenn ich nach "parallelport ansteuern" suche
kommen immer nur Ergebnisse die sich mit dem steuern einzelner Pins
beschäftigen...
Wie gesagt ich hab von der Materie im Prinzip keine Ahnung, also wenn
jemand was weiterführendes hat das mir hilft mein Problem zu verstehen
dann immer her damit.
Bin eigentlich für jede Art von Hilfe dankbar
Grüßle vom Essig
Du scheinst Windows einzusetzen, da kannst Du die Win32-API-Funktion
CreateFile verwenden, um ein Handle auf den Druckerport zu erhalten.
Folgende Aufrufe von WriteFile senden Daten an einen angeschlossenen
Drucker oder --in Deinem Falle-- Plotter.
Nach Gebrauch die Schnittstelle wieder mit CloseHandle schließen,
fertig.
In der Dokumentation zu CreateFile wird auch die Druckerschnittstelle
als "Communication Resource" bezeichnet.
http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspxhttp://msdn.microsoft.com/en-us/library/aa363196(VS.85).aspx
Danke für die ultraschnelle Hilfe! Leider werde ich als Anfänger nicht
so ganz schlau daraus.
Ich nehme mal an dass CreateFile nur einmal aufgerufen werden muss, also
bei Programmstart
Wie sieht es mit der Syntax aus? Hab ich das bis jetzt so verstanden?
Also ist alles richtig? :)
Wenn ich es halbwegs verstanden habe dann muss CreateFile 1x beim
Programmstart ausgeführt werden. Danach kann man mit WriteFile Text an
den Parallelport senden.
Das senden von Text erschliesst sich mir noch nicht so ganz...
Auf der seite wird die Syntax von WriteFile so beschrieben
1
BOOLWINAPIWriteFile(
2
__inHANDLEhFile,
3
__inLPCVOIDlpBuffer,
4
__inDWORDnNumberOfBytesToWrite,
5
__out_optLPDWORDlpNumberOfBytesWritten,
6
__inout_optLPOVERLAPPEDlpOverlapped
7
);
Warum BOOL, ich will doch Text senden?
"hFile" ist mir klar denke ich, hier muss in meinem Fall LPT1 hin.
"lpBuffer" wird beschrieben mit: A pointer to the buffer containing the
data to be written to the file or device.
Welcher Buffer? Ich möchte nur einen string weitergeben, das bringt mich
ziemlich durcheinander
"nNumberOfBytesToWrite" muss ich da jedes mal Angeben wieviel Bytes mein
Text lang ist? wäre ja umständlich...
hFile: Das was du von CreateFile bekommst
lpBuffer: ein Pointer auf den Buffer. Buffer bezeichnet deinen String,
bzw. der Pointer zeigt auf das erste Zeichen im String
nNumberOfBytes..: Die Anzahl an Buchstaben (ich nehme mal ASCII
Kodierung an).
> Warum BOOL, ich will doch Text senden?
Hast Du überhaupt schon mal in C programmiert? Das ist der Typ des
Rückgabewertes der Funktion.
> "hFile" ist mir klar denke ich, hier muss in meinem Fall LPT1 hin.
Nein. Sondern das Handle, das Du mit CreateFile erzeugt hast.
In obigem Beispiel also hFile.
> "lpBuffer" (...)> Welcher Buffer? Ich möchte nur einen string weitergeben,> das bringt mich ziemlich durcheinander
Das ist Dein String.
> "nNumberOfBytesToWrite" muss ich da jedes mal Angeben> wieviel Bytes mein Text lang ist? wäre ja umständlich...
Ja, das musst Du. Schließlich kann WriteFile auch binäre Daten
verarbeiten, und wie sollte es da die Länge bestimmen?
1
char*pText="Ich bin Text und will ausgegeben werden";
Danke für die Codeschnipsel, das mit den Rückgabewerten der Funktionen
hab ich verrafft, sind wohl doch bissl eingerostet meine
"Programmierkünste"
Wie gesagt war bei uns eher rechnen als programmieren...
Bisher hab ich soweit denke ich alles verstanden, ich meld mich wenns
wiedermal irgendwo hakt (kommt sicher vor :D )
Danke an alle
Grüßle vom Essig
Also wie schon gesagt bin ich ziemlich doof was das programmieren angeht
:)
Ich hab mir jetzt mal visual studio C++ 2008 express edition
runtergeladen.
In der Schule hab ich mit Borland Builder gearbeitet und mir hat das
Konzept dass die grafische Oberfläche des Programms gestalten konnte und
seinen eigenen Quellcode einem Button zugeordnet hat ziemlich gut
gefallen.
Um aber eine Benutzeroberfläche zu bekommen bei dem man sich alles so
einfach zusammenklicken kann muss ich eine CLR "Windows-Forms-Anwendung"
erstellen.
CLR hat soweit ich das mitbekommen habe das .Net Framework als
Arbeitsumgebung (is vllt bissl doof formuliert...)
Funktioniert CreateFile beim erstellen einer CLR Anwendung auch noch?
http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx hier ist es
ja dem Win32 Development untergeordnet.
Welche Headerdateien muss ich verwenden um die Funktion zum laufen zu
bekommen?
verwendet hab gabs nen fehler beim compilieren: error C2664:
'CreateFileW': Konvertierung des Parameters 1 von 'const char [7]' in
'LPCWSTR' nicht möglich
Thomas Linder wrote:
> Wenn du .NET verwendest, verwende die Klasse "SerialPort" aus dem .NET> Framework. Die ist wirklich sehr einfach :)
wenn das element doch nur mit dem parallelport funktionieren würde...
Oh nein, bitte nicht C++ mit .NET verwenden. Das ist schlimmste
Selbst-Vergewaltigung. Entweder C++ oder .NET, auf keinen Fall dieses
MS-Mischmasch, wo nix gescheit geht. Du kannst auch für die grafische
Oberfläche freie Bibliotheken nehmen XWidgets beispielsweise, die
arbeiten meines Wissens mit Visual Studio zusammen.
Hmm, das eigentlich traurige an der Sache ist dass ich was mach was ich
im endeffekt irgendwie nich versteh :(
Ich glaub ich muss mir da mal nen gutes Buch kaufen...
Ich hab jetzt mal nen leeres Projekt gemacht, also nur Kommandozeile und
irgendwie geht der code von oben nicht, CreateFile verursacht nen
Fehler, GetLastError() gibt mir "2" zurück. ich hab jetzt halt keine
ahnung was das zu bedeuten hat und hab auch irgendwie auf der MS seite
nix gefunden...
Kompiliert wird alles ohne probleme... Hat jemand ne ahnung?
Grüßle vom Essig
Hallo,
im normalen C kannst Du einfach auf den File "prn" schreiben.
FILE *fp;
fp = fopen("prn","w");
fprintf(fp,"%s","Hallo");
-----------------------------
Oder in LabVIEW
siehe Bild im Anhang (Schreibt man COM1 statt LPT1, gehts auf die RS232)