Laden...

Forenbeiträge von Shakal Ingesamt 15 Beiträge

14.11.2009 - 18:54 Uhr

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!!

12.11.2009 - 23:26 Uhr

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 😄

08.11.2009 - 23:16 Uhr

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.

08.11.2009 - 23:04 Uhr

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.

05.11.2009 - 21:58 Uhr

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:

  1. Projektmappe erstellen
  2. Programm in ein Projekt schreiben
  3. Dienst in ein Projekt schreiben (selbe Projektmappe)
  4. Datei - Neue - Neues Projekt - Andere Projekttypen - Setup-Projekt (standart Setup1) - OK
  5. rechte Maustatste auf Setup1 - Hinzufügen - Projektausgabe - oben könnt Ihr das Projekt wählen - Primäre Ausgabe wählen - OK
  6. Schritt 5 nochmal mit dem Dienst oder anderen Projektmappen die mitinstalliert werden sollen
  7. Rechte Maustaste auf Setup1 - Ansicht - Benutzerdefinierte Aktion
  8. In die Ordner Installieren/Deinstalieren - rechte Maustaste - Hinzufügen - Anwendungsordner doppelklick und den Dienst doppelkclicken/Hinzufügen
    Dieser erscheint dann automatisch in den Diensten von Windows nach der Installation.

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??

04.11.2009 - 16:28 Uhr

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();
        }
.
.
.


  • t1_Elapsed Temperaturen über COM-Port abgefragt und in AccessDB gespeichert.
  • tÜberTemp_Elapsed Temp. abfragen, vergleichen und wenn zu hoch Emails verschicken
    Was passier:
    wenn ich den Dienst starte läuft die Progressbar von der Dienststeuerung, die versucht den Dienst zu starten bis zur hälfte zügig durch. Dann kommt 5-6sec. nichts und plötzlich versucht der Dienst schon Daten von der Platiene abzurufen (dauert etwas da es mehrere Temperatursensoren sind) und dann kommt die Meldung "Fehler 1053: Antwortet nicht rechtzeitig auf Start- Steuerungsanforderung". Kann es sein das der den Thread garnicht startet??
    Das abfragen der temperaturen soll erst erfolgen wenn t1 oder tÜberTemp auslösen/ablaufen.

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!!

04.11.2009 - 15:06 Uhr

Ups mein Fehler der Dienst wird Installiert aber nicht gestartet!
Also der Link ist gut MrSparkle DANKE!!!

03.11.2009 - 05:28 Uhr

[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 🤔

31.10.2009 - 02:39 Uhr

Hey,
ich galub ich mach da irgend etwas falsch.

  1. Element "App1.config" Hinzugefügt
  2. Die sieht fertig so aus
<?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>
  1. Aufruf mit
label1.Text=  ConfigurationManager.AppSettings.Get("formname");

das lbel1 bleibt leer!?

  1. Aufruf mit
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??

30.10.2009 - 14:55 Uhr

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

  • konfigdatei öffnen
  • konfigdatei string(Pfad) einlesen/in Variable speichern
  • konfig datei schliessen
  • datei (gespeicherte Variable) öffnen
    ...
    Oder is das so nicht möglich?
    Weiß der Dienst überhaupt welche Konfigurationsdatei der öffnen soll?? 🤔
    Etwas mehr Fragen geworden vieleicht gibt es da ja n Tutorial was alle Fragen gleichzeitig beantwortet?!?!
28.10.2009 - 15:03 Uhr

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)

28.10.2009 - 00:01 Uhr

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

02.10.2009 - 20:50 Uhr

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

28.09.2009 - 16:55 Uhr

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 😁

28.09.2009 - 16:16 Uhr

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!! 😃