Ri oder DCD pin bei rs232 in C# erkennen

OP #4373998
Lesenswert?
• ▲
▼
Hallo aller seits.
Wie kann ich es bewerkstelligen das ich 9-11 volt über ein 1 kohm 
widerstand in ein Programm anzeigen lassen kann ?
(es ist nur wichtig AN = 9 Volt da hinweis zb AN und AUS 0 Volt kein 
hinweis.)

die 9 Volt werden mit mosfet und nicht mit schalter geschalten also 
entfällt das entprellen.

Aber das auslesen macht mir sorgen.
Ich habe es mit

private void serialPort1_PinChanged(object sender, 
SerialPinChangedEventArgs e)
        {
          Label1.Text = "An";

und

private void serialPort1_DataReceived(object sender, 
SerialDataReceivedEventArgs e)
        {
            Label1.Text = "An";

versucht Habe die 9 volt schon an allen pins getestet es ändert sich 
nix.
Mein Versuchsaufbau ist nicht der Meinung es habe sich was geändert.
Ich wäre über Hilfe sehr dankbar.
Gast #4374598
Lesenswert?
• ▲
▼
DAVID -. schrieb:
> Und Georg wie könnte ich das in DATEN ändern ?

Du hast anscheinend nicht die geringste Ahnung, was eine serielle 
Schnittstelle überhaupt ist. Einen Eingang RxD kannst du mit der 
COM-Schnittstelle eines PC oder einem Modem oder einem Terminal 
verbinden, und wenn du dort ein "A" tippst, dann liefert die von dir 
verwendete Routine ein "A" als Ergebnis. 9V sind KEIN A. Ist aber 
vermutlich nicht möglich, dir das zu erklären, da du wohl keinerlei 
Unterlagen liest und dir keine Grundlagen erarbeitest. Ohne das kann man 
nicht programmieren, Punkt und aus.

War wohl schon überflüssig überhaupt soviel dazu zu schreiben.

Georg
OP #4374674
Lesenswert?
• ▲
▼
der ri pin ist aber sehr woll dafür gedacht Spannung zuerkennen!

>>versuche die Eigenschaften DtrEnable und/oder RtsEnable auf true zu
>>setzen um zu checken ob dann das PinChanged Ereignis ausgelöst wird

Ok gute Idee habe ich versucht ändert aber nix da muss ich irgendwo 
anders ein Fehler haben.
hmmmm
OP #4375453
Lesenswert?
• ▲
▼
Auf wiki (https://de.wikipedia.org/wiki/RS-232) heist es dazu:
Ri
Ein High-Pegel an diesem Eingang signalisiert dem DTE-Gerät, dass ein 
Anruf ankommt, d.h. dass jemand eine Datenverbindung aufzubauen wünscht, 
(„ring“ ist engl. für „klingeln“; besonders bei Telefonen und im 
übertragenen Sinne auch bei Modems). Siehe auch: Rufspannung.

wenn DU also der Meinung bist das ich es nicht hin bekomme dann könnte 
man mir ja sagen wies geht ?oder zumindest eine Hilfe Stellung geben.

Ich muss nur wissen welcher pin mit welchen Kommando den gewünschten 
erfolg hat oder wie ich es abändern müsste damit es läuft.

Ich würde aber aus folgernder aussage von dir:
<<<Ist einfach hoffnungslos.>>>
eher schlissen das du es selber nicht weist und auch nicht beabsichtigst 
andren zu helfen wass woll auch keine schlechte Idee ist wenn man nicht 
weis um was es geht. da würde ich mich doch aber eher zurück halten als 
preis zugeben das man es nicht weis ODER?
Gast #4375485
Lesenswert?
• ▲
▼
@David:

nicht an RI pin versuchen sondern mit  DTR oder RTS Pins 
experimentieren.
Ich habe damals so was ähnliches gebraucht und hat es auch funktioniert, 
allerdings in C++ entwickelt. Das Prinzip sollte aber dasselbe sein. 
Kann mich leider nicht erinnern welchen Pin von beiden erwähnten ich 
dafür verwendet habe.Aber kann bestätigen dass eine Spannungsänderung am 
Pin ein Ereignis ausgelöst hat.
OP #4376537
Lesenswert?
• ▲
▼
SUPER der tipp mit dem tool das zeigt mir an wo Spannung anliegt TOP.
Mit welchen Kommando fragt man normalerweise die pins ab ?

Bin ich damit

 private void serialPort1_PinChanged(object sender,
SerialPinChangedEventArgs e)
        {

oder

private void serialPort1_DataReceived(object sender,
SerialDataReceivedEventArgs e)

überhaub schon mal richtig ?
DANKE EUCH 2
Gast #4378156
Lesenswert?
• ▲
▼
DataReceived wird aufgerufen, wenn ein oder mehrere Bytes eingetroffen 
sind.
PinChanged wird aufgerufen, wenn ein Break erkannt wurde oder sich der 
Status einer der Pins geändert hat (Überwachte Pins sind dabei: CD, CTS, 
DSR, RING)
...natürlich muss zuvor der Port via .Open() auch geöffnet worden sein.
OP #4379496
Lesenswert?
• ▲
▼
DANKE
Ich habe noch mal neu angefangen mit dem Project und werde alles selber 
bauen und nix mehr aus andren Programmen über nehmen denke ich.

zur zeit wüsste ich gerne wie ich mit PinChanged die Pins abfragen 
beziehungsweise zuordnen kann.
So wie ich das nach dem übersetzten verschiedener Seite verstanden habe 
ist PinChanged zwar auf auslesen gedacht es gibt aber keine Rückmeldung 
WELCHER pin sein Status geändert hat.

wie kann ich das da zuordnen?
DANKE
Gast #4382265
Lesenswert?
• ▲
▼
Würde nicht einfach sowas reichen?
Oder gehts um Pins, auf die man vom SerialPort-Objekt gar nicht 
zugreifen kann?
1
bool lastStateCTS=false; // Variable die letzten CTS-Status merkt
2

3
private void initSerialPort()
4
{
5
  sp.Open(); // Port öffnen
6
  lastStateStatus=sp.CtsHolding; // Initialwert merken
7
}
8

9

10
private void sp_PinChanged(object sender, SerialPinChangedEventArgs e)
11
{
12
   if (lastStateCTS!=sp.CtsHolding)
13
   {
14
       // CTS-Pin hat sich geändert
15

16
       lastStateCTS=sp.CtsHolding;
17
   }
18
}
#4382550
Lesenswert?
• ▲
▼
Liest jemand die Docs?

SerialPinChangedEventArgs
https://msdn.microsoft.com/de-de/library/system.io.ports.serialpinchangedeventargs(v=vs.110).aspx

SerialPinChange-Enum
https://msdn.microsoft.com/de-de/library/system.io.ports.serialpinchange%28v=vs.110%29.aspx

Gibt man in VS jetzt bspw. in dem PinChanged-Handler
1
if ((e.
ein schlägt das u.a. EventType vor
1
if ((e.EventType &
dann wird sogar SerialPinChange vorgeschlagen.
Noch ein . hinter SerialPinChange und es wird u.a. CDChanged und Ring 
vorgeschlagen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren