Entwickler-Ecke
IO, XML und Registry - Datenerfassung über USB Schnittstelle
beginnerc# - So 09.02.14 18:38
Titel: Datenerfassung über USB Schnittstelle
Guten Tab mein name ist Michel
Ich bin im moment dabei ein Programm in C# zu schreiben mit welchem ich noch etwas Probleme habe
Und zwar besitze ich einen AD Wandler (Cebo-LC) und möchte mit einem C# Programm Werte aufnehmen und desweiteren auch Werte an ihn übertragungen damit dieser Spannungen abgibt.
Ich nutze im moment Visualstudio express 2010 und habe von hier "Referenzen"
http://www.cesys.com/bedienungsanleitungen/cebo/programming-reference/net/basics/
dort habe ich beispielsweie als den Basic Bereich den ich euch mal unten mit einkopiere.
Mein Hauptproblem ist im moment noch dass ich die wertaufnahme und abgabge einfach nicht hinbekomme ich habe bereits die .dll hinzugefügt und bin soweit keine fehler mehr zu bekommen aber mir fehlt etwas das wissen wie ich jetzt wirklich an meine werte komme da ich ja einen 8 Bit AD Wandler habe und ich ja von einem genauen anschluss die werte möchte.
ich würde mich über tipps oder vllt für wertaufnahme ein kleines "Bsp Programm" mit dem ich mich dann vllt auseinandersetzen könnte freuen. wenn ihr noch infos braucht steh ich gerne zur verfügung aber komme gerade einfach wirlkich nicht weiter das ich mal einen wert bekomme
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| using CeboMsrNet;
...
IList<Device> devices = LibraryInterface.Enumerate(DeviceType.All);
if (devices.Count > 0) { Device device = devices[0];
device.Open(); ...
device.ResetDevice(); ...
device.Close(); } |
Moderiert von
Th69: C#-Tags hinzugefügt
beginnerc# - So 09.02.14 23:17
Dankeschön hab ich getestet aber leider immernoch nicht weiter, hab alles soweit eigentlich bearbeitet das es gehen müsste allerdings bekomme ich einen fehler
Die DLL "cebomsr-1.3-x86.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.
Diese DLL habe ich bei verweisen allerdings hinzugefügt
und auch using CeboMsrNet; in mein programm mit aufgenommen
eine idee ob ich die dll noch an eine bestimmte stelle kopieren muss? eig müsste es doch reichen per verweise die dll aufzunehmen oder?
beginnerc# - So 09.02.14 23:40
Hätte da auch algemein mal eine frage,
Ich bin etwas Zeitlich begrenzt in dem aufbau und muss sehen das ich fertig werde
Meine Vorstellung ist im moment
Ich möchte per laptop also c# Programm eine Messung starten , will also ein signal auf den AD-Wandler geben, von dort auf Logo und damit eine Steuerbarte Spannungsquelle starten die eine Messung durchführt, Die Messung wird vom AD Wandler abgegriffen (Spannungsdifferenzmessung) und kommt wieder an meine C# Software wo der Wiederstand berechnet werden soll und dann dokumentiert wird.
danach noch eine Anzeige ob der Wert ok ist oder nicht.
es werden noch mehr kleinigkeiten mit rein kommen allerdings haben die Zeit und das andere ist mein Hauptprogramm:)
Is es an sich möglich ein everzögerung zu programmieren (bei assambler kenne ich das) damit ich das über einen Button laufen lassen kann aber die Zeit dafür reicht die Messwerte im Button event noch aufzunehmen?
beginnerc# - Mo 10.02.14 15:45
Hi
sorry aber ich dachte einfach das es vllt für mich persöhnlich hilfreich ist verschiedene Meinungen zu dem Thema zu hören da ich im moment wirklich nicht weis wie ich diesen Fehler los werde und auch bekannte die mit Programmieren zu tub haben da nichts wissen.
Werde dies das nächstemal unterlassen.
habe bereits nachgesehen und durch die Verweis-zuweisung hat sich wohl die DLL bereits in bin/Debugg ordner kopiert also ist das ja eigentlich auf jedenfall gängig
Habe auch nochmal Usages durchgelesen aber wie dort beschrieben ist das nicht direkt umsetzbar
cebomsrnet-{ver}.dll, also "using cebomsrnet-1.3" kann ich nicht nutzen da eine fehlermeldung wegen dem - kommt, ich kann nur using cebomsrnet nehmen was aber wohl funktioniert, da ich zumindest die Befehle nuten kann ohne dass Fehler auftreten.
Ich schaue mir gleich nocheinmal das Dependency Walker an und melde mich dann nochmal
mfg
Th69 - Mo 10.02.14 15:58
Ja, die .NET-Assembly "cebomsrnet-1.3.dll" mußt du in deinem Projekt als Verweis hinzufügen, aber diese benötigt eben auch die nativen DLLs "cebomsr-{ver}-{arch}.dll" und daher kommt die Fehlermeldung (da diese nicht gefunden wird).
Du mußt also, wie beschrieben, die DLL "cebomsr-1.3-x86.dll" (sowie evtl. noch andere) in das Ausgabeverzeichnis kopieren (such einfach im Installationsordner nach diesen Dateien). Alternativ kannst du auch die "Path"-Variable der Windows-Umgebung anpassen (und dort dann den Pfad zu denn DLLs hinzufügen).
P.S: Die using-Anweisung im C#-Code bezieht sich immer nur auf den namespace (Namensbereich), d.h. hat nur bedingt etwas mit dem Assemblynamen zu tun (auch wenn dieser meistens übereinstimmen sollte - aber wie in diesem Fall die Versionsnummer nicht enthält).
beginnerc# - Mo 10.02.14 16:17
AHHH ok jetzt hab ichs:) Endlich Fehler weg,
Mein Problem war das im "Softwaredownloadpacket" praktisch ein paar beispielprogramme waren und die eine cobomsrNet-1.3.DLL aber keinerlei x86 oder x64 DLL
Habe es jetzt so gelöst, hab mir ein paar fertige Messsoftwaren von dort noch gholt die ich für mich aber nicht richtig nutzen kann, habe dann diese durchforstet und wirklich noch eine x86 dll dort gefunden und mir dann aus einem von deren Programmen verwendet mein fehler ist soweit jetzt weg,
Vielen Dank der Letzte Post hat es ausgelöst:) Werde jetzt nochmal was essen und mich Stärken und dann endlich mit anfangen können wirklich ein Programm zu schreiben das dann auch gehen kann:)
Vielen dank auch nochmal für die Investierte Zeit, haben in der "Ausbildung" leider eigentlich nur Grundkenntnisse gelernt und alles was Tiefer ist muss man sich selbst beibringen.
Werde vllt auch nochmal bei CESYS anfragen ob sie nicht die DLL auch zum Downloadpacket der Referencen für "selbstentwickler" hinzufügen weil dann wäre das warscheinlich leichter und schneller gelöst worden:D
Ich hoffe ich darf mich fasl ich nochmal ein Problem habe dennoch wieder an dich wenden, trotz des CrossPosts
mfg
Ralf Jansen - Mo 10.02.14 16:27
C#-Quelltext
1:
| "using cebomsrnet-1.3" kann ich nicht nutzen da eine fehlermeldung wegen dem - kommt |
Das using das du hier ansprichst hat nichts mit dem Namen deiner Assembly zu tun. Using ist ein bekanntmachen von Namespaces so das man Klassen ohne ihren Namespace angeben kann.
Also das man die File Klasse einfach als File schreiben kann und nicht vollständig System.IO.File schreiben muss wenn man System.IO bei den usings dabei hat. Wie die Namespaces jeweils heißen sollte in deiner Doku stehen.
Zitat aus der
Doku [
http://www.cesys.com/bedienungsanleitungen/cebo/programming-reference/net/]
Zitat: |
Simply add cebomsrnet-{ver}.dll as reference to your project. This works for both 32 and 64 bit applications. Be sure to have cebomsr-{ver}-{arch}.dll (and its dependencies) in the runtime path when starting the application, otherwise an exception is thrown. |
Hast du den "Be sure"- Teil erfüllt? Offensichtlich hat die von dir angesprochene Assembly/Dll eigene weitere Abhängigkeiten.
Zitat: |
Diese DLL habe ich bei verweisen allerdings hinzugefügt |
Das bringt nichts das ist die Abhängigkeit der Abhängigkeit. Referenzieren solltest du die cebomsrnet-1.3.dll Dll. Die findet ihre Abhängigkeiten zum Beispiel die cebomsr-1.3-x86.dll selbst. Da ist das was du für dein Visual Studio Projekt einstellst irrelevant. Du mußt nur dafür sorgen das Abhängigkeiten von cebomsrnet-1.3 auch von ihr auffindbar sind. Also das die im selben Verzeichnis liegen oder im Windows Path existieren.
beginnerc# - Di 11.02.14 22:43
Hi sorry war wegen Umzug gestern nicht früher in der Lage mich zu melden
Dankeschön nochmal für die Erklärungen konnte zwischenzeitlich alle Probleme soweit lösen habe mir also die DLL aus anderen "Messsoftwaren" von Cesys geholt und dann ging es direkt habe auch mein erstes Programm soweit laufen natürlich noch klein.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using CeboMsrNet;
namespace Eingabe_ausgabe__für_Projektarbeit { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) {
IList <Device> devices = LibraryInterface.Enumerate (DeviceType.Usb);
if (devices.Count > 0) { Device device = devices[0]; device.Open();
IInput[] inputs = new IInput[] { device.SingleEndedInputs[0], device.SingleEndedInputs[1], device.DifferentialInputs[1],
};
device.SetupInputFrame(inputs);
for (int i = 0; i < 100; ++i) { InputFrame inFrame = device.ReadFrame();
textBox1.Text = Convert.ToString( "Analoger Eingang #0: " + inFrame.GetSingleEnded(0) + " V, " + "Analoger Eingang #1: " + inFrame.GetSingleEnded(1) + " V, " + "Differential #1: " + inFrame.GetDifferential(1) + " V, "); }
device.Close(); }
}
private void button2_Click(object sender, EventArgs e) {
IList<Device> devices = LibraryInterface.Enumerate(DeviceType.All);
if (devices.Count > 0) { Device device = devices[0];
device.Open();
IOutput[] outputs = new IOutput[] { device.AnalogOutputs[0] };
device.SetupOutputFrame(outputs);
OutputFrame outFrame = device.CreateOutputFrame();
for (int i = 0; i < 100; ++i) { [color=red] outFrame.SetAnalogOutput(0, (float)(3 * Math.Sin((float)i / 100.0f))); outFrame.SetDigitalPort(2, i);
device.WriteFrame(outFrame);[/color] }
device.Close(); }
} } } |
Ist zwar noch nicht gut aber Als Grundfunktion klappt es kann meine Werte lesen und einen Wert ausgeben das muss ich jetzt noch etwas verschönern und bisschen mit Klassen verbessern da es ja mehrere Messmethoden geben wird.
Zeile 96-98 müsste ich euch jedoch nochmal belästigen und zwar konnte ich mir diesen Teil nochnicht soweit erklären bzw nutzen um ihn für mich anzupassen, konnt mir das nur als Beispiel nehmen aber eine wirkliche Anpassung eines Spannungswertes habe ich noch nicht hinbekommen. Werde es noch weiter Probieren falls es klappt hier dann direkt bescheid geben, fals nicht würde ich mich freuen wenn ihr mir diese Zeile vllt nochmal näher bringen könntet damit ich da vllt besser zurecht komme
Edit:
Ganz vergessen meine Meinung zu schreiben:) outFrame.SetAnalogOutput(0, - ist klar, ist die anweisung das auf dem Analogen Ausgang 0 die Frameausgabe stattfinden soll
float - müsste ja ähnlich wie double sein und gibt mir nur an welche forum mein wert dann hat also halt ne float zahl
3*Math.Sin ist für mich jetzt 3 mal der sinus von (i/100.0f)
und der letzte klammerwert ist praktisch dann i also die hochrechnung der wiederholungen /100.0f
Jetzt versteh ich allerdings gerade diesen befehlt i/100.f nicht also wieso nimmt es mir die zahlen 1-100 obwohl ich beim ausgang einen konstanten wert messe? und was genau macht jetzt 100.0f ?
Moderiert von
Th69: Code- durch C#-Tags ersetzt
Ralf Jansen - Di 11.02.14 23:36
Der Ausdruck
C#-Quelltext
1:
| (float)(3 * Math.Sin((float)i / 100.0f)) |
ist sicher nicht konstant bei sich änderndem i. Das f bei der hundert bedeutet einfach das es sich um eine float Konstante handelt um sicherzugehen das auch eine Fließkommadivision benutzt wird und keine Ganzzahldivision. Die würde bei deinen Eingangswert ja auch immer 0 sein.
Die Schleife geht ja vermutlich Ruckzuck in Sekundenbruchteilen durch wenn du an dem Ausgang nicht gerade mit einem Speicheroszi hängst bekommst du das vermutlich einfach nicht mit da zu schnell und du siehst nur den letzten gesetzen Wert von SetAnalogOutput denn dauerhaft setzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!