IO-Warrior unter C++

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
vablix
Posts: 7
Joined: Thu Mar 05, 2009 2:57 pm

IO-Warrior unter C++

Post by vablix »

Guten Morgen miteinander

Ich wollte fragen ob mir jemand hier Tipps / Helfen könnte da ich folgendes Problem habe.

Ich will mit Visual Basic C++ 2008 ( Benutzeroberfläche ) den IO-Warrior einbinden, damit die Anwendung auf den IO-Warrior zugreifft und von dort aus auf ein IC Daten abruft / wiedergibt.

Ich habe seit Montag noch nichts gutes gefunden ( hier im Forum und auch Google allgemein ) wo mir zeigt wie ich das von A-Z machen kann.

#pragma once
#include "Form2.h"

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;


namespace Projekt1 {

/// <summary>
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>

public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
}

protected:
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
protected:
private: System::Windows::Forms::Button^ button2;
private: System::Windows::Forms::Button^ button3;
private: System::Windows::Forms::Button^ button4;
private: System::Windows::Forms::Button^ button5;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::RadioButton^ radioButton1;
private: System::Windows::Forms::RadioButton^ radioButton2;
private: System::Windows::Forms::GroupBox^ groupBox1;
private: System::Windows::Forms::TextBox^ textBox1;
private: System::Windows::Forms::TextBox^ textBox2;
private: System::Windows::Forms::Label^ label2;
private: System::Windows::Forms::Label^ label3;

private:
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->button2 = (gcnew System::Windows::Forms::Button());
this->button3 = (gcnew System::Windows::Forms::Button());
this->button4 = (gcnew System::Windows::Forms::Button());
this->button5 = (gcnew System::Windows::Forms::Button());
this->label1 = (gcnew System::Windows::Forms::Label());
this->radioButton1 = (gcnew System::Windows::Forms::RadioButton());
this->radioButton2 = (gcnew System::Windows::Forms::RadioButton());
this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->textBox2 = (gcnew System::Windows::Forms::TextBox());
this->label2 = (gcnew System::Windows::Forms::Label());
this->label3 = (gcnew System::Windows::Forms::Label());
this->groupBox1->SuspendLayout();
this->SuspendLayout();
//
// button1
//
this->button1->Location = System::Drawing::Point(110, 327);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(196, 45);
this->button1->TabIndex = 0;
this->button1->Text = L"Sonderfunktionen";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// button2
//
this->button2->Location = System::Drawing::Point(110, 378);
this->button2->Name = L"button2";
this->button2->Size = System::Drawing::Size(196, 42);
this->button2->TabIndex = 1;
this->button2->Text = L"Einstellungen";
this->button2->UseVisualStyleBackColor = true;
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
//
// button3
//
this->button3->Location = System::Drawing::Point(110, 426);
this->button3->Name = L"button3";
this->button3->Size = System::Drawing::Size(196, 40);
this->button3->TabIndex = 2;
this->button3->Text = L"Beenden";
this->button3->UseVisualStyleBackColor = true;
this->button3->Click += gcnew System::EventHandler(this, &Form1::button3_Click);
//
// button4
//
this->button4->Location = System::Drawing::Point(88, 130);
this->button4->Name = L"button4";
this->button4->Size = System::Drawing::Size(98, 103);
this->button4->TabIndex = 3;
this->button4->Text = L"Bart";
this->button4->UseVisualStyleBackColor = true;
//
// button5
//
this->button5->Location = System::Drawing::Point(248, 130);
this->button5->Name = L"button5";
this->button5->Size = System::Drawing::Size(97, 102);
this->button5->TabIndex = 4;
this->button5->Text = L"Lisa";
this->button5->UseVisualStyleBackColor = true;
//
// label1
//
this->label1->AutoSize = true;
this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->label1->Location = System::Drawing::Point(129, 9);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(165, 20);
this->label1->TabIndex = 5;
this->label1->Text = L"Auswahl Textansagen";
//
// radioButton1
//
this->radioButton1->AutoSize = true;
this->radioButton1->Location = System::Drawing::Point(0, 27);
this->radioButton1->Name = L"radioButton1";
this->radioButton1->Size = System::Drawing::Size(77, 17);
this->radioButton1->TabIndex = 6;
this->radioButton1->TabStop = true;
this->radioButton1->Text = L"Binär-Code";
this->radioButton1->UseVisualStyleBackColor = true;
//
// radioButton2
//
this->radioButton2->AutoSize = true;
this->radioButton2->Location = System::Drawing::Point(180, 27);
this->radioButton2->Name = L"radioButton2";
this->radioButton2->Size = System::Drawing::Size(75, 17);
this->radioButton2->TabIndex = 7;
this->radioButton2->TabStop = true;
this->radioButton2->Text = L"Gray-Code";
this->radioButton2->UseVisualStyleBackColor = true;
//
// groupBox1
//
this->groupBox1->Controls->Add(this->radioButton2);
this->groupBox1->Controls->Add(this->radioButton1);
this->groupBox1->Location = System::Drawing::Point(74, 239);
this->groupBox1->Name = L"groupBox1";
this->groupBox1->Size = System::Drawing::Size(271, 68);
this->groupBox1->TabIndex = 8;
this->groupBox1->TabStop = false;
//
// textBox1
//
this->textBox1->Location = System::Drawing::Point(248, 76);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(97, 20);
this->textBox1->TabIndex = 9;
//
// textBox2
//
this->textBox2->Location = System::Drawing::Point(88, 76);
this->textBox2->Name = L"textBox2";
this->textBox2->Size = System::Drawing::Size(98, 20);
this->textBox2->TabIndex = 10;
//
// label2
//
this->label2->AutoSize = true;
this->label2->Location = System::Drawing::Point(47, 79);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(29, 13);
this->label2->TabIndex = 11;
this->label2->Text = L"Start";
//
// label3
//
this->label3->AutoSize = true;
this->label3->Location = System::Drawing::Point(210, 79);
this->label3->Name = L"label3";
this->label3->Size = System::Drawing::Size(32, 13);
this->label3->TabIndex = 12;
this->label3->Text = L"Ende";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(417, 478);
this->Controls->Add(this->label3);
this->Controls->Add(this->label2);
this->Controls->Add(this->textBox2);
this->Controls->Add(this->textBox1);
this->Controls->Add(this->groupBox1);
this->Controls->Add(this->label1);
this->Controls->Add(this->button5);
this->Controls->Add(this->button4);
this->Controls->Add(this->button3);
this->Controls->Add(this->button2);
this->Controls->Add(this->button1);
this->MaximizeBox = false;
this->Name = L"Form1";
this->Text = L"Form1";
this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
this->groupBox1->ResumeLayout(false);
this->groupBox1->PerformLayout();
this->ResumeLayout(false);
this->PerformLayout();

}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
this->Hide();
Form2^ form2=gcnew Form2();
form2->ShowDialog();
}
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
this->Close();
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {

}
};
}
Ich hab mal den Quelltext von der Form1 hier reinkopiert.

Könnten Sie mir vllt weiterhelfen und mir sagen ob das … :

A ) … einbinden in diese VB Version geht ?
B ) ... was ich genau machen muss, damit das Programm darauf zugreifft ?

Es handelt sich um den IO-Warrior 24

Lg Oliver
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IO-Warrior unter C++

Post by Christoph Jung »

Also für C/C++ haben wir zu allen Funktionen Beispielcode. Das sieht mir auch mehr nach C# aus.
C# haben wir bisher noch keinen Beispielcode, der wird aber in nächster Zeit folgen. Zum Thema C# ist hier im Forum auch ein beitrag wie man damit umgeht. Ich kann mich frühestens Montag damit befassen.
Software developer
vablix
Posts: 7
Joined: Thu Mar 05, 2009 2:57 pm

Re: IO-Warrior unter C++

Post by vablix »

Danke für die Antwort..

Hab später rausgefunden, dass es mit dieser Version von VB nicht geht ( Ist nur eine Express Installation )

Hab jetzt angefangen mit Visual Basic C++ 2006.

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

Jetzt hätte ich trotzdem noch fragen ...

Ich muss ein *Sound Modul* ansteuern ( SPL12 http://www.v-t-p.com/SPL12_D.HTM ) über das dementsprechende Programm wo ich im moment am schreiben bin.

Mit einem Eingabe Feld und einem Play Button gebe ich an welches *Lied* ich abspielen will und dann auf Start (*Button*) und das Lied sollte kommen über die dazugehörige Box.

Jedoch weis ich nicht genau wie ich das machen soll, bisher hatte ich leider noch keinen Erfolg :(

1 in Box = Lied 1
2 in Box = Lied 2
usw.

Ich kopiere mal den Quelltext von dem Button hier rein

void CSoundDlg::OnStart()
{
UpdateData(TRUE);
CString strVon;

strVon.Format("%d",m_Edit1);
SetDlgItemText(IDC_STATIC1,strVon); // gibt in ein Feld aus welches Lied gerade abgespielt wird

// Hier kommt der IO Warrior dazu

IOWKIT_HANDLE ioHandle;
IOWKIT56_IO_REPORT report;

ULONG res;
DWORD bits=0;

ioHandle=IowKitOpenDevice();

report.ReportID=0;

// Hier weis ich nicht was ich genau reinmachen soll :|

res=IowKitWrite (ioHandle,IOW_PIPE_IO_PINS, (PCHAR)&report, IOWKIT56_IO_REPORT_SIZE);

if (ioHandle!=NULL)
{
m_Version=IowKitVersion(); // gibt die Aktuelle Version in einer Box aus ( IO-Warrior Kit V1.5 )
}
else
{
m_Version="Keinen IO-Warrior gefunden";
}

IowKitRead(ioHandle,IOW_PIPE_IO_PINS,(PCHAR)&report,IOWKIT56_IO_REPORT_SIZE);

// weis nicht was hier rein kommt

report.ReportID=0xFF;

UpdateData(false);
IowKitCloseDevice(ioHandle);
}
Der Text hab ich abgeschrieben vom Programm da ich an einem anderen Computer Programmiere.

lg oli
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IO-Warrior unter C++

Post by Guido Körber »

1. Was denn nun, Visual Basic, oder C++?
2. Was ist jetzt die Frage?
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IO-Warrior unter C++

Post by Christoph Jung »

Sieht nach C++ (MFC) aus.
Ich kann aus dem Code-Snipsel nur entnehmen, dass der IOW56 auf IO-Ebene benutz werden soll. Allerdings kann auch nichts passieren, denn
"report" ist komplett leer bzw. mit irgend einem Müll gefüllt, weil die Variable nicht initialisiert wird mit irgendwas. Zum anderen würde ich ERST die Überprüfung auf vorhandenem IO-Warrior machen und DANN ERST schreiben oder lesen, denn sonst hängt sich das Programm einfach nur auf. Wir liefern Beispiele, die dies alles berücksichtigen....

Was hat die "neue" Frage denn jetzt mit dem IO-Warrior zu tun. Klingt eher nach einem allgemeinen Problem zum Programmieren. Das gällt nicht in unseren Support.
Software developer
vablix
Posts: 7
Joined: Thu Mar 05, 2009 2:57 pm

Re: IO-Warrior unter C++

Post by vablix »

1. Weis nicht genau , auf dem Computer wo es Installiert ist heisst es *Visual Studio Basic 6*

2. Ich hab eigentlich nur ein Problem mit dem Programmieren, dass es bei Eingabe Zahl 1 die Information vom SPL12 holt und wiedergibt.
Mit einem Eingabe Feld und einem Play Button gebe ich an welches *Lied* ich abspielen will und dann auf Start (*Button*) und das Lied sollte kommen über die dazugehörige Box.
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IO-Warrior unter C++

Post by Guido Körber »

Wir können hier das Lesen von Datenblättern und Entwerfen von Software und Hardware nicht übernehmen. Sie müssten sich schon mal selber damit befassen wie die Baugruppe funktioniert, die Sie ansteuern möchten.

Spezifische Fragen können wir gerne beantworten, aber die komplette Lösung können wir für Sie nicht erarbeiten.
vablix
Posts: 7
Joined: Thu Mar 05, 2009 2:57 pm

Re: IO-Warrior unter C++

Post by vablix »

Könnten Sie mir dann evtl. Helfen dass ich zu einer Lösung des PRoblems kommen kann ?

Es soll nur etwas auf den IO Warrior schreiben, wenn ich den Button Klicke.

Wie ist das mit dem Report gemeint ?

Tut mir leid, aber ich hab wirklich nicht viel Ahnung von Io Warrio / Programmieren.
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IO-Warrior unter C++

Post by Christoph Jung »

Was soll denn auf den IO-Warrior geschrieben werden? Es fehlt er komplette Hintergrund zu dem Projekt. Irgendwas soll mit dem IO-Warior gemacht werden, aber ohne genaue Hinweise kann man nicht helfen.

report ist das, was an den IO-Warrior gesendet wird.

report.ID = 0x00; Ist die ID (Simples IO, LCD, LED-Matrix, etc.)
report.Bytes = 0x00; Ist der Inhalt für die zu übertragenen Bytes

Steht alles in der Doku und ist in den Beispielen beschrieben.

Wenn Grundsätzlich Probleme beim Programmieren sind, sollten Sie sich an ein dafür spezialisiertes Forum wenden. Dabei können wir nicht helfen. Man sollte sich gunrdsätzlich erst einmal mit den Grundlagen auseinander setzten, bevor man sich auf Projekte stürzt...
Software developer
vablix
Posts: 7
Joined: Thu Mar 05, 2009 2:57 pm

Re: IO-Warrior unter C++

Post by vablix »

Christoph Jung wrote:Was soll denn auf den IO-Warrior geschrieben werden? Es fehlt er komplette Hintergrund zu dem Projekt. Irgendwas soll mit dem IO-Warior gemacht werden, aber ohne genaue Hinweise kann man nicht helfen.
Ich will ne Zahl in eine Edit Box eingeben je nach dem welche Zahl das ist soll etwas anderes Gesendet werden.

Wenn Grundsätzlich Probleme beim Programmieren sind, sollten Sie sich an ein dafür spezialisiertes Forum wenden. Dabei können wir nicht helfen. Man sollte sich gunrdsätzlich erst einmal mit den Grundlagen auseinander setzten, bevor man sich auf Projekte stürzt...
Nichts für ungut, aber ich habe mich nicht auf ein Projekt gestürzt, ich bekam das so in die Hand gedrückt.

Mir wurde erklärt was das Programm können muss.

Hab vorher noch nie sowas gemacht, deshalb ist mir noch so viel unklar und ich hab nicht viel Ahnung von dem allem.
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IO-Warrior unter C++

Post by Christoph Jung »

Ich will ne Zahl in eine Edit Box eingeben je nach dem welche Zahl das ist soll etwas anderes Gesendet werden.
Hilft nicht wirklich weiter. Was ist denn am IO-Warrior angeschlossen?
Einfach eine Zahl eingeben ist klar, aber was soll der IO-Warrior bitte machen? Soll er irgendwelche IO-Pins schalten, damit ein Event ausgelöst wird?

Um einen Pin am IO-Warrior zu setzen:

Code: Select all

ioHandle = IowKitOpenDevice();

report.ID = 0x00;
report.Bytes[0] = 1; //setzten des ersten Ports mit dem ersten Bit    1 oder 0x01

IowKitWrite(...);

IowKitCloseDevice(ioHandle);
Das ist der grobe Weg zum schreiben auf den IO-Warrior. Im SDK ist ein Beispiel zum "SimpleIO" wo das etwas ausfürlicher beschrieben ist.
Software developer
vablix
Posts: 7
Joined: Thu Mar 05, 2009 2:57 pm

Re: IO-Warrior unter C++

Post by vablix »

Der IO Warrior ist an einem Kit angeschlossen *SPL 12 ( Soundmodul )*.

Er muss auf den SPL 12 zugreiffen und dementsprechend ( je nach Eingabe des Benutzers am Programm ) den Befehl senden *Spiel Lied 1...,...,...* ab.

Danke schon mal für die Ausführliche Antwort ( oben ).

Jetzt heisst es wohl für mich einfach ausprobieren bis es geht.
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IO-Warrior unter C++

Post by Guido Körber »

Wie ist das Modul angeschlossen?
Wie wird das Modul angesteuert?
vablix
Posts: 7
Joined: Thu Mar 05, 2009 2:57 pm

Re: IO-Warrior unter C++

Post by vablix »

Sorry für die Späte Antwort aber habe den Fehler herausbekommen.

Ein IC war kaputt wo es Daten senden sollte, das hab ich ausgetauscht. Jetzt funktioniert alles einwandfrei.

Danke für die Hilfe eurer seits.

Gruss oli
Post Reply