Hi,
nehme an das Ding ist nicht so richtig günstig, oder ?
ca. 300€
In der Firma machen wir prinzipiell etwas ähnliches. Dazu verwenden wir ActiveServer der Firma MOXA:
http://www.sphinxcomputer.de/moxa/industrial-remote-i-o-servers-active/m49-g338.html
Da noch einen Lichtschrankensensor angklemmt und schon hast du das was Du willst.
Das Signal schickt er dann ins Netzwerk (IP:Port).
Ich hab mir das hier angepasst:
http://www.aejw.com/default.aspx?page=dev/code/cnetworkdrive
Eclipse mit einem C#-Plugin dürfte noch gehen.
Ja, normaler Windows Druck, nix spezielles.
Schau Dir mal die Klasse **PrintDocument **an.
Verlink doch mal genau auf den Drucker den du meinst.
Ein über einen Umweg würde es gehen.
Anstatt Dein XMLDoc gleich als File zuspeichern, konvertierst Du es erst zu einem String, hängst ein "Environment.NewLine" dran & speicherst den String in einem File.
Fertig.
Und hier noch was um die Kommunikation mit der seriellen Schnittstelle zu verbessern:
Template SerialPort
danke
Hallo,
ich such mir grad ein Wolf, weiss jemand wo ich im DGV einstellen kann, daß die Daten wie im Bild angezeigt werden?
Gib Dir Mühe dann schaffst Du es, ich verwende das Teil in unzähligen Projekten und passe es mir immer so an wie ich es brauche.
Probiers mal hiermit:
Probiers mal hiermit:
Is alles da, muß wohl bei dir liegen.
Dein Problem ist wohl das häufigste welches es im Zusammenhang mit der seriellen Schnittstelle gibt.
Das Thread.Sleep(x) tuts zwar erstmal, ist aber unsauber da u.a. ungenau.
Besser ist es auf eine Dir bekannte Abbruchbedinung zu prüfen.
Z.B. ein Zeilen-Ende oder ein Dir bekanntes Byte.
Ein Beispiel und vielleicht weitere Inspiration findest Du hier:
Guten Morgen allerseits,
Ihr hattet natürlich Recht. Ich hatte von gestern auf heute meine letzte Version laufen lassen, und hatte wieder 1000 Threads.
Jetzt habe ich die Version vom kleines_eichhoernchen implementiert.
Das scheint mir das Richtige zu sein, obwohl es ein Lock wahrscheinlich auch getan hätte.
Ich beobachte das jetzt mal und meld mich nochmal bei Bedarf.
Hab mal den Topic-Title angepasst, zum Rest äußere ich mich morgen.
Hab jetzt Feierabend, vielen Dank!
Spitzen-Tip, das hatte ich ja völlig übersehen. Hilfe...
Was genau implementierst du da denn?
Ich sende im Abstand von 100ms beliebige Daten (XML) aus einer Queue über
das Netztwerk.
Btw. der Code ist nicht threadsicher.
Wieso? Der inAction-Bool sperrt mir doch alles bestens!
Habs gelöst, ich beschreibs Euch mal:
Ich hab einen Timer, der alle 100ms ein Object aus einer Queue holt (Peek())
und via Socket versendet. Diese Methode gibt ein Bool zurück. Kommt ein True zurück wird das Object aus der Queue entfernt (Dequeue()).
Dieser Vorgang dauerte manchmal aber länger als 100ms und in der Zeit hat der Timer schon wieder das selbe Object raus geholt.
An der Stelle hat sich mein Algorithmus verhaspelt und die Threads haben sich hochgeschaukelt.
Ich sags Euch: Unsaubere Programmierung rächt sich!
Hier mein neuer Code, der alte war ohne das "InAction-Zeug":
public void Timer_elapsedTime(object sender, ElapsedEventArgs e)
{
if (this.inAction)
return;
this.inAction = true;
try
{
if (this.eventMessageQueue.Count > 0)
{
SocketSender ss = new SocketSender(this.hostData.Ip, this.hostData.Port, this.source, this.eventMessageQueue.Peek());
if (ss.Send())
this.eventMessageQueue.Dequeue();
}
}
finally
{
this.inAction = false;
}
}
Ja, so siehts aus. Genau das ist ja mein Problem.
Bin grad schon mit meinen Kollegen bei einem Code-Review...
Vielen Dank für Eure Antworten.
Es sind leider tatsächlich über 1000 Threads, ich hab mal ein Bild vom Taskmanager angehangen. Ja und sporadische heißt nicht reproduzierbar und natürlich läuft das Programm nur in einer Produktivumgebung.
Ok, wird mir wo nichts anderes übrig bleiben als gründlich zu suchen....
Hallo,
ich habe eine Anwendung wo sporadisch ein Speicherleck auftritt.
Das heißt, der zugesicherte Arbeitsspeicher steigt um 1 GIG und die Anwendung
hat 1000 Threads.
Wie geht Ihr mit sowas um, wie lokalisiert man so ein Problem?
Im LogFile steht leider nichts.
Grüße
Das hier ist glaub ich was Du suchst:
Concate byte[]
Das was Jack gepostet hat "neodynamic" ist richtig Klasse!
Der Dienst soll dann die Daten selbst an der PCI-Schnittstelle abholen.
...das glaub ich weniger, wahrscheinlich verfügt die Messkarte eher noch über eine weitere Schnittstelle, wie z.b. seriell (RS232).
Also ich würde Dir ganz klar zu log4Net raten.
Besser gehts einfach nicht, das kann alles was du beschreibst, und umbiegen musst Du da nix.
Version 2.0.6 wurde released.
Und dann würde ich statt Array ein List<T> verwenden...
Und hier gibts auch noch ein Super Beispiel:
http://code-inside.de/blog/2008/07/12/howto-eigene-net-events-definieren-und-mit-unit-tests-testen/
**
Zwei Methoden um log4Net-Appender zur Laufzeit hinzuzufügen und zu entfernen.**
/// <summary>
/// Add an appender to the given Root-Logger
/// <param name="i_loggerName">name of logger</param>
/// <param name="i_appender">Appender to add</param>
private void addAppender(string i_loggerName, IAppender i_appender)
{
ILog log = LogManager.GetLogger(i_loggerName);
Logger l = (Logger)log.Logger;
l.AddAppender(i_appender);
}
/// <summary>
/// Remove an appender from the given Root-Logger
/// </summary>
/// <param name="i_loggerName">name of logger</param>
/// <param name="i_appenderName">name of Appender/param>
private void removeAppender(string i_loggerName, string i_appenderName)
{
ILog log = LogManager.GetLogger(i_loggerName);
Logger l = (Logger)log.Logger;
l.RemoveAppender(i_appenderName);
}
Schlagwörter: log4net, Appender
Also ich kann Dir bei Thema "Konfiguration aus Files Laden und Speichern" nur
XML Serialisierung empfehlen. Besser geht es einfach nicht.
Hier hast Du ein Projekt von mir mit einem Beispiel:
FormMover
Schau mal hier, das gibt's schon:
Hier auch noch ein gutes Beispiel:
PS: Hab im BlogBook nichts gefunden dass es nicht weiterverbreitet werden darf. Somit dürfte ich gegen keine Rechte verstoßen haben.
1.5.Rechtlicher Hinweis (Seite 12)
Sämtliche Inhalte des .NET BlogBooks entstammen den Federn von Kai Gloth und Norbert Eder. Dementsprechend dürfen die Inhalte nicht ohne Zustimmung kopiert, vervielfältigt oder anderweitig verwendet werden. Eine Nichteinhaltung zieht rechtliche Konsequenzen nach sich.
Aber trotzdem Danke!
Hier noch ein guter Link:
HowTo: Einfache Tests – UnitTests (oder keine Angst vor UnitTests…)
Alles klar, danke!
Hallo,
ich hab da ein Problem mit DLLs generell.
Bisher ist mir das nie aufgefallen, weil ich selten meine verwendeten DLLs
geupdatet habe oder nur meine eigenen verwendet habe.
Mein Problem ist, ich verwende DLL XY Version 1.0.0.1 in meiner Anwendung,
wenn es jetzt eine neue Version davon gibt, zb. 1.0.0.2, so kann ich die Alte nicht einfach überschreiben sondern ich muss das Projekt neu kompilieren.
Würde ich das nicht machen kommt so ein Fehler:
Die Datei oder Assembly "Npgsql, Version=2.0.4.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)
Also wenn man das weiss ist das ja kein Problem, aber irgendwie nervt das.
Mach ich das was falsch?
Bis auf "STRG - SHIFT - +" geht alles.
Wo stell ich das ein, ich finds einfach nicht?
Hab deutsches VS.
Funktionierts im Windows Hyper-Terminal?
Zu a.
Der Caller könnte seine eigene ID dem Programm in den Start-Argumenten mitgeben.
Du müsstest Dein Programm nur darauf anpassen.
@xxxprod
Bist Du Dir da sicher?
Ich hab das grad verwundert probiert, das funktioniert so nicht!
Als IDE verwende ich VS2008 Pro.
Grüße
Mit VS geht das nicht, Resharper dürfte das bestimmt können.
Hallo,
1.
Es ist normal, dass man nie weiss was, wann von der Schnittstelle kommt.
2.
Du wirst sehen, dass wenn Du den Sleep-Wert erhöhst auch gute Ergebnisse
erzeilen wirst. Das ist aber sehr unsauber, da nicht logisch gelöst.
Es ist besser auf eine Abbruchbedingung zu prüfen, wie das geht kannst du Dir z.B.
hier angucken:
Aber es gibt auch andere Meinungen, ich benutze grundsätzlich die "else If - Variante".
Die Console kannst Du verbergen indem Du die Anwendung als Applikation compilierst.
Hier findest Du brauchbares:
Also wir machen bei uns alles mit C# über Sockets. Die Anwendungen laufen rund um die Uhr und Probleme gibts nicht.
So ohne weiteres wird das nicht funktionieren.
Du könntest vielleicht nacheinander alle verfügbaren Ports öffnen und etwas hin senden, und dann die Antwort auswerten, ist die Antwort so wie Du Sie erwartest dann war es wohl Dein Gerät.