Hi MarsStein
Die Kommunikation klappt.
Ich muss nur beim Hochfahren des W-S'03 den USB-Seriell Adapter abziehen und dann schnell wieder reinstecken.
Wieso das so ist weiß ich nicht, da ich W-S auf der VirtualBox nicht starten kann, wenn der Adapter nicht eingesteckt ist?!?
Ich danke dir trotzdem für die schnelle Antwort!!
Hi Leute,
hab da ein Programm das auf den COM-Port zugreift. Dieses soll unter Windows-Server2003 installiert werden, ich hab es auf XP programmiert und da klappt der Testlauf seit 3 Tagen einwandfrei.
Hab mir jetzt WinServer'03 auf Virtual-Box besorgt und da kann er nicht auf den COM-Port zugreifen (TimeOut-Fehlermeldung).
Der Seriel-USB-Adapter wird erkannt und unter COM7 angezeigt aber die Kommunikation kommt nicht zustande.
Ist es möglich, das wenn ich es auf dem Server installiere, ich den selben Fehler bekomme oder hängt das an der Virtual-Box???
Hat da jemand Erfahrung mit? Ist euch das auch schon passiert??
Hab etwas geforscht und ...... kommt wohl öfter vor das Progs auf dem eigenen Rechner laufen und auf anderen Betriebssystemen nicht.
Wäre nämlich echt mies wenn ich das installiere und es nicht klappt...... - Projektarbeit -
Danke für Hilfe und Tipps 😄
Hi herbivore,
danke für den Hinweis 😁
Baue noch n paar Fehlerbehandlungen in das Projekt ein und versuche das Prog. etwas Absturzsicherer zu machen 🙂
Dann werde ich das ganze, so wie ich es gelöst habe, hier Posten. Aber erstmal muss ich wieder etwas forschen..... 🙁
Wenn einer doch schon Fragen hat, ich schau öffters mal hier rein dann kann ich schonaml was dazu schrieben.
Hi,
ist zwar ein alter Beitrag aber wollte erstmal keinen neuen aufmachen, weil das hier auch mein Problem ist/werden kann.
Hoffe einer Liest sich den noch durch 🤔
Also ich wollte eine Abfrage in mein Programm übernehmen, inder geprüft wird, ob der COM-Port schon von einem anderen Prog belegt ist/benutzt wird.
if (serilaPort.Name ..?gerade benutzt?..) //Prüfen ob z.B. COM1 schon benutzt wird
{
for(int i=0; i<30000;i++) //30sec. mit Zählen beschäftigen
{}
}
serialPort.Open();
.
..
...
Wollte ich einfügen, weil mein Dienst ebenfalls auf den COM-Port zugreift.
Die sollen sich somit nicht gegenseitig stören, sodern kurz warten (geht das überhaupt mit der for-Schleife?) und dann die Verbindung aufbauen.
Hoffe man kann mir n Tipp geben, wie ich das ganze prüfen kann. Oder wo ich was zu dem Thema finden kann.
Danke Leute
aber hab immer das Prog als Dienst Installiert und das spricht nunmal direkt den COM-Port an um Temps abzurufen. Hinterher weiß man immer mehr! 😁
Für die, die noch danach suchen wie man einen Dienst mit einem Setup-Projekt Installiert:
Das ist nur eine schnell- Anleitung und wenn ich Zeit habe (Doku muss noch fertig werden) würd ich das auch gerne mal hier ausführlich posten. Oder ist das hier nicht so gerne gesehen??
Hey
Hab das alles soweit fertig geschrieben und wenn ich das in einer extra Form mit 2Buttons Start Stop teste, funktioniert es! Daten werden aus app.config geholt und Teperaturen abgefragt und in DB gespeichert. Das will ich jetzt mit einem Timer im Dienst automatisieren!..... Geht nicht
Also ich rufe in der OnStart den Thread auf indem 2Timer laufen
private Thread _thread;
protected override void OnStart(string[] args)
{
Hiflsservice hservice = new Hiflsservice();
_thread = new Thread(new ThreadStart(hservice.laufe)); //Methode startet nur Timer
_thread.Start();
this.EventLog.WriteEntry("Dienst für Servertemperatur Aufzeichnung wurde erfolgreich gestartet");
}
Ind der Klasse Hiflsservice.laufe -solte Hilfsservice werde🙂- sollen nur die Timer gestartet werden. Wenn diese auslösen (t1_Elapsed) sollen die daten dan abgerufen und gespeichert werden
Timer t1; //Timer zum Speichern der Werte
Timer tÜberTemp; //Timer zum kontrollieren, auf Übertemperatur
public void laufe()
{
//Timer für Temp. speicherung
t1 = new Timer();
t1.Elapsed += new ElapsedEventHandler(t1_Elapsed);
t1.Interval = 60000; //Zeiten werden noch Hochgestellt
t1.Enabled = false;
t1.Start();
//Timer für Temp überwachung
tÜberTemp = new Timer();
tÜberTemp.Elapsed += new ElapsedEventHandler(tÜberTemp_Elapsed);
tÜberTemp.Interval = 32000;
tÜberTemp.Enabled = false;
tÜberTemp.Start();
}
.
.
.
Kann es sein das der Hier schon "Hiflsservice hservice = new Hiflsservice();" die gesamte klasse durchläuft? Die Methofden zum abfragen und speichern...?
Oder starte ich die Timer falsch??
Oder rufe ich den Thread schon falsch auf??
Vielleicht hat einer von euch schon n Fehler entdeckt oder kann mir sagen, was ich falsch mache 🤔
Hoffe ihr könnt mir n paar Tipps geben!!
Ups mein Fehler der Dienst wird Installiert aber nicht gestartet!
Also der Link ist gut MrSparkle DANKE!!!
[EDIT=herbivore]Abgeteilt von Dienst zum Abrufen von Temperaturen schreiben[EDIT]
Hey schon wieder ne Nacht vorbei 😭
Ich habe meinen Dienst jetzt in das Programm geschrieben und wenn ich das ganze Veröffentliche und Installiere, wird der Dienst einfach nicht mitinstalliert.
Unter Projekteigenschaften - Veröffentlichen - Anwendungsdateien ist der Dienst und der Projektinstaller auch nicht mit aufgeführt.
Versuch jetzt schon seit Stunden das irgendwie zu lösen aber es will nicht klappen X( X(
Hat einer von euch n Tipp wie ich das Anstelle das der Dienst mitinstalliert wird?
Das is jetzt das letzte Problem und was noch gelöst werden muss und jetzt find ich im WWW auch nichts was mich weiter bringt. mir gehen langsam die Suchbegriffe aus 🤔
Hey,
ich galub ich mach da irgend etwas falsch.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key ="formname" value ="das is der test" />
<add key="textbox" value="das ist die textbox"/>
<add key="butto" value ="appSettings"/>
<add lockAttributes ="1" key ="1" value ="string" />
</appSettings>
</configuration>
label1.Text= ConfigurationManager.AppSettings.Get("formname");
das lbel1 bleibt leer!?
AppSettingsReader sett = new AppSettingsReader();
string wert = (string)sett.GetValue("formname", typeof(string));
label2.Text= wert;
gibt mir die Fehlermeldung
InvalidOperationException wurde nicht behandelt Der Schlüssel formname ist nicht im appSettings-Konfigurationsabschnitt vorhanden.
muss ich App1.config noch irgendwo n verweis einfügen oder using app1.config oder?? ich komm da einfach nicht weiter aber jetzt muss ich leider Pennen gehen %Uhr arbeiten X(
vieleicht is es auch nur die ZEIT (die langsam knapp wird:()
EDIT:
Hey hab das ganze (Code aus schritt2) auch mal in "app.config" von dem Projekt kopiert, also die die vom projekt erzeugt wird, und siehe das es geht mit Code aus schritt3.
Ist das so richtig? kann ich da bedenkenlos reinschreiben? Funktioniert das ganze nicht mit einer zweiten .config-Datei??
Hi MrSparkle,
genau das hab ich eigentlich auch vor!! Ich muss dafür sorgen das der Dienst die Datei findet, in der die E-Mailardessen gespeichert sind(.xml-Datei). Nach der Installation des Programms weiß ich allerdings nicht wo das Programm installiert wurde, kann also nicht einfach im Dienst sagen
StreamReader sr = new StreamReader("E:\Emailadd.xml");
Testprogramm is schon fertig und funktioniert auch aber der PFAD... X(
ich selbst habe das so gelöst, daß ich den Dienst und das Konfig-Programm von einer Setup-Routine in ein Programmverzeichnis schreibe ...
Das muss ich auch noch machen! Ich habe jetzt das Benutzer-Programm in einem Projekt und den Dienst in einem Projekt. Kann ich den Dienst in das Programm-Projekt hinzufügen und eine Installatiostdatei/SetupRoutine erstellen? Speichert der das dann alles in EIN Verzeichnis?
... und den Dienst installieren lasse...
Wie machst du/man das? Ich kann eine Installationsdatei für den Dienst installieren =) aber dann muss ich immer noch mit "installutil" Arbeiten und das den Benutzter erlidigen zu lassen 🤔 find ich nicht so ne gute Idee 😉
Und eine ander Vorgehensweise oder Hilfestellung dazu fin ich im WWW irgendwie nicht?!
Das Konfigprogramm schreibt eine XML-Konfigurationsdatei, auf die der Dienst zugreifen kann...
Kann ich in die Konfigurationsdatei den Pfad der xml-Datei schreiben, wo der alle Adressen findet? Und im Dienst nur noch
Hi herbivore,
das war auch meine erste Idee.
Aber wie bekomme ich dann mit dem Dienst (wenn er Installiert worden ist) raus, wo die XML-Datei gespeichert ist?
Weil das Arbeitsverzeichnis von dem Dienst ist ja das Systemverzeichnis, nicht das, wo die exe-Datei des Programms liegt/Installiert worden ist.
Also kenne ich den Pfad der XML-Datie noch nicht wenn ich den Speicherort/Pfad "Emailliste.xml"(im Programm) verwende,weil ja die Datei dann in dem Arbeitsverzeichnis der exe-Datei gespeichert wird.
Nur wie teile ich dem Dienst mit, wo genau nach der installation die XML-Datie zu finden ist?? (kann ja C:\ , E:\ , F:\ ... sein)
Hey danke an demondriver235 für den Tip!!
Jetzt noch n Problem 😁
Ich soll jetzt noch eine Email-benachrichtigung einbauen, die ab einer bestimmten Temperaturen eine Email verschickt. Keine Sorge das klappt auch alles schon.
Das Problem ist nur ich ahb immer eine Emailadresse per hand eingegeben aber jetzt habe ich ein DataGridView indem 6-10 Emailadressen gespeichert sind/werden. Diese muss ich jetzt dem Dienst mitteilen und die dort irgendwie Speichern, damit der dann selbstständig an alle Emails verschicken kann!
Soweit ich das mit dem ServiceControler verstehe, kann ich damit den Dienst nur Starten,Stoppen oder Pausieren.... oder??? ?(
Wie bekomme ich die Emailadressen und natürlich die max.Temperatur in den Dienst???
Dachte ich füll ein Array mit den Adressen und frag das im Dienst über Eigenschaften/Accessoren ab?! Aber das will irgendwie nicht so einfach klappen 🙁
Kann sein das ich jetzt die ganze Zeit das falsche Suche aber ich find da irgendwie nichts X(
Also nochmals die bitte um Hilfe
Hi Leute
hab da ein Programm geschrieben, das über einen Com-Port von einem PIC-Mikrocontroller mehrere Temperaturen abruft und diese Anzeigt. (sollen später auch alle 30min. gespeichert werden aber da komm ich noch zu 😦)
Mein Problem:
Es hat sich leider rausgestellt das nicht die ganze Zeitüber ein Benutzer
angemeldet ist. Somit kann das abrufen und Speichern der Temperaturen nicht mit
dem Programm bewerkstelligt werden. Also dachte ich mir DIENST
Kann ein Dienst
- auf einen Com-Port (USB-Seriell Adapter) zugreifen
- Werte auf der Festplatte Speichern (höchstwarscheinlich
in einer SQL-Datenban)
wenn KEIN Benutzer angemaldet ist??
Hoffe Ihr könnt mir die Frage beantworten und ein paar Tipps geben WO ich was gutes finde, wie man einen Dienst schreibt. Hab mich schon mit Hilfe von msdn etwas eingelesen und kleine Versuche gestartet, aber dann konnte ich den PC nichtmehr runterfahren weil der meinen Dienst nicht beenden konnte! musste ich manuell (Strg+Alt+Entf - Prozess beenden) beenden dann konnt ich den auch runterfahren! ?(
Schau jetzt erstmal nach dem SPEICHERN der werte weil der Abgabetermin naht 8o 8o
Wenn man den Wald vor lauter Bäumen nichtmehr sieht!!!!! ⚠ ⚠
Hatte für das öffnen des Ports eine eigene Klasse geschrieben und dort das Try/catch/finally vergessen.
Bei dem Aufruf mit - SendePort("...."); natürlich im Try-Block - hat der dann nicht gemeckert und hat sich beim öffnen aufgehangen!
Danke für die schnelle Antwort byte_schubser
wie lange ich dran gesessen habe sage ich jetzt mal lieber nicht 😁
Hallo,
erstmal muss ich sagen das das hier ein super Forum ist!!! Hat mir schon oft weitergeholfen. Jetzt hab ich mich mal Angemeldet, weil ich doch noch n Problem hab was ich nicht lösen kan:-(
Ich muss im Rahmen eines Projekts für die Technikerschule ein PIC über einen COM-Port ansprechen, Daten Auslesen und Schreiben.
Durch das Forum hier und andere Hilfsmittel klappt das auch alles!!!
Beim Öffnen des Programms wird überprüft ob schon ein COM-Port gewählt und gespeichert wurde, um nicht jedes mal den Port neu Wählen zu müssen.
Jetzt hab ich festgestellt, das wenn der Falsche Port gespeichert wurde (PIC-Platiene über einen anderen COM-Port angeschlossen wird) der mir eine IOException rausgibt und das Programm beendet / hängenbleibt.
"System.IO.IOException" wurde aufgefangen.
Message="Der Anschluss COM1 ist nicht vorhanden."
Source="System"
StackTrace:
bei System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
bei System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
bei System.IO.Ports.SerialPort.Open()
bei Servertemperatur.PicDaten.Oeffne_serialPort() in E:\AbschlussProjekt\Servertemperatur\Servertemperatur\PicDaten.cs:Zeile 40.
bei Servertemperatur.PicDaten.Datenabfragen() in E:\AbschlussProjekt\Servertemperatur\Servertemperatur\PicDaten.cs:Zeile 48.
InnerException:
Wie kann ich überprüfen ob der gespeicherte COM-Port belegt ist, oder nicht mehr belegt ist, bevor ich damit den SerialPort öffne?
Oder dann das Fenster zum auswählen des COM-Ports erneut anzeigen lasse, um den Port neu zu wählen/speichern.
Bevor jetzt kommt SuFu nutzen: --> ich habe schon gesucht!!! Aber entweder nach den falschen Begriffen oder halt nichts gefunden.
Hoffe man kann mir hier Helfen!! 😃