PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommunikation SPS <-> Mega8 1Bit



cas
30.11.2009, 19:10
Hallo,
habe eine SPS. Diese soll Informationen an einen Mega8 senden (insgesamt ca. 35 Bytes).

Gleichzeitig soll die SPS Informationen vom Mega8 erhhalten ca. 10 Bytes.
Bisher noch einfach aber:

Die SPS hat nur einen digitalen Ausgang und einen digitalen Eingang.

Jetzt muß ich die Bytes nach und nach seriell rausschieben und einlesen. Hab aber keinen Takt oder eine Syncronisation. Wie mach ich das am besten ???

Danke CAS

Lebi
30.11.2009, 20:04
Hi!
hat deine SPS keine BUS-Anbindung?

alter Mann
30.11.2009, 20:13
Eine richtige SPS? Einfach noch ein Ausgabemodul dazustecken und den Takt auf einem zusätzlichen Ausgang übertragen.

Spielzeug SPS? Die Daten im Manchestercode übertragen: http://de.wikipedia.org/wiki/Manchestercode

Florian

RP6conrad
30.11.2009, 20:17
Da hast du schlechte Karten. Am ersten sind die Pegel unterschiedlich (Mega 8 5VDC, SPS meistens 24 VDC), lass sich losen mit opticoupler. Am zweiten sind die Ein/ausgange von einer SPS recht langsam. Die werde cyclisch eingelesen/angesteuert, cycluszeit je nach dem bon 1 bis 50 mS. Ueber so eine Schnittstelle 35 bytes schicken kan lange daueern. Auch must du dan selbst eine art von Protokoll machen. Vorschlag :SPS erweiteren so das du mehr Ein/ausgange hat, und das ganse Parallel machen.

cas
30.11.2009, 20:39
Hallo,
also 24V und 5 V sind kein Problem, hab ich mit einem Optok. gelöst.

Ich mache mit der Übertragung natürlich schon einige Experimente.
Ich erzeuge einen ständigen Takt mit der SPS. Dieser Ist 3 Taktzyklen der SPS lang. Leider ist ein SPS Takt 1ms lang.
Zur Zeit ist das Protokoll so:
Start : 111110 (5ms langer Impuls) danach wird übertragen..
bit0 bit1 bit2 ... bit8
Der reine Takt sieht so aus :
1000 1000 1000 1000 das sind 4 Takte mit je 4xlow also 0 0 0 0
1110 1110 1110 1110 das sind 4 Takte mit je 4xhight also 1 1 1 1
1000 1110 1000 1110 das sind 4 Takte mit je 4xhight also 0 1 0 1
usw...
das bedeutet 40 Bytes a 8 bit = 40x8x4 + 6=1,286 Sekunden lang

Leider muß ich 1110 statt nur 110 übertagen um sauber unterscheiden zu können, ob eine 0 oder eine 1 übertragen wird, da die SPSje nach Auslastung mal mal 1,1ms bracht und mal 0,9ms braucht.

TheDarkRose
02.12.2009, 14:46
Hast du auf der SPS keine serielle Schnittstelle?

cas
02.12.2009, 16:25
Hallo,

je nch Modell ja und nein.

Es geht aber darum, mit möglichtst einem billigem digitalem Ausgang ein Textdisplay (LCD 2x16) anzusteuern.

Wenn ich eine RS232/ oder RS485 kaufen müßte, ist das Thema wegen der Kosten schon erledigt.

MfG CAS

TheDarkRose
02.12.2009, 16:27
Also bei 4 bit Anszeuerung ohne busy flag brauchst du 6 ausgänge..

aber warum, nicht gleich ein HMI Panel hernehmen?? Oder ist das für privat?

Rico88
18.10.2012, 22:30
Hallo,

ich weiß, ich grade grade ein altes Thema aus, doch ich finde die Herausforderung sehr interessant. Ich habe damit mal ein wenig experimentiert und bin auch zum Erfolg gekommen. Jedoch, ist es natürlich klar, das die Kommunikation sehr langsam und fehleranfällig ist.

Die Idee: Der Takt für die Daten wird jeweils durch den Empfänger vorgenommen.

Datenrichtung µC->SPS
1. Startsignal: Die SPS wechselt seinen Ausgangspegel von low nach high
2. Der µC gibt das erste Bit auf seinen Ausgang aus
3. im nächsten SPS-Zyklus wird der Eingang gelesen und der Zustand gespeichert
4. Die SPS wechselt seinen Ausgang von high auf low
5. Der µC gibt das zweite Bit auf seinen Ausgang aus
6. im nächsten SPS-Zyklus wird der Eingang gelesen und entsprechend gespeichert
7. Sprung zu Punkt1

So müssen jedoch immer alle Bytes gesendet werden, da beide Steuerungen die Taktsignale abzählen. Nach dem letzten Bit wird der Ausgang durch die SPS auf low gelegt und die Schnittstelle ist wieder frei.

In umgekehrter Richtung schaut das ähnlich aus, nur das der mC seinen Ausgangswechsel künstlich verlängern muss, damit die SPS Daten bereit stellen kann (ca. 30ms).

Bei dem ganzen gehe ich davon aus, dass die SPS eine maximale Zykluszeit von 20ms besitzt. Mehr ist ja eh nicht üblich. Eher tauscht man die SPS.

Nach dieser Methode muss natürlich permanent abwechselnd der Takt vorgegeben werden, da niemand auf vorhandene Daten hinweisen kann.

Das ganze habe ich mit einen PIC16F876A im Zusammenspiel mit einer S7-300 (CPU 315-2DP) getestet. Auf der SPS ist der Code in AWL, da ich nur da sinnvoll mit Zeigern durch die Datenbereiche navigieren kann ohne gleich den Zyklus unnötig zu erhöhen.

Die Methode ist aber ausschließlich für Privat zu verwenden. In der Industrie wird jedem der Kopf abgerissen.

Gruß
Rico

021aet04
19.10.2012, 09:46
Wenn man in der Industrie zwischen SPS und µC kommunizieren muss wird eher RS232 oder eine ähnliche Schnittstelle verwendet.

Für den privaten Bereich könnte man es so machen wie oben. Ich würde aber mit gesamt 4 oder 5 Pins arbeiten.
Die einzelnen Pins sind:
SPS => µC (Takt)
SPS => µC (Daten)
SPS => µC (Daten vorhanden)
µC => SPS (Daten)
µC => SPS (Daten vorhanden)

MfG Hannes