Com1-Port steuern mit C#

Dshing

Lt. Commander
Registriert
Nov. 2007
Beiträge
1.436
Hi,
kann mir jemand erklären, welche Befehle ich brauche, um die einzelnen Leitungen des RS-232 Ports unter Windows anzusteuern?

Ich weiß nicht ob ihr versteht was ich meine, aber ich hab mit das so vorgestellt, das man die Spannungen der Ausgabe Leitungen ändert um z.B ein Relais oder Transistor ect. ansteuern kann.
 
Es gibt eine Komponente für den Com-Port in der Toolbox. Such sie dir heraus und schau dir den MSDN Artikel an.
 
Dshing schrieb:
Ich weiß nicht ob ihr versteht was ich meine, aber ich hab mit das so vorgestellt, das man die Spannungen der Ausgabe Leitungen ändert um z.B ein Relais oder Transistor ect. ansteuern kann.

geht so nicht. das andere gerät muss schon den seriellen standard verstehen. du kannst da nicht einfach irgendwelche spannungen ein- und ausschalten.
 
wenn du keinen Controller benutzen möchtest, dann müsstest du auf LPT bzw. den Druckerport ausweichen. Früher - bis Win95 - konnte man mit C, Pascal und Co noch direkt auf die Ports zugreifen. Seit win2k nicht mehr versucht.
 
Danke schon mal. Ein LPT hab ich leider nicht :( werde ich aber bei meinem nächsten MB drauf achten.
Hat halbwegs geklappt, damit kann ich jetzt erst mal auf der DTR und RTS Leitung bzgl. der Masse zwischen -12V und +12V hin und her switchen.
Mit einen paar Dioden, Kondensatoren, Transistoren und ein bisschen Geschick beim programmieren, kann ich mir so bestimmt was hübsches bauen :evillol:

Interessant wäre jetzt aber noch zu wissen wie stark ich das belasten kann. Kann mir das auch jemand sagen? Hab nur die Angabe "ein paar mA" gefunden, aber was sind ein paar?

Auch interessant wäre noch wie ich an die TX Leitung komme, eigentlich müsste das ja gehen, in dem ich permanent irgendwas sende, aber wie mache ich das?
Hab heute leider erst angefangen mich mit C und Konsorten zu beschäftigen, daher hab ich noch nicht den vollen Überblick.
Für Vorschläge, Hinweise und Ratschläge bin ich daher sehr offen.

hier mal das was ich bis her habe
Code:
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 System.IO.Ports;
using System.Threading;


namespace WindowsFormsApplication1
{
    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            if (serialPort1.IsOpen == false)
            {
                serialPort1.Open();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "ON";
            serialPort1.DtrEnable = true;
            serialPort1.RtsEnable = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = "OFF";
            serialPort1.DtrEnable = false;
            serialPort1.RtsEnable = false;
        }
    }
}
 
Der serielle Port stellt nur eine Stromstärke zwischen 10 und 20 mA zur Verfügung. Das ist nicht viel.
Du müsstest mit dem seriellen Port schon Transistoren ansprechen, damit du über die Transistoren mehr Strom zur Verfügung hast. Der serielle Port ist nicht dazu gedacht, Geräte mit Strom zu versorgen, wie USB, sondern dient rein zur Kommnunikation. Optimal wäre natürlich, wenn du einen µController an den seriellen Port anschliesst, der das serielle Signal interpretieren kann und dieser dann mehrere Ausgänge zur Verfügung stellt.

Man könnte auch den Parallelport missbrauchen, da dieser schon 8 Ausgänge bereitstellt, mit denen man dann Transistoren schalten könnte. Somit hätte man schon ohne µController 8 schaltbare Ausgänge.
 
Ja so hab ich mir das gedacht mit den Transistoren als Vorverstärker und dann kann man sich aus toben.

Aber das mit dem Mikrocontroller wäre natürlich auch ne feine Sache, nur hab ich davon auch 0-Ahnung. Ich wüsste noch nicht mal wo ich da was anschließen sollte.

Parallelports hab ich meines Wissens nach nicht.
 
nee gibt es leider nicht, der RS 232 ist auch schon nur noch so vorhanden.
Aber ich bin jetzt so weit, das ich auf dem TX Kanal eine belibige Spannung zw. 0 und 7,7V einstellen kann.
 
Könntest du vielleicht immer mal wieder keine Teilerfolge, wie das Spannungwechseln, mal hier posten?
Am besten in Form eines Quellcode-Ausschnittest, würde mich echt intressieren.
 
Hehe willst du es dann nach bauen?

Ich muss mir erst mal überlegen, was ich damit jetzt anfange, bevor ich weiter mache. Vielleicht lasse ich meine zweite Pumpe ab einer gewissen Temperatur anlaufen...oder vielleicht so gar schon die erste und die zweite schaltet sich dann langsam dazu...Mal sehen ich überlege noch.

hier der stand der Dinge:
Code:
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 System.IO.Ports;
using System.Threading;
using System.Timers;


namespace WindowsFormsApplication1
{

    public partial class Form1 : Form
    {
        int x;
        int y;

        public Form1()
        {
            
            InitializeComponent();
            
            if (serialPort1.IsOpen == false)
            {
                serialPort1.Open();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "ON";
            serialPort1.DtrEnable = true;
            button1.Enabled = false;
            button2.Enabled = true;
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = "OFF";
            serialPort1.DtrEnable = false;
            button1.Enabled = true;
            button2.Enabled = false;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            label4.Text = "ON";
            serialPort1.RtsEnable = true;
            button4.Enabled = true;
            button3.Enabled = false;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            label4.Text = "OFF";
            serialPort1.RtsEnable = false;
            button4.Enabled = false;
            button3.Enabled = true;
        }


        private void button5_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 1;
            backgroundWorker1.RunWorkerAsync();
            button5.Enabled = false;
        }
       
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            x = 0;
            y = 200;
            while (x < 1)
            {
                System.Threading.Thread.Sleep(y);
                serialPort1.Write(new byte[] { 70,1,1,1,1,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,1,0 }, 0, 26);
            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 0;
            x = 1;
            button5.Enabled = true;
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            y = 30 - (trackBar1.Value);
            int s;
            s = Convert.ToInt16(30-(trackBar1.Value));
            label5.Text = s.ToString();
            progressBar1.Value = (5+5*trackBar1.Value);
        }

 
              
    }
}
 
Mir gehts mehr darum nachher LED´s über Software zu steuern ;)

Aber vielen Dank ^^
 
Für eine LED sollte das schon reichen, wenn es mehr sein sollen (parallel), dann halt so. Je nach dem wie die Kennlinie des Transistor ist, bekommt man da auch noch mehr als 7V raus, aber ich hab keinen besseren gefunden auf die schnelle.
 

Anhänge

  • P3071884.JPG
    P3071884.JPG
    158,2 KB · Aufrufe: 389
Gibt doch mal einen aktuellen Stand, wie weit du grade bist. Gehts voran? Was bauste da eigentlich? *neugierig bin* xD
 
Ich würde mir an deiner Stelle mal Arduino angucken... Das kann man auch per SerialPort über C# steuern...
 
Ja also momentan hakt es bei mir an zwei Sachen, erstens weiß ich nicht wie ich die Temperaturen von meiner Hardware ausgelesen bekomme ich versuche gerade die dll's vom "Open Hardware Monitor" einzubinden, aber dazu bin ich irgendwie zu blöde und wie das über WMI funktioniert hab ich auch nicht so richtig durch schaut.
Und das zweite Problem ist das ich ein Optokoppler brauche, da meine zweite Pumpe an einem separaten Netzteil hängt, das ich von meinem PC-NT galvanisch trennen sein muss, den muss ich also erst mal kaufen.

Also das mit dem Optokoppler funktioniert jetzt.
Nächster Schritt ist jetzt doch ein µC. Ich bin jetzt so weit das ich sie Flashen kann, und will jetzt das sie auf eingaben reagieren. Suche noch ein gutes Tutorial, wer also Links hat, immer her damit :)
 
Zuletzt bearbeitet:
Zurück
Oben