Hey Allesamt, ich habe gerade ein kleines Projekt am laufen, welches mehrere einzelne Signale über eine RS232 Schnittstelle auslesen soll. Die RS232 Schnittstelle hat ja wenn ich das richtig verstehe vier Inputleitungen, heißt somit ich könnte vier verschiedene Signale abfragen. Die Signale möchte ich in Visual Studio 2017 auswerten, dabei ist egal wie hoch die anliegende Spannung ist. Die vier Signale sollen nur in vier Variablen abgespeichert werden welche dann den Zustand 0 bzw 1 annehmen sollen. Ich würde das Programm gerne in C schreiben, da ich da die größten Vorkenntnisse mitbringe. Die ultimative Lösung wäre, wenn ich die RS232 Leitung mit einem USB Konverter einlesen könnte. Leider fehlen mir für das einlesen von Schnittstellen völlig die C Kenntnisse. Hoffe mir hätte jemand ein kleines Beispielprogramm oder Ähnliches wie ich das Projekt lösen könnte. Danke schon mal im Voraus.
:
Verschoben durch User
Timm Thaler? Guck mal bei Wiki nach was an der Geschichte überhaupt ist und für was sie gedacht, ist dann formuliere deine Fragen neu.
Ich habe ein ähnliches Projekt bereits vor einem halben Jahr auf einer Messe gesehen. Lösbar ist es auf jeden Fall. Wie gesagt fehlen mir leider die nötigen Kenntnisse dazu die Anbindung Softwaretechnisch durchzuführen. Ich informiere mich schon seit zwei Tagen über das Thema und hab auch einige wirklich gute Ansätze für den Fall gefunden, leider jedoch alle in Visual Basic oder C#. Ich hoffe ich treffe auf Verständnis.
Tim schrieb: > Ich habe ein ähnliches Projekt bereits vor einem halben Jahr auf > einer > Messe gesehen. Lösbar ist es auf jeden Fall Sicher dass hier genau die Serial-Pins so eingelesen wurden? Das ganze geht IIRC nur mit 2 Pins (RX und CTS) und nennt sich "Bit-Banging". Das ist aber eher ein Hack mit begrenzter Flexibilität und Geschwindigkeit. Wenn du sowieso einen USB-Adapter nutzen willst (da keine echte serielle Schnittstelle vorhanden), kannst du direkt einen nehmen, der genau dafür gedacht ist. Da gibt es diverse, wie z.B.: https://www.codemercs.com/de/io https://www.microchip.com/wwwproducts/en/MCP2221A Eigenbau, siehe z.B. mein USB-Tutorial mit STM32 Wie immer wäre es gut zu wissen was du genau vorhast.
Mein Ziel ist es abzufragen, ob ein Signal bzw mehrere Signale anliegen. Dafür trenne ich das eine Ende des RS232 auf, baue einen Spannungsteiler an die aufgeknüpften Enden und gebe eine 24V Spannung aus einem Schaltschrank darauf. Ob ich das Signal mit RS232 abfrage oder mit USB ist mir relativ egal. Bei USB habe ich nur mit den Protokollen etwas bedenken. Visual Studio soll letzten Endes einfach nur erkennen ob das Signal, das aus dem Schaltschrank kommt, 24V oder 0V beträgt. Mein einziges großes Problem ist hierbei nur, dass ich nicht weis wie ich die einzelnen Inputleitungen des RS232 in Visual Studio abfragen kann.
Tim schrieb: > Mein Ziel ist es abzufragen, ob ein Signal bzw mehrere Signale anliegen. Wie schnell ändert sich dieses Signal? Muss das Abfragen in definierten Zeitabständen erfolgen? Wie groß darf die Reaktionszeit sein? Tim schrieb: > Bei USB habe ich nur mit den Protokollen etwas bedenken. Dafür bieten die Hersteller der genannten Adapter entsprechende Bibliotheken. Tim schrieb: > Mein einziges großes Problem ist hierbei nur, dass ich nicht weis wie > ich die einzelnen Inputleitungen des RS232 in Visual Studio abfragen > kann. Weil das eigentlich von RS-232 nicht vorgesehen ist, gibt es auch noch mehr Probleme dazwischen.
Die Handshakeleitungen der seriellen Schnittstelle lassen sich mit der Win32-API-Funktion GetCommModemStatus einlesen. Beispiel:
1 | DWORD dwModemStatus; |
2 | BOOL fCTS, fDSR, fRING, fRLSD; |
3 | |
4 | if (!GetCommModemStatus(hComm, &dwModemStatus)) |
5 | return; // fehlerbehandlung? |
6 | |
7 | fCTS = MS_CTS_ON & dwModemStatus; |
8 | fDSR = MS_DSR_ON & dwModemStatus; |
9 | fRING = MS_RING_ON & dwModemStatus; |
10 | fRLSD = MS_RLSD_ON & dwModemStatus; |
hComm ist hier ein Handle auf eine mit CreateFile korrekt geöffnete Schnittstelle. "RLSD" ist eine alternative Bezeichnung für DCD. https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getcommmodemstatus
Bei der Abfrage reicht eine Tastrate von einer halben Sekunde. Es sollen Zustände abgefragt werden, wie: - Steht ein Not-Halt an oder - Spannungsversorgung an. In Visual Niklas G. schrieb: > Weil das eigentlich von RS-232 nicht vorgesehen ist, gibt es auch noch > mehr Probleme dazwischen. Mit Visual Basic ist das aber glaube ich möglich da habe ich einige Videos zu gefunden (zu RS232 und USB) https://www.youtube.com/watch?annotation_id=annotation_421692&feature=iv&src_vid=_cZ6LYW2jOc&v=w7ChVVBNB10 Wenn ich es mit einer USB Leitung versuchen würde müsste ich auch diese auftrennen was Softwaretechnisch glaube ich dann schwer zu lösen ist.
Tim schrieb: > Bei der Abfrage reicht eine Tastrate von einer halben Sekunde. Ok, das ist nicht sehr kritisch. Tim schrieb: > - Steht ein Not-Halt an oder Hoffentlich wird die Sicherheit nicht beeinträchtigt, wenn diese Bastelei nicht funktioniert :-) Tim schrieb: > Wenn ich es mit einer USB Leitung versuchen würde müsste ich auch diese > auftrennen was Softwaretechnisch glaube ich dann schwer zu lösen ist. Die USB-Leitung musst du nicht auftrennen. An die USB-Leitung schließt du statt des USB-Seriell-Adapters einen USB-GPIO-Adapter an, der Eingänge hat, an welche du deine Signale anschließen kannst. Über die Herstellerbibliothek lässt sich das dann komfortabel abfragen. Tim schrieb: > Mit Visual Basic ist das aber glaube ich möglich Es ist auch in C möglich (rufus hat es gezeigt), aber nicht alles was möglich ist, ist auch eine saubere Lösung... Da sowieso ein Adapter erforderlich ist, kannst du auch direkt einen Adapter nehmen, der genau dafür gemacht ist!
Hey Tim, also wenn du keine "richtige" RS232 hast und auf USB Adapter ausweichen muss, dann müsstest du darauf achten, dass dieser auch alle Steuerleitungen unterstützt, einige USB-RS232 Adapter sind abgespeckt. Aber die Idee mit dem Missbrauch der Steuerleitungen der RS232, naja... ich würds so nicht machen. Was hälst du von dieser Idee (da du ja C kannst): Nimm dir z.B. ein kleinen µC (ATtiny) definiere dort bis zu 8 Eingänge und sende jede 500ms ein Byte (in dem die 8 Eingänge als Bits hinterlegt sind) über die UART an den PC und dort kannst du dieses direkt per Serieller Schnittstelle auslesen und interpretieren. Da kannst dann RS232 oder USB-Adapter nehmen, egal. Dies wäre zumindest eine saubere Lösung bei der du dich auch in der Software nicht verbiegen müsstest. Gruß
Adam P. schrieb: > Nimm dir z.B. ein kleinen µC (ATtiny) Oder direkt einen Controller mit USB, wodurch man sich den Adapter und den Ärger mit dessen Treiber spart. Von wegen Schaltschrank... Haben SPS nicht sowieso eine Möglichkeit Signale an den PC zu schicken?
Niklas G. schrieb: > Da sowieso ein Adapter erforderlich ist, kannst du auch direkt einen > Adapter nehmen, der genau dafür gemacht ist! Für den bräuchte man aber wiederum passende Treiber. Das ganze auf eine serielle Schnittstelle zu abstrahieren, und diese mit der dafür vorgesehenen API anzusteuern, bietet die Flexibilität, ohne Änderung des Programmes sowohl mit "echten" seriellen Schnittstellen als auch mit USB-UART-Bridges oder gegebenenfalls anderen Lösungen (Ethernet-Device-Server) zu arbeiten. Die Win32-API bietet neben dem einfachen Pollen der Handshakeleitungen auch die Möglichkeit, Events beim Ändern der Handshakeleitungen auszulösen, das geschieht mit den Funktionen SetCommMask und WaitCommEvent. https://docs.microsoft.com/en-us/windows/desktop/DevIO/monitoring-communications-events Handshakeleitungen zum Transportieren von Statusinformation zu "missbrauchen" ist durchaus üblich; sehr lange Zeit wurde beispielsweise der Zustand von USVn auf diese Art und Weise transportiert (und von einem bis einschließlich XP/2003 zu Windows gehörenden Systemdienst ausgewertet).
:
Bearbeitet durch User
Niklas G. schrieb: > Oder direkt einen Controller mit USB Ja gut, aber je nachdem welche Kenntnisse vorhanden sind, kann sich die Implementierung von USB nicht ganz so leicht gestallten wie eine UART. Und die meisten UART-USB Seriell-Adapter stellen gar keine Treiberprobleme dar. (z.B. FTDI TTL-232R-3v3) hatte damit noch nie Probleme und selbst die Sticks von Digitus. Aber natürlich, ein µC mit USB wäre natürlich die sauberste Lösung. (Vorrausgesetzt man verwendet eine USB-Klasse die keine zusätzlichen Treiber benötigt)
:
Bearbeitet durch User
Zum Thema µC kann ich sagen, dass ich diese Lösung bereits umgesetzt habe. Mein Projekt ist bereits ein Erfolg mit Hilfe eines Raspberry Pi 3 Model B. Sinn jetzt ist es eine kostengünstigere Lösung zu erzielen um in Serienproduktion gehen zu können. Diese Lösung soll lediglich eine Leitung benötigen.Vorgeschlagen wurde mir hier gerade die RS232. So kam ich zur Problemstellung.
Tim schrieb: > eine kostengünstigere Lösung zu erzielen Ein µC der Größenortnung von ATtiny ist kostengünstig. Tim schrieb: > Diese Lösung soll lediglich eine > Leitung benötigen.Vorgeschlagen wurde mir hier gerade die RS232. Mit einer Leitung meinst du: Eine Leitung mit mehreren Adern, oder? Aber dann hast du doch schon deine Lösung. Klar ein Pi ist nicht wirklich kostengünstig, aber eine kleine Platine mit nem µC, kannst sogar dort direkt ein FTDI IC verbauen und dann brauchst nur noch ein USB Kabel an deine Schaltung anschliessen.
Serienproduktion involviert vermutlich Kunden, welche Probleme mit der Konfiguration/Auswahl des korrekten COM-Ports haben könnten, was wieder neuen Ärger für den Support bedeuten könnte... Besonders wenn noch andere Industrie(?)-Geräte auf RS232-Basis angeschlossen sind. Gute USB-RS232-Adapter (FTDI) sind auch nicht so ganz billig, aber vermutlich einfach aufgrund des Produktionsvolumens doch etwas billiger als USB-GPIO-Adapter oder gar Eigenbau-Lösungen mit uC. Eine solche würde dann auch eine eigene USB-VID erfordern, was leider auch nicht ganz billig ist, aber immerhin nur Einmal-Kosten. Dafür ist das am Flexibelsten und man könnte später leicht noch mehr Funktionen nachrüsten. Der kleinste IO-Warrior (16 Pins) kostet z.B. ca 8€ ab 100 Stück... Wie ist denn der Preisrahmen? Hat der Schaltschrank wirklich überhaupt keinen uC/SPS/sonstige programmierbare Logik die man erweitern könnte?
Oder du sparst dir das mit der Neuentwicklung und kaufst etwas fertiges und schreibst nur noch die paar Zeilen Code: https://www.ebay.de/itm/MINI-USB-Nano-V3-0-ATmega328P-CH340G-5V-16M-Micro-controller-board-for-ArduinoAB/163278927025?_trkparms=aid%3D555018%26algo%3DPL.SIM%26ao%3D2%26asc%3D20160908110712%26meid%3D31a97a6c53f2473ba54560270f036942%26pid%3D100677%26rk%3D1%26rkt%3D26%26sd%3D183161243119%26itm%3D163278927025&_trksid=p2385738.c100677.m4598 Die gibts auch mit originalem FTDI Chip.
:
Bearbeitet durch User
Niklas G. schrieb: > Wie ist denn der Preisrahmen? Preisrahmen direkt gibt es keinen. Niklas G. schrieb: > Hat der Schaltschrank wirklich überhaupt > keinen uC/SPS/sonstige programmierbare Logik die man erweitern könnte? Nein hat er nicht, denn es sollen Maschinen ohne digitale Schnittstellen überwacht werden. Daher sollen die Analogsignale der Schütze und Klemmen durch eben dieses nun neue System abgefragt werden.
Adam P. schrieb: > Ein µC der Größenortnung von ATtiny ist kostengünstig. Braucht aber eben noch den USB-Adapter! Adam P. schrieb: > Ebay-Artikel Nr. 163278927025 Möchte man sowas wirklich im Industrie-Umfeld professionell verkaufen... Tim schrieb: > Preisrahmen direkt gibt es keinen. Dann nimm den IO-Warrior o.ä. Das ist eine günstige (aber wohl nicht die allergünstigste) Lösung, die sowohl für dich als auch für den Kunden am Einfachsten sein dürfte. Tim schrieb: > Daher sollen die Analogsignale der Schütze und Klemmen > durch eben dieses nun neue System abgefragt werden. Analogsignale? Sollen Spannungen gemessen werden? Wenn es billigst aber einigermaßen ordentlich sein soll (dafür etwas mehr Aufwand), kaufe man sich so etwas wie das (ebay: 401603371806), programmiere eine entsprechende USB-Firmware darauf (Beispiele und Bibliotheken sind vorhanden) und steuere das über libusb oder WinUSB aus Visual Studio aus an. Nur mit der VID muss man sich was überlegen.
Ok nun gut ich werde erstmal versuchen weiter zu experimentieren und schaue dann am Ende für welche Lösung ich mich entscheide. Vielen Dank an Alle.
Niklas G. schrieb: > Möchte man sowas wirklich im Industrie-Umfeld professionell verkaufen... Eher weniger, war nur ein Bsp. bzgl. "Kostengünstig", aber anscheinend sind die Kosten nun doch egal. Niklas G. schrieb: > kaufe man sich so etwas wie das (ebay: 401603371806) Klar das wäre besser, aber wie du sagtest, VID Problem, hätte er beim FTDI nicht...ABER Wenn er eine eigene Schaltung entwerfen würde, um diese zu verkaufen, dann würde ja noch Zulassung, EMV usw. dazukommen. Da muss man echt abägen, was sich lohnt bzw. ausreichend ist.
Wie wäre es mit sowas USB OptoIn: http://www.cleware-shop.de/epages/63698188.sf/de_DE/?ObjectPath=/Shops/63698188/Products/54 damit du 8 Eingänge und eine C-Dll Bibliothek die du leicht integrieren kannst ich hab den USB-Cutter von denen mal für USB-Geräte-Firmware Stress-Tests benutzt, leicht zu verwendende API zum Programmieren
CppBert schrieb: > ich hab den USB-Cutter von denen mal für USB-Geräte-Firmware > Stress-Tests benutzt, leicht zu verwendende API zum Programmieren Danke der sieht klasse aus. Hoffe mit der Software komme ich zurecht, wenn ja ist das eine wesentlich einfachere Lösung.
Tim schrieb: > Danke der sieht klasse aus. Hoffe mit der Software komme ich zurecht, > wenn > ja ist das eine wesentlich einfachere Lösung. Auf einmal gehen auch Lösungen die sogar teurer als der Raspberry-Pi sind? ? Ähnlich einfache aber viel billigere wurden ja genannt, aber eben nicht isoliert.
Niklas G. schrieb: > Auf einmal gehen auch Lösungen die sogar teurer als der Raspberry-Pi > sind? naja 40 EUR plus Library mit einer Handvoll Funktionen ist schon näher an einer Lösung als der Raspberry - wenn er jetzt nicht so Erfahren ist @Tim: Schreib denen mal eine Mail mit deinen Anforderung die sagen dir dann die besten Lösung/Produkt
Cppbert schrieb: > naja 40 EUR plus Library mit einer Handvoll Funktionen ist schon näher > an einer Lösung als der Raspberry - wenn er jetzt nicht so Erfahren ist Eine R-PI Lösung hat Tim nach eigener Aussage ja schon, die aber zu teuer sei - obwohl billiger als der OptoIn, dessen Hauptfeature der isolierten Eingänge ja gar nicht gefordert war. Der R-PI hat ja direkt GPIOs und braucht somit gar keinen zusätzlichen Adapter. Alles etwas mysteriös.
There is a ready made ASCII terminal available in Windows (DOS) console. I think this is much easier then all the .NET hassle. Just read or write your ASCII file to/from COM5. I use USB-serialcoverter that has COM5. Run cmd.exe then type "mode /?". (Make sure the converter is on, otherwise "Serial port:" will be missing, you only get CON: then.) Result: ======================================================================== C:\Users\geerth>mode /? Configures system devices. Serial port: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [to=on|off] [xon=on|off] [odsr=on|off] [octs=on|off] [dtr=on|off|hs] [rts=on|off|hs|tg] [idsr=on|off] Device Status: MODE [device] [/STATUS] Redirect printing: MODE LPTn[:]=COMm[:] Select code page: MODE CON[:] CP SELECT=yyy Code page status: MODE CON[:] CP [/STATUS] Display mode: MODE CON[:] [COLS=c] [LINES=n] Typematic rate: MODE CON[:] [RATE=r DELAY=d] ======================================================================== This is the default setting of COM5: C:\Users\geerth>mode COM5 Status for device COM5: ----------------------- Baud: 1200 Parity: None Data Bits: 7 Stop Bits: 1 Timeout: OFF XON/XOFF: OFF CTS handshaking: OFF DSR handshaking: OFF DSR sensitivity: OFF DTR circuit: ON RTS circuit: ON C:\Users\geerth> ======================================================================== BTW: I recommand YAT terminal for experiments. https://sourceforge.net/projects/y-a-terminal/ You can also run YAT in cmd.exe. Get help instructions this way: C:\Users\geerth>"C:\Program Files\YAT\YATConsole.exe" /?
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.