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
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...
wieso meinst du, daß ein on/off Signal "keine Daten" wären?
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.
... 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ß
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.
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.
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.. :)
Ü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?
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?
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
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.
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.
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 ...
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.
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)
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...
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.
so nebenbei,kann mir mal einer sagen wie RI in VB.net abgefragt wird?! ;-O
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
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 |
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 ;)
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.
Haben eure Maschinen keinen LAN Anschluss bzw. deren Steuerungen?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.