Forum: Mikrocontroller und Digitale Elektronik kann ein on/off Signal (keine daten) an rs232 an PC gesendet werden?


von Simon (Gast)


Lesenswert?

Hallo,

zur Verbesserung hier im Betrieb möchte ich so ein kleines BDE System 
aufbauen.
Hier laufen Maschinen wo man jeden Zyklus ( also ca jede minute ein 
"Stromstoß" ) der Produktion einmal ein Signal abgreifen könnte.

Kann so ein Signal ("strom"<oder>"keinStrom"(keine daten)) an eine 
Schnitstelle am PC gesendet werden?
Dazu würde ich vermutlich noch ein kleines Programm benötigen,
welches dann einfach z.b. eine "1" in eine mySQL Datenbankzeile 
schreibt.
Wenn kein Signal, muss nichts geschrieben werden.

So kann ich über php dann überwachen. Wenn z.b. Seit 3min kein Signal 
gekommen ist das irgendeine Aktion ausgeführt wird.

Ist so etwas möglich?
oder ist "Stromstoß" quatsch?
Wie gehe ich hier am besten ran?
Befinde mich noch im "Brainstorming" :)

Von Elektrotechnik habe ich leider keine Ahnung. :(
Von mySQL / PHP schon eher..

Gruß

Simon

von Thomas B. (nichtessbar)


Lesenswert?

Was verstehst du unter "Stromstoß"? Stärke / Dauer?

Kann es sein dass du eher einen Spannungsimpuls (Am Oszi oder Multimeter 
von 0 auf 5V/12V/xV) meinst?

Und ich würds nicht in PHP machen sondern wenn du schon nicht in 
Hardwarenähe willst dann in Java oder C#, da sind die Schnittstellen 
recht einfach...

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

wieso meinst du, daß ein on/off Signal "keine Daten" wären?

von Detlev T. (detlevt)


Lesenswert?

Man kann eine Spannung -3V > U > -12V an den Empfangspin des 
RS232-Schnitstelle legen. Ein Impuls mit 3V < U < 12V "ausreichender 
Länge" (Hängt von der Datenrate ab) wird dann als Startbit interpretiert 
und ein Dummy-Byte empfangen. Der Empfang dieses "Bytes" ließe sich dann 
auswerten.

von Simon (Gast)


Lesenswert?

...
0 auf 12V
ok dann brauche ich wohl einen "impulszähler" o.ä.

Meine Frage ist ja, ob es möglich ist, diesen ca 0,5 sec impuls
an einen Computer oder Siemens Steuerung zu senden.
 Dann einen Eintrag in eine mySQL Datenbank erzeugt.

Da php eher serverseitig ist,
muss es schon mit C oder sonst wie gemacht werden.
Hauptsache es kommt in eine mySQL Datenbank.
...dann könnte ich damit arbeiten.

Gruß

von Karl H. (kbuchegg)


Lesenswert?

IM Grunde bin ich versucht zu sagen:
Ja, es ist möglich.

Aber mit SQL und PHP schiesst du mit Kanonen auf Spatzen.

Was du im Grunde haben willst ist ein simples Monoflop, welches 
regelmässig von der Maschine zurückgesetzt wird und wenn das 
Zurücksetzen ausbleibt dann läuft das Monoflop aus und schlägt Alarm.

Da du mit dem Signal sowieso nicht direkt in den PC gehen kannst (über 
welche Schnittstelle soll das denn gehen), wäre ein anderer Weg denkbar:

zb einen Arduino die Maschinen überwachen lassen und wenn der 
Rücksetzpuls ausbleibt, dann schlägt er Alarm, in dem er zb an den PC 
eine Nachricht schickt.

Wie gut man mit PHP zb eine serielle Schnittstelle auf eintreffende 
Meldungen überwachen kann, weiß ich nicht. Aber sowas ist ja auch in C# 
oder VB schnell zusammengeklickt.

Problematisch an der ganzen Sache sehe ich, dass du von der 
Elektrik/Elektronik richtiggehend 0-Ahnung hast. Und da liegt der 
Pferdefuss an der ganzen Sache.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein statisches Signal (bzw. eines, das sich nicht zu schnell* ändert) 
kann man mit den Handshakeleitungen der seriellen Schnittstelle 
auswerten.

Dazu lassen sich gleich vier Eingänge verwenden: DCD, DSR, CTS und RI.

Die Schnittstellenhardware kann bei Signalpegeländerungen an diesen 
Eingängen einen Interrupt auslösen; sofern das Signal aber sich nicht 
allzuschnell ändert, lässt sich der Pegel auch durch schlichtes Pollen 
(zyklisches Abfragen) ermitteln.


*) Schnell ist ein relativer Begriff. Als minimale Periodendauer im 
Pollbetrieb würde ich hier recht willkürlich 100 msec ansetzen, wenn ein 
Windows-Usermode-Programm involviert ist.

von Simon (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> zb einen Arduino die Maschinen überwachen lassen und wenn der
> Rücksetzpuls ausbleibt, dann schlägt er Alarm, in dem er zb an den PC
> eine Nachricht schickt.
>
> Wie gut man mit PHP zb eine serielle Schnittstelle auf eintreffende
> Meldungen überwachen kann, weiß ich nicht. Aber sowas ist ja auch in C#
> oder VB schnell zusammengeklickt.
>
> Problematisch an der ganzen Sache sehe ich, dass du von der
> Elektrik/Elektronik richtiggehend 0-Ahnung hast. Und da liegt der
> Pferdefuss an der ganzen Sache.

 Arduino  hört sich gut an. So wie ich das auf dem ersten Blick sehe.
 Bestelle mir mal so en "starterKit" und acker mich durch die 
Tutorials.... Habe ja Zeit, und lerne schnell :)
Ich berichte in ein paar wochen nochmal.. :)

von Florian (Gast)


Lesenswert?

Übersehe ich da was?

Das sind keine 20 Zeilen Code in irgendeiner Programmiersprache. PHP ist 
dafür nicht geeignet. Aber das freie MS Visual C/Basic. Da das ganze 
wohl auf einem PC laufen soll, hat der vermutlich eine parallele 
Schnittstelle, also kein Problem. Und seriell an CTS/DSR/RI/DCD ginge 
auch, da die meisten Schnittstellen durchaus TTL Pegel erkennen und 
bereits ab 0V LOW annehmen und +12V sowieso OK ist. Da ist keinerlei 
Hardware nötig - maximal ein Widerstand. Und wenn man das ganze 
galvanisch sauber aufbauen will, dann kann man noch ein Relais + D + RC 
spendieren. Keine 3€. Was soll da ein Arduino?

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:
> Übersehe ich da was?


Aus dem Eröffnungsposting:

> Hier laufen Maschinen

MaschinEN

also mehrere, bis viele.
Und so wie das in Betrieben/Produktionshallen nun mal ist, soll das 
ganze oft auch einfach erweiterbar sein und man hat lange Kabelwege.

Warum nur denke ich bei einer Zykluszeit von ca. 1 Minute an eine 
Produktionshalle, in der 30 Spritzgussmaschinen stehen, die zwar alle 
ihren eigenes Störlicht haben, das nur blöderweise der Mann im Leitstand 
nicht sieht. Und wenn der alle 15 Minuten seine Runde geht, hat er 15 
Minuten Produktionsausfall, wenn eine in den Formsschluss gelaufen ist 
oder der Stapler sich verheddert hat.
Hmm. Vielleicht weil ich einige meiner Ferialpraxen da gemacht habe?

von Thilo H. (thaala)


Lesenswert?

Wenn man soweit ist...

...ein C - Programm zu schreiben (sowohl für einen PC als auch für einen 
Mikrocontroller), das von einem Mikrocontroller Daten empfängt um diese 
dann in eine Datenbank zu schreiben...

...ja wenn man soweit ist, dann kann man ruhig auch ein paar zeichen 
über die serielle Schnittstelle senden, das ist nämlich soweit Standard, 
dass es eher mehr Mühe kostet Handshake - Signale auszuwerten usw.

Gruß Thilo

von Uwe (Gast)


Lesenswert?

Nent sich Watchdog (Wachhund) und ist in µC enthalten. µCs haben oft 
auch noch ne RS232. Ein kleine Program in einen µC deiner Wahl und die 
Software auf dem PC der über die serielle mit dem µC kommuniziert.

von Der Rächer der Transistormorde (Gast)


Lesenswert?

Simon schrieb:
> Hier laufen Maschinen wo man jeden Zyklus ( also ca jede minute ein
> "Stromstoß" ) der Produktion einmal ein Signal abgreifen könnte.
>
> Kann so ein Signal ("strom"<oder>"keinStrom"(keine daten)) an eine
> Schnitstelle am PC gesendet werden?

Ja, aber um würde ich aus diversen Gründen mit einem Logger machen der 
dann die Ereignisse mit Zeitstempel zwischenspeichert an auf Anfrage den 
PC überträgt.

von Florian (Gast)


Lesenswert?

All das will der Urposter aber nicht!

Er will nichts senden, sondern nur zählen und eine simple SQL Abfrage 
machen, die aus einem einzelnen INSERT besteht. Das ganze scheint ja 
nicht einmal zeitkritisch zu sein, wenn er nur alle 3 Minuten agieren 
will. Und bei 12 V sind Leitungslängen wohl auch eher unerheblich. Eine 
Suche nach MySQL und serielle Schnittstelle für MS Visual C liefert 
vermutlich schon den gesamten Code. Wenn Simon von PHP Ahnung hat, 
wird's wohl auch schnell mit C klappen. Und wenn nicht, kann er ja 
fragen. Aber µC und Arduino oder Monoflop ist mit Kanonen auf Spatzen 
schießen für so eine simple Problematik. Aber man kann sicher auch bei 
Siemens so was für ein paar tausend Euro kaufen oder sich bei Conrad 
umschauen ...

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> wird's wohl auch schnell mit C klappen. Und wenn nicht, kann er ja
> fragen. Aber µC und Arduino oder Monoflop ist mit Kanonen auf Spatzen
> schießen für so eine simple Problematik.

Dann erklär mir doch bitte mal, wei du 10 Maschinen an die 4 Eingänge 
deiner Seriellen hängst?

Und ein Arduino ist nun wirklich nicht der große finanzielle Aufwand.

Ausserdem handelt es sich offenbar um einen Betrieb. Fällt der Rechner 
aus, muss Ersatz her. Und zwar pronto. Blöd nur, wenn der dann keine 
Serielle mehr hat.

Hört doch endlich auf, Bastlerlösungen für Dinge vorzuschlagen die 24/7 
in einem Betrieb laufen müssen.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ferialpraxen

wasn das?

von Karl H. (kbuchegg)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> Karl Heinz Buchegger schrieb:
>> Ferialpraxen
>
> wasn das?

:-) Der Plural von Ferialpraxis.

(Gibts das in D nicht? Schüler die in den Sommerferien arbeiten gehen. 
Bei mir wars so, dass meine Schule sogar welche verlangt hat)

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Gibts das in D nicht? Schüler die in den Sommerferien arbeiten gehen.

doch, hier in D heißt das "Praktikum". Ich vergas, du kamst ja aus einem 
Land hinter den 7 Bergen...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Der Plural von Ferialpraxis.
>
> (Gibts das in D nicht?

Wir haben hier weder Paradeiser noch Schlagobers. Das Herkommen lohnt 
also definitiv nicht.

von Juppi J. (juppiii)


Lesenswert?

so nebenbei,kann mir mal einer sagen wie RI in VB.net abgefragt wird?!
;-O

von Karl H. (kbuchegg)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Karl Heinz Buchegger schrieb:
>> Der Plural von Ferialpraxis.
>>
>> (Gibts das in D nicht?
>
> Wir haben hier weder Paradeiser noch Schlagobers. Das Herkommen lohnt
> also definitiv nicht.

Ts. Ts. Was will man schon von einem Land erwarten, die zum Herrn Ober 
profan Kellner sagen und in dem man in der Trafik nicht mindestens mit 
Herr Professor angesprochen wird.

http://www.ephraimkishon.de/Satire_Reisen.htm#Wien

von Florian (Gast)


Angehängte Dateien:

Lesenswert?

Ich wollte das ganze just for fun mal testen.
Und es ist wie gedacht simpel. Der Code ist sicher kürzer und eleganter 
machbar und verträgt auch noch ein paar Ausnahmeabfänge. Aber im Prinzip 
geht es so. Verbindung zur DB herstellen und sobald RI von COM1 auf High 
(12 V) geht, wird ein Eintrag generiert.

1
' Demoprogramm, wie man eine MySQL DB ansteuert
2
' Wenn die Ring Leitung von COM 1 Port auf High (12 V) geht, wird ein neuer Datensatz in die DB geschrieben.
3
' Die Verbindungsdaten zur Datenbank sind zu setzen, Zugriff auf die DB muß gewährt sein, die Tabelle muß existieren.
4
' Die MySQL Connection muß auf dem System installiert sein: http://openbook.galileocomputing.de/einstieg_vb_2010/einstieg_vb_2010_kap_08_007.htm#mjf360c6b495d6eac65db44e7b9f658df0
5
' Eine Schnittstelle zwischen Visual Basic und MySQL bietet der Treiber Connector/NET. Sie können ihn auf der Internetseite von MySQL herunterladen
6
' Nach der Installation müssen Sie in dem Projekt, in dem der Treiber genutzt werden soll, einen Verweis auf die Bibliotheken des Treibers einrichten. Hierzu gehen Sie über den Menüpunkt Projekt • Verweis hinzufügen. In der Liste auf der Registerkarte .NET findet sich die Komponente MySQL.Data.
7
' Alternativ über die Registerkarte "Durchsuchen" suchen.
8
' 
9
' SQL:
10
' CREATE TABLE IF NOT EXISTS `test` (
11
'   `id` int(11) NOT NULL auto_increment,
12
'   `zeitpunkt` timestamp NOT NULL default CURRENT_TIMESTAMP,
13
'   `zaehler` int(11) NOT NULL,
14
'   PRIMARY KEY  (`id`)
15
' ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=37 ;
16
'
17
'
18
' 2/2012 Florian Schäffer, http://www.blafusel.de
19
20
Imports MySql.Data.MySqlClient
21
22
23
Public Class Form1
24
    Dim conn As New MySql.Data.MySqlClient.MySqlConnection
25
26
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
27
        Dim myConnectionString As String
28
29
        ' IP Adresse des DB Servers
30
        ' Benutzername
31
        ' Kennwort
32
        ' Datenbankname
33
        myConnectionString = "server=;" _
34
                           & "uid=;" _
35
                           & "pwd=;" _
36
                           & "database=;"
37
        Try
38
            conn.ConnectionString = myConnectionString
39
            conn.Open()
40
41
            Button2.Enabled = True
42
        Catch ex As MySql.Data.MySqlClient.MySqlException
43
            MessageBox.Show(ex.Message)
44
        End Try
45
46
    End Sub
47
48
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
49
        Dim cmd As New MySqlCommand
50
51
        Try
52
            cmd.Connection = conn
53
54
            cmd.CommandText = "INSERT INTO test (zaehler) VALUES (1)"       ' In Tabelle "test" im Feld "zaehler" eine 1 in neuer Zeile speichern
55
            cmd.Prepare()
56
            cmd.ExecuteNonQuery()
57
            MessageBox.Show("Datum erfolgreich eingefügt")
58
        Catch ex As MySqlException
59
            MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
60
        End Try
61
62
63
    End Sub
64
65
    Private Sub SerialPort1_PinChanged(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialPinChangedEventArgs) Handles SerialPort1.PinChanged
66
67
        Dim cmd As New MySqlCommand
68
69
        Select Case (e.EventType)
70
            Case IO.Ports.SerialPinChange.Ring
71
                'MessageBox.Show("Ring")
72
                Panel1.BackColor = Color.YellowGreen
73
        End Select
74
        Try
75
            cmd.Connection = conn
76
77
            cmd.CommandText = "INSERT INTO test (zaehler) VALUES (1)"       ' In Tabelle "test" im Feld "zaehler" eine 1 in neuer Zeile speichern
78
            cmd.Prepare()
79
            cmd.ExecuteNonQuery()
80
        Catch ex As MySqlException
81
            MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
82
        End Try
83
        Panel1.BackColor = Color.SandyBrown
84
    End Sub
85
86
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
87
        SerialPort1.Open()
88
    End Sub
89
End Class

von Thomas B. (nichtessbar)


Lesenswert?

Florian schrieb:
1
> Dim cmd As New MySqlCommand
2
> 
3
>         Select Case (e.EventType)
4
>             Case IO.Ports.SerialPinChange.Ring
5
>                 'MessageBox.Show("Ring")
6
>                 Panel1.BackColor = Color.YellowGreen
7
>         End Select
8
>         Try
9
>             cmd.Connection = conn
10
> 
11
>             cmd.CommandText = "INSERT INTO test (zaehler) VALUES (1)"       ' In Tabelle "test" im Feld "zaehler" eine 1 in neuer Zeile speichern
12
>             cmd.Prepare()
13
>             cmd.ExecuteNonQuery()
14
>         Catch ex As MySqlException
15
>             MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
16
>         End Try
17
>         Panel1.BackColor = Color.SandyBrown


Dein Datenbankeintrag wird jedesmal erstellt wenn sich irgend ein Pin 
ändert da er nicht in der Switch drinnen ist ;)

von Florian (Gast)


Lesenswert?

Stimmt. Danke, ist mir nicht aufgefallen. Also noch den Part 
verschieben. Ist auch nicht elegant, jedesmal den Insert-String neu zu 
erzeugen und den gleichen Code zweimal zu haben.  War eh nur eine ad-hoc 
Machbarkeitsstudie.

von Mathias O. (m-obi)


Lesenswert?

Haben eure Maschinen keinen LAN Anschluss bzw. deren Steuerungen?

von Beobachtet (Gast)


Lesenswert?

Ich verstehe, Was Du da vorhast Simon.

Sowas haben wir hier in der Produktion auch schon mal "erleben müssen".
Da wurde an eine uralte Nietpresse, die 12 Nieten in einen 
Kupplungsbelag presst (Spezialteil für eine Schlagschere) der Stössel 
der Presse abgefragt und bei 12 Abläufen + Schalter für Teil ist raus, 
in der Datenbank über Netzwerk der Loszähler um 1 reduziert. (Dafür 
haben wir eine 200er SPS von Siemens in den Schrank gebaut und die hat 
dann für jeden Hub des Stössel einen Zähler hochgezählt und nach 12 + 
Halter leer ein "Fertig" Sgnal über RS-232 abgesetzt. (War dann etwa so: 
"Presse1;done;1234sec")
Das hat den Loszähler über ein Script in der Datenbank dann um 1 
reduziert.

Du glaubst gar nicht, wie schnell an manchen Tagen die 19 
Kuplungsscheiben an diesem Arbeitsplatz genietet waren ... Leider 
fehlten dann immer so 5 bis 10 Stk. am Ende vom Tag ...

Du wirst, um Deine Sache mit dem Produktionszähler sicher zu machen, 
nicht drumherumkommen, mehrere Schritte der Maschine abzufragen und beim 
Überspringen / Zurückspringen in den Schritten, den Zählimpuls zu 
sperren.

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.