Forum: PC-Programmierung Ri oder DCD pin bei rs232 in C# erkennen


von DAVID B. (bastler-david)


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.

: Verschoben durch User
von Karoly (Gast)


Lesenswert?

Hallo David,

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

von Georg (Gast)


Lesenswert?

DAVID -. schrieb:
> private void serialPort1_DataReceived(object sender,

9V an einem RxD Pin sind keine seriellen Daten, das ist also barer 
Unsinn.

Georg

von DAVID B. (bastler-david)


Lesenswert?

ok danke euch.
Karoly das werde ich gleich mal versuchen.
Und Georg wie könnte ich das in DATEN ändern ?
Gibt es ein IC dafür ?

von Georg (Gast)


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

von DAVID B. (bastler-david)


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

von Georg (Gast)


Lesenswert?

DAVID -. schrieb:
> der ri pin ist aber sehr woll dafür gedacht Spannung zuerkennen!

Wie kommst du darauf, dass man am RI Pin Daten empfangen kann? 
Schliesslich rufst du ja serialPort1_DataReceived auf. Das hat mit RI 
nicht das geringste zu tun.

Ist einfach hoffnungslos.

Georg

von DAVID B. (bastler-david)


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?

von Karoly (Gast)


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.

von Tek (Gast)


Lesenswert?

Du solltest da etwas strukturierter vorgehen.
Als erstes würde ich mal mit einem funktionierenden Tool deine 
Beschaltung testen.

Ich nutze für die serielle Schnittstelle gerne das hier:
https://sites.google.com/site/terminalbpp/

Das zeigt dir auch die digitalen Signale auf dem Comport an, wenn du da 
eine Reaktion bekommst, kannst Du an dein C# Programm gehen.

von DAVID B. (bastler-david)


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

von bluppdidupp (Gast)


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.

von DAVID B. (bastler-david)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?


: Bearbeitet durch User
von DAVID B. (bastler-david)


Lesenswert?

Hilft mir leider gar nicht weiter.

den mit BOOL WINAPI GetCommModemStatus(
  In  HANDLE  hFile,
  Out LPDWORD lpModemStat
);

bekomme ich nur rote Striche und zulesen es sei kein verweis (glaube) 
vorhanden.

Hast du noch andere Hilfe zur aus wahl?
Danke dir für deine mühe

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du solltest lernen, wie man mit Deinem Werkzeug umgeht. Dazu gehört 
u.a., wie man Win32-API-Funktionen aufruft.

O.g. zweiter Link zeigt das anhand der Funktionen GetCommMask und 
WaitCommEvent.

von bluppdidupp (Gast)


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
}

von Arc N. (arc)


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.

: Bearbeitet durch User
von DAVID B. (bastler-david)


Angehängte Dateien:

Lesenswert?

Hallo
Danke dir aber bei nur ((e erkennt es weder EventType noch 
SerialPinChange nur mit if ((else.EventType & SerialPinChange.Ring 
bekomme ichs hin Ring und CDChanged nimmt er aber auch so noch.

Wo mache ich den Fehler ?
DANKE DIR SEHR

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

DAVID -. schrieb:
> Wo mache ich den Fehler ?

Lies Dir doch bitte Deinen "Text" nochmal durch.

Quelltext übrigens nicht als Bild posten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.