Laden...

Forenbeiträge von key-board Ingesamt 33 Beiträge

02.05.2016 - 14:43 Uhr

OK ich habs vorerst gelöst.
Hab die betreffende Zeile in

 EMS.SelektedItems = new List<string[]>(this.getSelectedParts);

geändert, sprich ich zwinge ihn zur übergebe einer Kopie der liste. Damit geht es.

02.05.2016 - 13:30 Uhr

Hallo
Ich habe eine GUI in der ich Daten aus einer csv Datei einlese, Beim einlesen werden mehrere Listen erstellt, damit ich durch meine Elemente itterieren kann. unter anderem auch die betreffende Liste, welche Daten enthält

MyList[i][0]=Combobox[i].SelektedItems;
MyList[i][1]=Checkbox[i].Checked;
MyList[i][2]=Combobox2[i].SelektedIndex;

Das ganze 10 mal für meine 10 auswählbaren Elemente aus der CSV Datei mit deren Einstellungen, die ich interaktif verändern möchte.

Ein Button soll die Einstellungen Aktialisieren also quasi neu reinschreiben, genauso wie button2
und ein weiterer nimmt die Daten und verarbeitet meine Daten anhand der Einstellungen neu und stellt das Ergebniss entsprechend dar.

Wenn ich MyList innerhalb von Button2_Click deklariere funktioniert das schreiben und lesen tadellos, aber halt nur in Verbindung mit dem Button2. Andere Events können auf diese Daten nicht zugreifen.

was den Debugger angeht, dank ihm weiß ich dass die Liste auf einmal leer ist aber wann das passiert hab ich damit noch nicht herausgefunden 😦 auf einmal ist die Liste leer

@p!lle
hab deine Nachricht zu spät gelesen

Im Anhang ist der Code aus dem Windows Forms Fenster.
Ich weiß dass er inzwischen recht unübersichtlich geworden ist.

So Wen ich in Zeile 219

EMS.Matrix=csv1.Matrix

meinen Brakepoint setze und einmal auf button1_click "drücke" und im einzelschritt weiter gehe. stehen die Daten drin wie sie sollen. Drücke ich dann nocheinmal auf button1 und stoppe wieder in Zeile 219, so sind due Daten in SelectedParts noch da. Gehe ich einen Schritt weiter in Zeile 220, ist sofort der Inhalt von SelectedParts weg, obwohl ich doch nur lesend darauf zugreife

02.05.2016 - 12:37 Uhr

Hallo Leute

Ich habe eine Liste erzeugt nach dem muster


namespace WindowsFormAnwendung
{
    public partial class Form1 : Form
    {
        List<string[]> mylist = new List<string[]>();
        List<string[]> MyList
        {
            get
            {
                return mylist;
            }
            set
            {
                mylist = value;
            }
        }

        public Form1()...

button1_Click(...)
        {
            for (int i = 0; i < 10; i++)
            {
                string[] dummy = new string[3];
                MyList.Add(dummy)
            }
        }//nun hab ich eine Liste[0..9][0..2]

button2_Click(...)
        {
            for (int i = 0; i < 10; i++)
            {
                //tu was und schreibe Ergebnisse in die liste


                MyList[i][0] = wert1;
                MyList[i][1] = wert2;
                MyList[i][2] = wert3;

            }
        }
    }
}

Beim ersten mal button 2 click ist alles in Ordnung
beim 2. mal button 2 click erhalte ich beim auslesem von MyList andere Werte als ich durch den Click hineingeschrieben habe
und beim 3. mal Fehlermeldung, weil

 MyList.Count=0;

Ich verwende nicht ein mal

 MyList.Clear();

also warum ist die Liste auf einmal leer?

28.04.2016 - 14:45 Uhr

Achso na dann brauch ich mir darüber keine Gedanken machen.

Vielen Dank 😃

und ich such mir einen Wolf wie das funktionieren könnte^^ denn wie sonst einfach ref davor hat ja nicht funktioniert^^

28.04.2016 - 14:17 Uhr

Ahoi
Ich habe 2 Klassen
die eine beinhaltet alle Funktionen um eine csv Datei einzulesen, aufzubereiten und hält auch den Inhalt als Liste<string[]> auf den man mithilfe des get-accessors zugegriffen werden kann. Davon gibt es 3 Instanzen.

Die andere Klasse beinhaltet Funktionen welche diese Daten nach verschiedenen Kriterien manipuliert, ordnet und zur Darstellung aufarbeitet.

Da es doch recht viele Daten sind (ca 25000 werte pro List) will ich nicht jedes mal eine komplette Kopie der Originaldaten übergeben sondern nur die Referenz.

Wie kann man also Daten in meinem fall List<string[]>... , von meiner CSV Klasse als Referenz an meine Verarbeitungsklasse übergeben, damit diese die Daten lesen kann?

bzw. ist es überhaupt möglich?

23.09.2015 - 18:57 Uhr

ah danke das werd ich mir mal ansehen
ich find auf der seite leider keinen hinweis was das nachher kostet. aber mal schaun. wenns gut ist und nicht tausende euro kostet mach ich das gern^^

23.09.2015 - 18:25 Uhr

Hallo Leute
Ich fang gerade wieder mit C# an. Ich verzweifle allerdings gerade an den Basics was das Programmieren an sich angeht. Ich rede dabei nicht von Datentypen, Schleifen und Variablen und dem ganzen anderen Urschleim. Sondern die Gliederung meiner Programme: z.B.

-Funktionen und Hauptprogramm nicht alles in einem .cs file von oben nach unten runterschreiben sondern in jeweils eigene .cs files unterteilen mit und ohne Übergabe von Werten*wie generiere ich in Visual Studio neue .cs files *wie werden die eingebunden und benutzt

-Funktionen die ich mir schonmal gebaut hab entweder zu einer eigenen Bib hinzufügen oder wie oben das .cs file einbinden

-Ordentliches Debuggen sprich auch mal Life den Inhalt von Variablen watchen oder gar Tracen

-Einbinden einer GUI, wobei die GUI wirklich nur eine Grafische Werte ein und ausgabe ist und die nicht einfriert weil mit klick auf den OK button der gesamte Programmcode ausgeführt wird *wie werden die Werte übergeben *wie werden die eingebunden und benutzt

-Ich glaube zu wissen das der letzte Punkt auf das Multithreading hinausläuft aber wie genau funktioniert das...

mit dem msdn mir schnipsel für schnipsel raussuchen find ich ziemlich frustrierend und ermüdent. Einen Film versteh ich auch nicht wenn ich hier und da mir Sekundenweise Schnipsel ansehe.

Kennt Ihr ein gutes Tutorial von mir aus auch auf englisch dass sich auch mit solchen Fragen befasst und nicht nur mit dem Urschleim? Am liebsten in Videoform, weil ich das von meinem Lerntyp her viel besser für mich verarbeiten kann... Beim Lesen weiß ich am ende der Seite schon nicht mehr was am anfang stand...

Danke schonmal

17.04.2015 - 20:49 Uhr

Hallo

Ich versuche es zu strukturieren

Ziel der Software: das ganze wird eine Energiesimulation, welche in "echtzeit" (ich weiß dass der begriff hier nicht richtig ist weiß aber nicht wies besser benannt wird) auf Benutzereingaben sowie Messwerten (vom Arduino gemessen und an programm gesendet) reagiert. Wie eine art "Computerspiel" soll der Benutzer für eine stabile Energieversorgung sorgen.

Aufbau:

Ich habe mir die verschiedenen Energieanlagen jeweils als eigene Klasse definiert, sodass ich wenn ich meinetwegen 2 PV Anlagen im Netz hab nicht 2 mal den Code hinklatschen muss sondern einfach 2 mal instanzieren mit unterschiedlichem Namen. (Arbeit sparen und Codeänderung nur an einer stelle)

Jetzt will ich dass eine Klasse (z.B.PSKW) auf eine andere Klasse (z.B.Speicher) zugriff hat um in dem Fall das Ober und das Unterbecken abzubilden.

Das Mainprogramm ruft Zyklisch (Timer Tick) alle Instanzen aller Klassen auf die jeweils einen RUN() member haben welcher die Berechnung auslöst.
Zuerst die der Energieanlagen und sammelt alle Leistungen, Füllstände und sonstige Informationen.
Danach werden Weitere Instanzen aufgerufen der Classe Knotenpunkt.
Diese errechnen die Leistungsflüsse in den Kabeln zwischen den Knotenpunkten.

Ich brauche also die Möglichkeit in den Klassen andere Klassen aufzurufen und die Daten alle in der Main zu sammeln.

Jetzt beim Schreiben kahm mir ein neuer Lösungsansatz aber den Probier ich erst aus^^ is wie beim Publikumsjoker. Da sollte man vorher auch nicht sagen was man denkt^^

17.04.2015 - 15:16 Uhr

Hallo

zur Programmstruktur:
Habe mir mehrere Klassen definiert, welche Funktionen beinhalten
z.B. eine Klasse Speicher mit der Funktion Laden (ich tue etwas rein), Entladen (ich entnehme etwas) und SOC (ich bekomme den aktuellen Ladezustand)
und eine Klasse PSKW(Pumpspeicherkraftwerk) mit der Funktion Hochpumpen und ablassen, die mir jeweils eine elektrische Leistung zurück geben.

Natürlich hat ein solches PSKW 2 Wasserbecken welche im weitesten Sinne als Speicher betrachtet werden können.

In der Form1 Klasse Funktion sind die ganzen Klassen instanziert. Zuerst hatte ich es so dass ich die Klassen von Form1 habe erben lassen um in der Form1 geschriebene Funktionen wie int PSKW_getSOC() welche mir den Speicherinhalt meinetwegen der instannzierten Speicherklasse Oberbecken zurückgibt nutzen zu können

Speicher Oberbecken = new Speicher();
PSKW pskw = new PSKW();
int PSKW_getSOC() 
{
  return(Oberbecken.SOC;
}

class Speicher : Form1

Beim Programmieren gab es keine Fehlermeldungen aber beim Ausführen hatte ich immer StackOverflow, wass durch Speicher : Form1 ausgelöst wurde.

ist dass was ich vor habe mit interface zu lösen oder ist das garnicht machbar?

mein Ansatz ist


interface Ispeicher
     {
         bool charge(int value);
         bool discharge(int value);
         int soc();
         

     }

class Speicher : Ispeicher
{...}
class PSKW : Ispeicher
{...}



aber irgendwie komme ich nicht darauf wie ich pskw dazu bringe auf die Oberbecken instanz von Speicher zuzugreifen:( es ist zum verzweifeln

ist mein Ansatz grundsätzlich richtig, ich setze ihn nur falsch um oder völliger blödsinn? Denn wenn Blödsinn dann brauch ich da auch nicht weiter grübeln.

Wenn es an der Umsetzung hapert kann mir da einer auf die Sprünge helfen?

22.03.2015 - 21:59 Uhr

Hallo Leute
Ich experimentiere zur zeit mit meinem MPU-6050 (Gyro+Acclerometer)
die Daten hol ich mir über einen Arduino in den PC

Um sauber die Lage des Sensors zu ermitteln werden z.B. Komplementärfilter verwendet.
Winkel= a*(alter Winkel+Winkelgeschwdt)+(1-a)(Acc Winkel)

Was ich nicht verstehe ist warum immer gyro und acc winkel des selben messachse genommen werden un die zu einem Winkel zu machen

So wie ich das Verstehe und rangehe errechne ich einen Normalenvektor in einem festen Koordinatensystem mit den Winkelkomponenten zu X Y und Z Oder dem Gier, Nick und Rollwinkel was im prinzip ja die Winkel in den Ebenen sind.
Aber wenn das so ist verändert eine Drehung um die z.B. Y Achse den Z-Winkel in er X_Z Ebene des Vektors.
Ich komm nicht dahinter warum alle anderen einem Winkel und das Driften des selben durch eine Beschleunigung in Richtung der Drehachse herausrechnen???

könnt ihr mich da erleuchten?

so ich würde das so machen z.B. den Rollwinkel (Drehung um die X Achse*dt+alter rollwinkel)a +(1-a)((ACC Y Winkel+Z Winkel)/2).

So würde das für mich mehr sinn ergeben.

17.03.2015 - 16:00 Uhr

Auf mehrere dateien nicht zwingend. Gut wenn es am ende 2 dateien mit .cs kürzel werden auch gut. dann würde ich sogar jede funktion und/oder klasse in so eine datei schreiben weil ich einige funktionen wie z.b. das lesen und schreiben in ein mmf immer wieder brauche in verschiedenen programmen und bis lang einfach den code kopiere. in einer eigenen datei bräuchte ich nurnoch die einfügen.

aber so oder so weiß ich nicht wie ich z.B. meiner Form.cs datei beibringe wo die ganzen "ausgelagerten" dateien sind und wie ich drauf zugreife 😦

17.03.2015 - 15:46 Uhr

ich dachte dass das so läuft, auf einer seite stehen meine ganzen klassendefinitionen usw und auf der anderen Seite das eigentliche Programm wo die klassen nur noch aufgerufen werden, die definitionen aber nicht nochmal da stehen, weil die ja schon auf der anderen seite definiert sind. wenn das so nicht geht dann ist dass so und ich muss mit leben.

17.03.2015 - 15:21 Uhr

wenn ich dass mache hab ich 2 seiten mit dem exakt gleichen code... der kopiert das Fenster nur und übernimmt jede Änderung auch auf die andere Seite 8o

warum der das macht weiß ich auch nicht... macht für mich auch keinen sinn warum das gemacht werden sollte...

17.03.2015 - 14:59 Uhr

Hallo
Ich weiß dass die frage peinlich ist aber ich krigs einfach nicht hin und finde auch keine Anleitung im Inet... Vll bin ich auch nur zu d..m den richtigen Suchbegriff zu finden...X(

Wie kann ich meinen Programmcode auf mehrere Seiten verteilen, damit nicht alles untereinander auf einer Seite steht.

Ist eine Windows Forms Anwendung. Ich will die ganzen Beschreibungen für Buttons, Timer, Ereignisshandler,... auf einer Seite, und auf der/die anderen Seite(n) meine Klassendefinitionen und Funktionen um die Übersicht zu behalten und nicht stunden lang scrollen zu müssen...

06.03.2015 - 20:53 Uhr

Bei SPS Programmierung scheint das auch normal zu sein sowas zu machen
SPS Programmierung und OOP sind aber 2 ganz unterschiedliche paar Schuhe.

Schau dir mal die Grundlagen von OOP mit C# an, dann wird dir z.b. auffallen das deine ganzen set_/get_ Funktionen in C# eher Properties sind.
Auch wird dir dann sicherlich auffallen das du das Pferd von der falschen Seite aufzäumst.

das stimmt SPS und OOP hat nicht viel gemein. Hatte mich davon ja nur inspirieren lassen. Und was OOP angeht behaupte ich zwar von mir ich kann das ansatzweise, zumindest konnte ich bisher alles lösen was ich gebraucht habe, aber in wirklichkeit weiß ich auch dass ich in OOP ein noob bin. Gebe auch ehrlich zu vieles nicht richtig verstanden zu haben, aber deshalb mach ich immer weiter und versuche stendig dazu zu lernen.

Und dass ich eine solche Datenstruktur in OOP mit Klassen nicht so einfach nachbilden kann wie bei SPS hab ich jetzt auch gelernt 😃

Und hilf mir mal bitte auf die Sprünge warum ich "das Pferd von der falschen Seite aufzäume" Vielleicht ist es heute einfach nur zu spät aber ich sehe meinen Denkfehler nicht

PS meine set_ und get_ geschichten sind nur an manchen stellen wo ich die eingabewerte begrenzen will
sprich ohne auf korrekten code zu achten da ich keinen Limit(min,value,max) oder ähnliches gefunden habe


Set_bla(value)
{if value > x
 merke x
 else if value < 0
 merke 0
 else
 merke value}


06.03.2015 - 20:23 Uhr

Ah vielen Dank
Sorum geht das also auch. Supi. Kannte das mit der Liste noch nicht.
versteh ich das richtig, dass dieses List<Aufgang> mir die Möglichkeit gibt
ein Objekt der Klasse Aufgang zu erstellen also

Aufgang Sonnenblume = new Aufgang()

und mit dem Haus Sonnenschein eindeutig zu verknüpfen.
Sprich im schlimmsten fall auch haben kann
Haus Mondschein Aufgang Sonnenblume?
Dass das dann unglückliche benennung ist ist klar aber der rechner würde die beiden Sonnenblumenaufgänge nicht verwechseln?

und könnte ich auf die Liste so zugreifen nach dem schema (mit deiner benennung)?

haus.auf.set_Zimmer

Es geht ja im eigentlichen Projekt ja auch nicht um Häuser und Aufgänge. Hab das nur gewählt um es verständlicher zu machen.

Ich denke nämlich mal dass nicht jeder durchsieht wenn ich von Netzknoten Lasten und Transferleistungen rede.

Nur um Klartext zu reden will ich jede Last eindeutig einem Netzknoten zuweisen, und in einem Energieverteilungsnetz gibt es ja meinetwegen nicht nur ein Haus oder eine Windkraftanlage. Es wird entsprechend mehrere Netzknoten(Haus) geben und jeder hat halt auch mehrere Lasten(Aufgänge) und die dann ihre zur Berechnung relevanten Daten(Zimmer, BettenImZimmer,...)

PS @Palladin007 sorry hab deine Antwort erst gelesen als ich mit meiner hier fertig war^^ vielleicht kannst du meinem Klartext besser folgen als der aus der Luft gegriffenen Haus Aufgang Zimmer/Bett Geschichte

Anstatt der BettenImHaus Zählung sollte án der Stelle auch eher eine Machenstromanalyse stattfinden. Hatte eben nur befürchtet dass damit niemend etwas anfangen kann. Und um nicht durcheinander zu kommen hatte ich mir halt die herangehensweise mit den "geschachtelten Klassen" überlegt. Bei SPS Programmierung scheint das auch normal zu sein sowas zu machen. Zumindest bei dem letzten Projekt wo ich mitgearbeitet habe. Daher hab ich die Idee.

06.03.2015 - 18:37 Uhr

Hallo
Ich suche schon eine ganze weile aber finde nichts passendes.

Es geht darum, ich habe ein paar verzweigte Klassen nach dem Schema


class Haus
{
  class Aufgang
  {
    public void set_Zimmer(int x)
    {...}
    public int get_Zimmer()
    {...}
    int Zimmer
    public void set_BettenJeZimmer(int y)
   {...}
    public int get_BettenJeZimmer()
    {...}
    int BettenJeZimmer
  }
  public int BettenImHaus()
  {
  Nehme aus jedem Aufgang des Hauses die Anzehl der Zimmer und BettenJeZimmer und errechne die Betten im Haus  
return BettenImHaus;
  }
}

verwenden will ich die so


Haus Sonnenschein = new Haus();
Sonnenschein.Aufgang Sonnenblume = new Sonnenschein.Aufgang();
Sonnenschein.Aufgang Primel = new Sonnenschein.Aufgang();

Sonnenschein.Sonnenblume.set_Zimmer(20);
Sonnenschein.Sonnenblume.set_BettenJeZimmer(5);
...
int Plätze = Sonnenschein.BettenImHaus();

zumindest stell ich mir das so vor.
Mein Problem daran ist
a) der zuletzt gebrachte codeschnipsel funktioniert nicht
der sagt dann
"...Form1.Sonnenblume" ist ein(e) "Feld" wird aber wie ein(e) "Typ" verwendet.
Ich finde nicht wie ich ein Objekt der "Aufgang" klasse in der "Haus" klasse erstellen kann. Geht das Überhaupt?

b) gibt es eine möglichkeit die sache mit Sonnenschein.BettenImHaus() umzusetzen mit egal wie vielen erstellten Aufgängen? oder muss dann alles einzeln und von Hand Programmiert werden?.

Hoffe ich hab mein Problem Kreativ und verständlich rübergebracht.
Hab mich an einer alten Jugendherberge in der ich früher mal war inspirieren lassen.
Danke schonmal.

Bitte nicht solche antworten wie Steht im msdn... Hab da schon geschaut und gelesen aber nix gefunden 😕 Ich weiß dass ich höchst wahrscheinlich nicht richtig geschaut habe oder Tomaten auf den Augen habe. wenn dann bitte mit Verweis/Link wo ich nochmal lesen muss.
Danke

27.08.2014 - 14:39 Uhr

Vielen Dank

Das hat geholfen. Zumindest bekomm ich jetzt den Namen meines Launchpads angezeigt.

Für alle, die mit dem selben Problem nach einer Lösung suchen


using System.Management;
 ManagementClass osClass = new ManagementClass("Win32_SerialPort");
                       foreach(ManagementObject c in osClass.GetInstances())
            {
                
                Console.WriteLine(c.GetPropertyValue("Name"));
            }

Zumindest hat es so funktioniert, auch wenn mein USB-UART Converterstick auf die Weise nicht gefunden wird. Immerhin ein Teilerfolg.

Fals noch jemand Tipps hat immer her damit.

27.08.2014 - 11:12 Uhr

Hallo Leute

Ich hab mal wieder eine Frage. Ich will, wenn ich mir mit

string[] schnittstellen = SerialPort.GetPortNames();

mir die verfügbaren Comports ausgeben lasse, dass der mir auch angibt, welches Gerät daran angeschlossen (Gerätename) ist wie z.B. MSP FET430UIF. So wird mir mein Launchpad im Gerätemanager angezeigt.
Ich habe sowohl auf msdn als auch hier im Forum gesucht aber nichts gefunden.
Dass das grundsätzlich zu funktionieren scheint hab ich bei nem Kumpel gesehen, der allerdings in c++ schreibt, wovon ich erst recht keine Ahnung habe.

kann mir jemand zumindest einen Tipp geben, wo ich suchen kann denn wie gesagt in der SerialPort-Klasse habe ich es nicht gefunden (oder übersehen), und auch mit der SuFu bekomme ich keine Ergebnisse, die mir weiter helfen.

Danke schonmal

20.08.2014 - 16:41 Uhr

ah stimmt. ähm was war das new line zeichen im ascii code? Hab die Tabelle vor mir aber finds nicht...

habs mit 0x0a (nl=newLine?) probiert indem er 10 mal a sendet dann nl und dann wieder von vorne aber jedesmal bekomm ich timeout beim Lesen 😦

20.08.2014 - 16:12 Uhr

Hallo Leute
Ich experimentiere gerade mit meinem MSP430 Launchpad und will mittels eines USB UART Wandlers mit dem Kommunizieren.
Ich kann Daten an den µC Senden, aber kann keine Daten empfangen...
Momentan ist der MSP so eingestllt, dass er andauernd "a" sendet.

wenn ich versuche zu lesen und danach BytesToRead() nutze bekomm ich auch eine entsprechende Anzeige wie viele Byts da sind aber kann auf kein einzigen zugreifen


SerialPort AktuellerComPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); // ComPort erzeugen 
 private void button1_Click(object sender, EventArgs e)
        {
            string[] schnittstellen = SerialPort.GetPortNames();   // Gibt alle aktuell verfügbaren Comports zurück
            foreach (string comport in schnittstellen)
            { comboBox1.Items.Add(comport); }

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                AktuellerComPort.PortName = comboBox1.Text; // dem ComPort Objekt einen Comport zuweisen
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

       

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
               // AktuellerComPort.Open();
                backgroundWorker1.RunWorkerAsync();
                
              //  AktuellerComPort.WriteLine(textBox1.Text);  // sende inhalt der Textbox an ComPort  
                
               // AktuellerComPort.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        private void button3_Click(object sender, EventArgs e)
        {
            AktuellerComPort.ReadTimeout = 1000;
            AktuellerComPort.Open();
            
            textBox2.Text =Convert.ToString( AktuellerComPort.BytesToRead);
            AktuellerComPort.Close();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
try
            {
                AktuellerComPort.ReadTimeout = 100;     //Wartezeit (Timeout Zeit) (in ms) auf Antwort bevor der Lesevorgang abgebrochen wird
                AktuellerComPort.Open();
               textBox2.Text = AktuellerComPort.ReadLine();   //einlesen                    
                AktuellerComPort.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                AktuellerComPort.Close();
            }
        }

Damit versuche ich es die ganze zeit.
Kann mir jemand weiterhelfen, wie ich den Rechner dazu bekomme mir anzuzeigen, was der µC sendet (in dem fall "aaaaaaaaaaaaa...")
Danke schonmal im Voraus

23.07.2014 - 21:41 Uhr

@ Coffeebean
Hi Danke allerdings die sachen die ich unter google finde sind ja die für klassisches Abarbeiten wie bei Console. Die PAPs hab ich fertig.

@Palin Ich hab dann wohl wieder zu weit gedacht. danke.
Dass das mit dem Try Catch keine ich sag mal schöne Lösung ist weiß ich 😭, war nur für mich die einfachste, weil ich die kenne. Catch schreibt ja eh nur ne 0 in nen array , damit mein GUI wenns da nachschaut weiß, ob das MMF da ist. und dass es eben nicht abstürtzt.

Is zwar meine Abschlussarbeit, da ich im Studium das Programmieren allerdings nicht gelernt habe und mir selber beigebracht habe drücken meine Proffs bei soner uneleganten Lösung auch ein Auge zu, zumal die da eh nicht die Spezialisten für sind. 😄

23.07.2014 - 20:32 Uhr

Hallo Leute.
Ich muss für meine Arbeit von meinem Programm PAPs anfertigen (Programm Ablauf Plan), nur weiß ich gerade nicht wie so etwas bei einem Windows Forms Programm aussehen kann da es ja irgendwie keinen richtigen Programmablauf gibt. X( Die entsprechenden Anweisungen werden doch nur bei dem entsprechenden Ereignis ausgeführt. Muss da für jeden Button und Timer ein eigener PAP, auch wenn der nur eine Codezeile beinhaltet?

Im Prinzip macht das Programm nichts weiter als Zyklisch (timer.Tick) Daten aus MMF-Files lesen, diese Darstellen und andere Werte von den Bedienfeldern in die MMFs schreiben. Is ein GUI für mehrere Konsolenanwendungen.

Und müssen Try Catch sachen im PAP dargestellt werden? Ich nutze die um zu erkennen, ob das Entsprechende MMF-File überhaupt vorhanden ist und wenn nicht dies sicher zu erkennen und entsprechend darzustellen.

Wenn jemand für sowas tipps oder vll ein paar Bilder hat, wie in so einem Fall ein PAP aussehen kann währe ich euch sehr dankbar.

Danke schonmal

02.07.2014 - 17:32 Uhr

OK Vielen dank.

Jetzt funktioniert es

Ich hatte vorhin auch die
AppDomain.CurrentDomain.BaseDirectory Funktion ausprobiert aber nur nicht mit in meine Antwort geschrieben

Mein Fehler war da, dass ich dachte, dass diese Funktion im String den Namen des Programms enthält.

Jedenfalls Funktionierts jetzt
Danke

Kann geschlossen werden

02.07.2014 - 16:31 Uhr

Ja hast ja recht.

            string relpath;
            relpath = System.Windows.Forms.Application.StartupPath;
            relpath = relpath.Substring(0, relpath.Length - 6);
            relpath = relpath + "GUI.exe";

(-6 weil die letzten 6 Zeichen H2.exe sind)

Problem ist dass der das "Forms" als Fehler ansieht und daher das ganze nichteinmal Kompailieren will. Das hab ich übrigens von der "Pfad zur eigenen Anwendung ermitteln" Seite
Seine Fehlermeldung> Fehlermeldung:

Fehler 1 Der Typ- oder Namespacename "Forms" ist im Namespace "System.Windows" nicht vorhanden. (Fehlt ein Assemblyverweis?)

Habe auch die beiden anderen Möglichkeiten, die auf der Seite gegeben werden ausprobiert.

Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location); 
Path.GetDirectoryName (Assembly.GetEntryAssembly ().Location);

Da unterstreicht er Path und Assembly als Fehler.

Ich fürchte dass ich einfach nicht weiß wie diese Zeilen zu verwenden sind

Daher meine Frage gibt es eine einfachere Variante einen relativen Pfad anzugeben und auszuführen

PS: hoffe die Fehlerbeschreibung ist besser

02.07.2014 - 16:03 Uhr

Hallo

ich will dass meine Consolenanwendung eine windowsforms anwendung startet, welche als GUI fungiert. Momentan wenn ich weiß wo die liegt programmiere ich den Pfad ein und Funtioniert.

Gibt es eine elegante Möglichkeit diesen Pfad relativ zum eigenen Standort anzugeben

Meine Idee war bis jetzt mit Application.StartupPath den eigenen Pfad herauszufinden, den eigenen Namen daraus zu entfernen und dafür den Anderen Anwendungsnamen mit Endung einzufügen. Aber dass klappt irgendwie nicht und kommt mir auch nicht sonderlich elegant vor

Danke schonmal

24.03.2014 - 23:18 Uhr

Hallo Leute. Ich habe gerade eine große Verständnisslücke und hoffe dass ihr mir helfen könnt.

Ich hab eine Funktion die einige Mathemathische Operationen ausführen soll und das Ergebniss in einem chart darstellt(klappt). Das passiert zycklisch von einem timer gesteuert (klappt). Da ich mehrere solcher Operationen hab will ich die Funktionen in Threads auslagern, damit meine GUI nicht einfriert und nicht ein CPU kern die Arbeit allein bewältigen muss sondern windows das auf andere freie Kerne verteielt. Sonst kann es passieren, dass noch nicht alle Berechnungen abgeschlossen sind, der timer aber schon den nächsten Zycklus einleiten will. Ab da kommt dann nemlich nur noch Müll heraus.

Mein Problem setzt da an, dass ich dem Thread ein int Array übergebe (klappt hoffentlich) und am Ende ein Float Array zurückgegeben werden soll... KLAPPT NICHT

ich habe mir bei msdn eine vorgehensweise mit dem Backgroundworker angesehen und hier eine mit dem feuern eines events. Aber verstehen tu ich nix... X(
Kann mir jemand helfen? Ein leicht verständliches Codebeispiel oder ähnliches?

da ich gerade keine ahnung hab wie ich die Rückgabe organisiere kann ich als codebeispiel nur das anbieten, wie ich es mir anfangs gedacht hab. Aber so funktioniert das nur halt leider nicht.

Das die Übergabe hoffentlich funktioniert schließe ich daraus, dass sich zumindest an der Prozessorauslastung etwas tut wenn ich das ganze testweise starte


//Thread
public class wetter_sim
    {
        public int[] mode = new int[4];
        public float[] ergebnisse = new float[5];
        
        public void wetter_simulation()
{
 ...
ergebnisse[0] = gr_ycos;
return;
}
}

//Aufruf
wetter_sim wetter_sim_object = new wetter_sim();
                Thread wetter_sim_Thread = new Thread(wetter_sim_object.wetter_simulation);
                wetter_sim_object.mode[1] = 1;
                wetter_sim_Thread.Start();
                Thread.Sleep(1);
                ergebniss_wetter=wetter_sim_object.ergebnisse;
                gr_xcos=zeit[2]/1440;
                this.chart1.Series["Series1"].Points.AddXY(gr_xcos, ergebniss_wetter[0]);


Danke schonmal

14.01.2014 - 08:45 Uhr

Perfekt Vielen Vielen Dank!!!
Studienarbeit ist gerettet.
es scheint als würde das Lesen und Schreiben von Float zahlen Funktionieren. Werds später ausgiebig testen

13.01.2014 - 22:29 Uhr

ahh stimmt daran hab ich nicht gedacht dass eine float einheit 4 byte groß ist...
gibt es ne Möglichkeit diese reservierten Einheiten auf 4 byte zu vergrößern??

damit ich da int oder eben float zahlen hineinschreiben kann?

oder ich muss mir was ausdenken dess mit byte zahlen zu kodieren...

Das Programm ist der zentrale teil meiner Studienarbeit und ich bin so gut wie fertig damit... es fehlt halt nurnoch diese möglichkeit float ins mmf zu schreiben...

13.01.2014 - 19:34 Uhr

Hi Leute

Ich bekomme beim Erzeugen eines MMF's die oben genannte Fehlermeldung.
In das MMF soll ein Array von float zahlen geschrieben werden. Selbst wenn das Array eine länge von 1 besitzt kommt diese Fehlermeldung... Im RAM ist noch über 2GB frei.

public class mmf_erzeugen_work
    {
        public void mmf_file_work_erzeugen()
        {
             int filesize_work = 1;        //größe des im RAM Reservierten Speicherplatzes
             float[] mmf_file_work = new float[filesize_work];  //Array, welches in den RAM gespeichert werden soll
             mmf_file_work[0] = 1;    //Speicherstelle 0 des Array. Als status genutzt. Wenn 0 wird das MMF geschlossen.

            using (var mmf = MemoryMappedFile.CreateNew("mmf_file_work", filesize_work))  //Neues MMF File  erzeugen mit dem Namen "mmf_file" und der Größe filesize
            {
                // Lock: Das mmf_file für andere Prpgramme grundsätzlich Zugänglich machen und anzeigen, dass datei bereits verwendet wird.
                bool mutexCreated;
                Mutex mutex = new Mutex(true, "MMF_IPC_work", out mutexCreated);

                // Create accessor to MMF: Zeiger auf mmf_file
                using (var accessor = mmf.CreateViewAccessor(0, mmf_file_work.Length))
                {
                    // Write to MMF; schreibe mmf_file in den Arbeitsspeicher
                    accessor.WriteArray<float>(0, mmf_file_work, 0, mmf_file_work.Length); <<<<<Hier tritt der Fehler auf
                }

                mutex.ReleaseMutex();  //mmf_file für andere Programme zur Benutzung freigeben


                //solange mmf_file[0]>0 mmf verfügbar. wird ca alle 500 ms aktialisiert
                while (mmf_file_work[0] != 0)
                {

                    using (var mmflesen = MemoryMappedFile.OpenExisting("mmf_file_work"))
                    {

                        using (var accessor = mmflesen.CreateViewAccessor(0, mmf_file_work.Length))
                        {
                            Mutex mutexlesen = Mutex.OpenExisting("MMF_IPC_work");
                            mutex.WaitOne();

                            // Read from MMF
                            accessor.ReadArray<float>(0, mmf_file_work, 0, mmf_file_work.Length);
                            mutexlesen.ReleaseMutex();
                        }

                    }

                    Thread.Sleep(500);  //warte 500 ms
                }
            }

Kann mir da jemand helfen?

17.12.2013 - 15:13 Uhr

Hi
Also ich versuch mich gerade an der Erstellung vom MemoryMappesFiles

Erstellen und reinschreiben tu ich die mit :

 using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("memfile", 10000))
            {          
       using (MemoryMappedViewStream stream = mmf.CreateViewStream())

                {
                    BinaryWriter writer = new BinaryWriter(stream);
                    writer.Write(arr);
                }
}

arr ist ein Byte [] arr

Lesen tu ich in einer anderen Anwendung so:


 using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("memfile"))
            {
       using (MemoryMappedViewStream stream = mmf.CreateViewStream())
                {

Das Problem ist, dass der Client das "memfile" nicht findet...
Was muss ich beim erstellen beachten, damit der Client das mmf finden kann?

14.12.2013 - 10:02 Uhr

Hi
Danke für die tipps. Ich werd mich auf jeden fall mal schlau machen.
Warum die alle als eigenes programm vorliegen hat einen einfachen grund. Die Simulation soll beliebig erweitert werden können ohne immer alles neu kompailieren zu müssen. Außerdem kann die zusammenstellung der clients unterschiedlich sein. Zur Info es handelt sich um eine Verbindnetzsimulation, wobei der server das Netz und die Clients verschiedenste Energieanlagen darstellen. Im Endausbau soll das ne "echtzeit" simulation werden, die dann als Laborversuch läuft. Als Rechner steht ein 8-Kern Prozi zur Verfügung.
Das Kommunikationsschema ist ein Stern. Alle Clients sind mit dem Server verbunden aber nicht Untereinander. Die meisten bekommen dann noch ne gui, wobei ich die noch nicht gemacht habe, weil meine ersten versionen immer eingefrohren sind...

13.12.2013 - 23:02 Uhr

Hallo. Ich hoffe ich bin hier richtig. Und zwar schreibe ich für meine studienarbeit eine kleine Simmulationssoftware. Die Herrausforderung darin besteht, dass ich mir c# selber beigebracht habe und die Simulation auf ipc (inter Prozess Kommunikation) aufbaut.
Ich muss Daten von mehreren Clients zu einem Server schicken, welcher diese verarbeitet und den Clients wieder zur verfügung stellt, um ihre simulation erneut durchzuführen. Server und jeder Client liegen als eigenstendiges Programm auf dem Rechner vor. Aber alle auf dem SELBEN Rechner.
Übertragen werden 1D Arrays, wobei der Server aus allen empfangenen 1D Arrays ein 2D Array macht um die Daten zu verarbeiten und daraus ein neues 1D Array zu bilden. Das soll auch gespeichert werden zur späteren Datenanalyse. An und für sich funktioniert das momentan schon soweit, dass die Daten mittels FileStream an eine Datei gesendet werden und von da auch wieder gelesen werden. Da das über die Festplatte läuft ist das mit mehreren clients (momentan 5, später noch mehr) nicht die eleganteste und schnellste lösung.
Gibt es eine möglichkeit das evt über den Arbeitsspeicher laufen zu lassen und den Speicherort dieser "Datei" herauszufinden und an die Clients zu übergeben?

Ich habe auch schon Pipestream probiert um die Daten direckt ohne den Umweg über eine Datei zu übergeben aber da bin ich leider jämmerlich dran gescheitert...

Wenn mir da vieleicht nochmal jemand einen Tipp geben kann wäre ich echt dankbar.

Entwicklungssoftware: Visual Studio 2012