Autor Beitrag
beginnerc#
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 09.02.14 18:38 
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"
www.cesys.com/bedien...eference/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
ausblenden 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;

...

// Search for devices ...
IList<Device> devices = LibraryInterface.Enumerate(DeviceType.All);

// If at least one has been found, use the first one ...
if (devices.Count > 0)
{
  Device device = devices[0];

  // Open device, nothing can be done without doing this.
  device.Open();
  
  ...

  // After some processing, the device can be resetted to its
  // power up condition.
  device.ResetDevice();
  
  ...

  // Finalize device usage, this free's up the device, so it can be used
  // again, including other applications.
  device.Close();
}


Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 09.02.14 19:33 
Hallo und :welcome:

so wie ich die verlinkte Seite verstehe, sollte SingleValue IO der Einstieg für dich sein (IO = Input/Output) - evtl. aber auch FrameIO. Den dortigen SourceCode dann einfach mit dem Basics-SourceCode verschmelzen, d.h. zwischen device.Open() und device.Close die Ein- bzw. Ausgabe (bzw. was du "wertaufnahme und abgabe" nennst) durchführen.

Für diesen Beitrag haben gedankt: beginnerc#
beginnerc# Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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# Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 10.02.14 11:56 
Hallo,

bezogen auf deine erste Antwort:
da die DLL (höchstwahrscheinlich) eine native Library ist (und keine .NET-Assembly) mußt du die DLL direkt in den Ausgabeordner (z.B. "bin/Debug") kopieren. Dies gilt auch für alle anderen abhängigen nativen DLLs!

Du kannst die DLL auch direkt deinem Projekt hinzufügen und bei dessen Eigenschaften "Copy To Output Directory" auf "Copy if newer" stellen, dann wird die DLL beim Erstellen deines .NET-Projekts automatisch kopiert (sofern sie noch nicht existiert bzw. sich geändert hat).

Edit: schau mal unter www.cesys.com/bedien...amming-reference/net (Usages), dort steht alles wichtige!

Noch ein Edit:
es ist nicht nett, ohne Verweis darauf, einfach ein Crossposting zu erstellen: c-plusplus.de - C# AD Wandler über USB auslesen (s. Richtlinien 3.10 Crosspostings).

P.S. Mittels des Dependency Walker kannst du herausfinden, welche DLLs alle benötigt werden.

Für diesen Beitrag haben gedankt: beginnerc#
beginnerc# Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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).

Für diesen Beitrag haben gedankt: beginnerc#
beginnerc# Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 10.02.14 16:27 
ausblenden 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
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.

Für diesen Beitrag haben gedankt: beginnerc#
beginnerc# Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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.

ausblenden volle Höhe 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)
        {


            //Gerät suchen
            IList <Device> devices = LibraryInterface.Enumerate (DeviceType.Usb);

            if (devices.Count > 0)
                //Letztes Gerät wählen
{
  Device device = devices[0];
//CEBO öffnen    ohne keine verwenudnung
  device.Open();

  // Aufnahme der Werte
  IInput[] inputs = new IInput[] 
{
  device.SingleEndedInputs[0],
  device.SingleEndedInputs[1],
  device.DifferentialInputs[1],

};

  device.SetupInputFrame(inputs);

  // Mehrfaches Lesen der Werte zur AUfnahme
  for (int i = 0; i < 100; ++i)
  {
      // Schreiben der Werte in den Frame
      InputFrame inFrame = device.ReadFrame();

      // Ausgabe meiner Werte in die Textbox
      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)
        {


            // Cebo suchen
IList<Device> devices = LibraryInterface.Enumerate(DeviceType.All);

//wenn das letzte gefunden wurde das erste nutzen
if (devices.Count > 0)
{
  Device device = devices[0];

  // Cebo öffnen um weiter arbeiten zu können
  device.Open();


  // Ausgabe eines Analogwerte über AO 0
  IOutput[] outputs = new IOutput[] 
{
  
  device.AnalogOutputs[0]
};

  device.SetupOutputFrame(outputs);

  OutputFrame outFrame = device.CreateOutputFrame();

  // Mehrmales ausgeben des Wertes
  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]
  }

 //Cebo wieder schließen
  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 user profile iconTh69: Code- durch C#-Tags ersetzt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 11.02.14 23:36 
Der Ausdruck

ausblenden 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.

Für diesen Beitrag haben gedankt: beginnerc#