www.mikrocontroller.net

Forum: Projekte & Code Software Profibus DP-Slave in C


Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Profibus DP-Slave Kommunikation in C
Von Jörg S., Marc H. und Johannes F.

Geschrieben für MSP430F2252. Getestet an Siemens S7 mit 19,200 und 
93,750kBit/s.
Basis war Reengineering der Kommunikation eines DP/DP Kopplers mit einer 
S7 und vor allen das Profibus Handbuch von Prof. Max Felser (ein 
Dankeschön an dieser Stelle).

Die Entwicklung begann mit kompletter Ahnungslosigkeit vom Profibus. Von 
daher ist der Code ständig verändert und erweitert worden und somit 
nicht unbedingt ein Ingenieurs-Glanzstück ;)
Der DP-Slave ist soweit Profibus konform das normale I/O Daten gesendet 
und empfangen werden können, da der Fokus auf diesem Aspekt lag.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und noch die h-Datei...

Autor: tbd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe gleich ein paar fragen dazu!

1. wie stark ist der uC ausgelastet (flash und performance) > gehts noch 
schneller / ist noch platz für andere applikationen?
2. warum dieser uC (habt ihr einen komerziellen / universitären 
Hintergrund)?
3. wie habt ihr die parametresierung der s7 gemacht?
4. was für treiber habt ihr genommen und wie habt ihr die 
abschlusswiderstände dimensioniert?
5. was für eine applikation habt ihr hiermit realisiert?
6. habt ihr schon bugs gefunden?

danke
tbd

Autor: Mark Zimmermann (noisy-tec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abo

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>1. wie stark ist der uC ausgelastet (flash und performance) > gehts noch
>schneller / ist noch platz für andere applikationen?
Er muss halt alles empfangen was los ist und erst dann auswerten ob es 
wirklich für ihn ist. Da empfangen und senden interruptgesteuert ist, 
hat der µC viel Zeit was anderes zu machen. Im speziellen Fall wird noch 
ein 2x16 Zeichen Display mit 4 Tasten, IR Empfänger und Temp.Sensor 
(TSic) "nebenbei" behandelt.
Der MSP läuft auf 8Mhz und hat 16kB FLASH und 512B RAM. Der Profibus 
verbraucht glaub ich um die 2kB FLASH und wohl um die 130B RAM. Wobei 
der RAM Verbrauch fast zu 100% aus den Ein- und Ausgangsregistern und 
dem UART Buffer besteht.
Kommunikation geht sicherlich noch schneller, hab ich aber noch nicht 
getestet da die aktuelle Geschwindigkeit erst mal ausreichend ist.

>2. warum dieser uC (habt ihr einen komerziellen / universitären
>Hintergrund)?
Ich habe vor allem beruflich mit dem MSP430 zu tun, hab aber auch schon 
vorher damit privat gearbeitet. Von daher kam nur der MSP in Frage :)
Das Projekt ist privat.

>3. wie habt ihr die parametresierung der s7 gemacht?
Über den Part kann ich wenig sagen, da kennen sich die anderen zwei 
"Mitstreiter" aus. Es muss halt ne GSD Datei für den Slave angelegt 
werden mit der man die Grundparameter festlegt.

>4. was für treiber habt ihr genommen und wie habt ihr die
>abschlusswiderstände dimensioniert?
RS485 Transceiver ist der MAX3485. Abschlusswiderstand ist 120Ohm 
vorgesehen. Halt Standard RS485...

>5. was für eine applikation habt ihr hiermit realisiert?
Hausautomation. Ich denke da wird es dann noch ne komplette 
Projektvorstellung geben, die Entwicklung ist aber noch nicht wirklich 
abgeschlossen.

>6. habt ihr schon bugs gefunden?
Das einzige was mir einfällt ist die MS1/2 Kommunikation. Wenn sowas 
mitläuft geht nix mehr, das wird wohl die nächste Erweiterung sein die 
rein kommt.

Autor: Patrick S. (kof)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf Seite 23 der von dir benannten Datei von Max Felser 
(http://www.profibus.felser.ch/technik/PROFIBUS_Technik.pdf) ist 
beschrieben,  das die Terminierung im Stecker realisiert wird.

Aber sonst finde ich es wirklich interessant! Die einzige realisierung 
auf einem uC die ich kenne ist diese: 
http://www.htw-dresden.de/fe/labor/mikror/projects/pb_slave/
Diese ist jedoch leider auf ASM geschrieben...

Habt ihr eine Testhardware gebaut oder könnt ihr eine Applikation damit 
als Demo zeigen?

Autor: Patrick S. (kof)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage habe ich noch!
Handelt es sich um DPV0(zyklisch), DPV1(azyklisch), DPV2(isochron)?

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>das die Terminierung im Stecker realisiert wird
Wenn man so einen Profibus Stecker nutzt... Muss man ja nicht.

>Habt ihr eine Testhardware gebaut oder könnt ihr eine Applikation damit
>als Demo zeigen?
Im Anhnag mal die "SPS-Remote" Einheit. Damit soll man dann in jedem 
Zimmer die Heizung, Rolladen, Wecker usw. steuern. Funktioniert so weit 
schon im Testaufbau.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>Handelt es sich um DPV0(zyklisch), DPV1(azyklisch), DPV2(isochron)?
DPV0

Im Anhang die nächste Stufe, die SPS-AudioControl zur umschaltung von 
Audio Signalen für die Deckenbeschallung der Räume. Ansonsten gibt's 
dann  noch die Dimmersteuerung. Da hab ich aber gerade kein Bild von.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joerg,

starke Sache - zwei Fragen hätte ich:

1. hast Du es auch an einer S7-300 getestet?
2. Wie sieht Dein physikalisches Interface aus?

Gruss Otto

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>1. hast Du es auch an einer S7-300 getestet?
Wenn ich mich nicht täusche wird das an einer S7-315 CPU betrieben. Was 
anderes wäre nicht ohne weiteres zur Hand.

>2. Wie sieht Dein physikalisches Interface aus?
Also Profibus ist RS485 wenn du das meinst? A, B von Profibus an den 
MAX3485 Transceiver und dann halt auf den UART vom MSP430.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joerg,

vielen Dank für die Antwort.

2) zielte darauf ab, ob Du mit einem käuflichen Siemens-Adapter 
arbeitest.

Gruss Otto

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>2) zielte darauf ab, ob Du mit einem käuflichen Siemens-Adapter arbeitest.
Dann wäre es ja nichts besonderes, oder? ;)

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

> Dann wäre es ja nichts besonderes, oder? ;)

ja - schon - aber "nur die halbe Lösung", denn die Adapter gibt es als 
USB oder RS232 auf Profibus und die kosten schon ein paat Euro.

Es ist halt gut zu wissen, dass Du es wirklich mit selbstgestrickter HW 
realisieren konntest......

oft sind es dann die "kleinen Gemeinheiten", weshalb es nicht läuft....

;-)

Gruss Otto

Autor: Patrick S. (kof)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du jetzt noch eine Demo-Software hättest... ach wäre das schön ;)

Ne jetzt mal ganz im ernst! Ich finde es wirklich prima was ihr da auf 
die beine gestellt habt!!!
Aber gerade im bereich Hausautomatisierung denke ich das es andere 
Schnittstellen (CAN/CANopen) gibt die sich im gegensatz zu propritären 
systemen etabliert haben. Das soll euch um gottes willen nicht davon 
abhalten weiter zu machen! So ein ASIC für Profibus ist nämlich super 
teuer.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn du jetzt noch eine Demo-Software hättest...
Du meinst die SPS Software?

Autor: tbd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du ein beispiel für die GSD datei posten?

mfg
tbd

Autor: Joline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

prima Projekt. Ja, die GSD-Datei wäre schon ziemlich interessant. Und 
vor allem auch, welche E/A-Konfiguration damit abgedeckt wird.

Vielleicht könntest Du ja bspw. die GSD-Datei von Eurer "SPS-Remote" 
Einheit senden und dazu, welche E/A's ansprechbar sind (evtl. auch einen 
Schaltplan).

Joline

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>welche E/A's ansprechbar sind
Wie meinst du das? Die E/As werden halt für Sachen wie Raumtemperatur, 
Aussentemperatur, Solltemperatur (Heizung), Weckzeit Wochentag, Weckzeit 
Samstag, Weckzeit Sonntag, Rolladen Steuerung, SPS Uhrzeit und sowas 
"misbraucht". Physikalische I/Os werden zumindest bei der SPS-Remote 
nicht gesetzt.

Marc will dann noch genauer was zu der GSD Datei schreiben.

Autor: Johannes F (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi,
also hier die HW Konf. von unserem test

Autor: Johannes F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi, marc habe dir mal die arbeit abgenommen mit der gsd damit deine 
wohnung schneller fertig wird ;-) und wir das ganze mal live testen 
können.
hier ein auszug aus der gsd, etwas spielraum ist da für jeden drin

;==========================================
; Geraetestammdatei fuer SPS-Remote
; SEE-Solutions
; Autor : SEE-Solutions
; Stand : 30.09.2007
;         30.09.2007 V1.0
; =========================================
;
#Profibus_DP
; <Prm-Text-Def-List>
PrmText=1
Text(0)="Extended diagnosis enabled"
Text(1)="Extended diagnosis disabled"
EndPrmText
PrmText=1
Text(0)="Testen an"
Text(1)="Testen aus"
EndPrmText
;
; <Ext-User-Prm-Data-Def-List>
ExtUserPrmData=1 "Diagnose"
Bit(7) 0 0-1
Prm_Text_Ref=1
EndExtUserPrmData
; <Unit-Definition-List>
GSD_Revision        = 1
Vendor_Name         = "SEE-SOLUTIONS"
Model_Name          = "SPS-REMOTE"
Revision            = "1.0"
Ident_Number        = 0x8070
Protocol_Ident      = 0
Station_Type        = 0
FMS_supp            = 0
Hardware_Release    = "A2"
Software_Release    = "B1"
;
9.6_supp            = 1
19.2_supp           = 1
45.45_supp          = 1
93.75_supp          = 1
187.5_supp          = 1
500_supp            = 0
1.5M_supp           = 0
3M_supp             = 0
6M_supp             = 0
12M_supp            = 0
;
MaxTsdr_19.2        = 150
;
Redundancy          = 1
Repeater_Ctrl_Sig   = 2
24V_Pins            = 0
Implementation_Type = "SPC3"
Bitmap_Device="SI8070_N"
Bitmap_SF="SI8070_S"
;
OrderNumber         = "SPS-RMT_V1.0"
Freeze_Mode_supp    = 1
Sync_Mode_supp      = 1
Auto_Baud_supp      = 1
;
Set_Slave_Add_supp  = 0
Min_Slave_Intervall = 3
Modular_Station     = 1
Max_Module          = 16
Max_Input_Len       = 244
Max_Output_Len      = 244
Max_Data_Len        = 256
;
Modul_Offset        = 1
Fail_Safe           = 0
Slave_Family        = 9
Max_Diag_Data_Len   = 11
User_Prm_Data_Len   = 0
Max_User_Prm_Data_Len= 4
Ext_User_Prm_Data_Const(0) = 0x00,0x00,0x00,0x80
Ext_User_Prm_Data_Ref(3) = 1
;
; Unit-Diagnostics:
Unit_Diag_Bit(0)    = "Data Valid 1 = Valid"
Unit_Diag_Bit(1)    = "reserved"
Unit_Diag_Bit(2)    = "reserved"
Unit_Diag_Bit(3)    = "reserved"
Unit_Diag_Bit(4)    = "reserved"
Unit_Diag_Bit(5)    = "reserved"
Unit_Diag_Bit(6)    = "reserved"
Unit_Diag_Bit(7)    = "reserved"
Unit_Diag_Bit(8)    = "Inputs of other DP LBS"
Unit_Diag_Bit(9)    = "Inputs of other DP 2nd LSB"
Unit_Diag_Bit(10)   = "Inputs of other DP 3rd LSB"
Unit_Diag_Bit(11)   = "Inputs of other DP 4th LSB"
Unit_Diag_Bit(12)   = "Inputs of other DP 4th MSB"
Unit_Diag_Bit(13)   = "Inputs of other DP 3rd MSB"
Unit_Diag_Bit(14)   = "Inputs of other DP 2nd MSB"
Unit_Diag_Bit(15)   = "Inputs of other DP MSB"
Unit_Diag_Bit(16)   = "Outputs of other DP LSB"
Unit_Diag_Bit(17)   = "Outputs of other DP 2nd LSB"
Unit_Diag_Bit(18)   = "Outputs of other DP 3rd LSB"
Unit_Diag_Bit(19)   = "Outputs of other DP 4th LSB"
Unit_Diag_Bit(20)   = "Outputs of other DP 4th MSB"
Unit_Diag_Bit(21)   = "Outputs of other DP 3rd MSB"
Unit_Diag_Bit(22)   = "Outputs of other DP 2nd MSB"
Unit_Diag_Bit(23)   = "Outputs of other DP MSB"
Unit_Diag_Bit(24)   = "reserved"
Unit_Diag_Bit(25)   = "Clear-Data Request other DP"
Unit_Diag_Bit(26)   = "Unfreeze Request other DP"
Unit_Diag_Bit(27)   = "Freeze Request other DP"
Unit_Diag_Bit(28)   = "Unsync Request other DP"
Unit_Diag_Bit(29)   = "Sync Request other DP"
Unit_Diag_Bit(30)   = "reserved"
Unit_Diag_Bit(31)   = "reserved"
;
; <Module-Definition-List>
Module = "1 Byte Input" 0x10
1
EndModule
;
Module = "2 Bytes Input" 0x11
2
EndModule
;
Module = "4 Bytes Input" 0x13
3
EndModule
;
Module = "8 Bytes Input" 0x17
4
EndModule
;
Module = "16 Bytes Input" 0x1F
5
EndModule
;
Module = "1 Byte Output" 0x20
6
EndModule
;
Module = "2 Bytes Output" 0x21
7
EndModule
;
Module = "4 Bytes Output" 0x23
8
EndModule
;
Module = "8 Bytes Output " 0x27
9
EndModule
;
Module = "16 Bytes Output" 0x2F
10
EndModule
;
Module = "1 Byte Input consistent" 0x90
11
EndModule
;
Module = "2 Bytes Input consistent" 0x91
12
EndModule
;
Module = "4 Bytes Input consistent" 0x93
13
EndModule
;
Module = "8 Bytes Input consistent" 0x97
14
EndModule
;
Module = "16 Bytes Input consistent" 0x9F
15
EndModule
;
Module = "1 Byte Output consistent" 0xA0
16
EndModule
;
Module = "2 Bytes Output consistent" 0xA1
17
EndModule
;
Module = "4 Bytes Output consistent" 0xA3
18
EndModule
;
Module = "8 Bytes Output consistent" 0xA7
19
EndModule
;
Module = "16 Bytes Output consistent" 0xAF
20
EndModule
;

Autor: Johannes F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
damit des keine diskusionen gibt, ja die "Ident_Number" ist eine vom 
großen S. wir haben diese gsd nur als muster genommen. da es sich um 
kein kommerzielles projet handelt, sondern nur einen privaten test, gibt 
es damit auch keine probleme.

Autor: Joline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>welche E/A's ansprechbar sind
>Wie meinst du das? Die E/As werden halt für Sachen wie Raumtemperatur,
>Aussentemperatur, Solltemperatur (Heizung), Weckzeit Wochentag, Weckzeit
>Samstag, Weckzeit Sonntag, Rolladen Steuerung, SPS Uhrzeit und sowas
>"misbraucht". Physikalische I/Os werden zumindest bei der SPS-Remote
>nicht gesetzt.

Naja, auf dem Bild sind u.a. 4 Taster zu sehen. Da könnte man ja auf die 
Idee kommen, dass das Eingänge sind, die an die SPS weitergeleitet 
werden...

Danke für die GSD Datei. Aus der Konfiguration kann ich sehen, dass da 
32 Byte als Ein- und als Ausgang ausgetauscht werden können (im Beispiel 
12..46). Wie kann man nun Daten vom Slave an die SPS senden? Also ich 
meine, ich möchte z.B. Daten senden, die man dann auf EW14 in der SPS 
empfängt? Oder umgedreht, wenn man auf den Ausgang AW16 einen Wert 
schreibt, wie kann man den im Slave empfangen? Kommt da immer ein 
Bytehaufen mit der Länge 32 an, den man selbt auseinander nehmen 
muss/kann?

Joline

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Naja, auf dem Bild sind u.a. 4 Taster zu sehen. Da könnte man ja auf die
>Idee kommen, dass das Eingänge sind, die an die SPS weitergeleitet
>werden...
Die Tasten sind nur für die Menü-Steuerung vom Gerät, die SPS bekommt 
davon nichts mit.

>Kommt da immer ein Bytehaufen mit der Länge 32 an, den man selbt
>auseinander nehmen muss/kann?
Genau das, ja.

Autor: Joline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke.

Autor: Joline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Frage zur Hardware:

Da ist am UART des Controllers nur ein RS485-Baustein angeschlossen und 
dieser hängt dann direkt am Profibus, richtig?

Joline

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Da ist am UART des Controllers nur ein RS485-Baustein angeschlossen und
>dieser hängt dann direkt am Profibus, richtig?
Genau, alles Standard RS485 Technik.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und nur für Profis ;) Wenn das PROFI im PROFIBUS keine Abkürzung wäre, 
würde ich Lachen ;)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

gibt es zu Eurem Projekt auch eine zusammenfassende Dokumentation / 
Website?

Gruß,
Thomas

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gibt es zu Eurem Projekt auch eine zusammenfassende Dokumentation /
>Website?
Nö :) Gibt aber noch einen kleinen "Schwesterthread" im SPS-Forum:
http://www.sps-forum.de/showthread.php?t=15510

Wie gesagt ist das Projekt ja auch noch nicht abgeschlossen. Von daher 
werden ich auch (vorerst) keine Schaltpläne o.ä. einstellen. Fragen zur 
Hardware dürfen aber natürlich gestellt werden.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

mensch, deine Schalter-Einbauten find ich Klasse.
Wärst Du bereit hierzu die Schaltpläne & Board (insb. Dimension-Layer), 
sowie Befestigungsmöglichkeiten offen zu legen?
Fänd ich super. Ich bin grad dabei einen Unterputz-Einsatz aufzubauen; 
Funktionsmöglichkeit soll sein: Temperatur, LCD, Dimmer, 1xSchaltkontakt 
(für nächste Steckdose), BUS-Anschluß.

Ich danke Dir sehr

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wärst Du bereit hierzu die Schaltpläne & Board (insb. Dimension-Layer),
>sowie Befestigungsmöglichkeiten offen zu legen?
Das mit den Schaltplänen hatte ich ja schon gesagt.
Bezüglich Befestigungsmöglichkeiten dürfte sich das Problem stellen das 
wir Tragringe von HEWI bzw. Berker verwendet haben die ich bei uns in 
der Firma aus dem Schrott geholt habe und die man wohl sonst nicht im 
freien Handel bekommt. Alternative wäre evt. der Tragring 12700 von 
Gira. Dafür müsste man das Layout aber ändern, von daher würden meine 
Dimensions wohl nicht sonderlich helfen.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Tragring 12700 von Gira.
Berichtigung: Muss 112700 heissen.

Autor: Johannes F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es gibt noch
gira tragring AMP steckbar 019100 ca.3€
oder einfach eine normale steckdose für 2€ und den rest in den müll ;-)

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>es gibt noch gira tragring AMP steckbar 019100 ca.3€
>oder einfach eine normale steckdose für 2€ und den rest in den müll ;-)
Da muss man dann aber erst mal schnitzen bis man was brauchbares hat.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal die Rückseite der SPS-Remote.
Wie man sehen kann bietet dieser Tragring schön viel Platz für 
rückseitige Bauteile.

Links der RS485 Transceiver, mittig der MSP430 mit 8MHz Resonator, unten 
der 8-polige JTAG Stecker, mittig der 6-polige RS485 Stecker (VCC, 2xA, 
2xB, GND), rechts 3,3V Spannungsregler.

Autor: Mark Zimmermann (noisy-tec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habt Ihr für die SPS Remote auch eine schöne Verkleidung für die Front 
entwickelt oder bleibt das so pur? Frage wegen der 
Frauen-Design-Akzeptanz.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:) Da soll eine Blindabdeckung passend ausgefräst werden.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

wie kann bei Euch die Slave-Adresse eingestellt werden? Ich habe da 
gesehen, dass das irgendwie aus dem Flash gelesen wird...

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

noch eine Frage: Wird die Adresse dezimal oder hexadezimal erwartet?

Thomas

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie kann bei Euch die Slave-Adresse eingestellt werden?
Bei der SPS-Remote wird sie per Menü eingestellt und in's Flash 
gespeichert.
Bei der AudioControl und dem Dimmer hat die Steuereinheit dann 
Dip-Schalter.
Bei Profibus muss beachtet werden das die Adresse nicht größer als 127 
werden darf!

>Wird die Adresse dezimal oder hexadezimal erwartet?
Wo ist der der Unterschied? :) Hex oder Dez. ist ja nur ne 
unterschiedliche Darstellung.

Autor: Johannes F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi jörg, im sps-forum hat mir einer geschrieben des es mit mikropascal 
und pic controller fertige kommunikationbausteine gibt, geschrieben in 
pascal für RS485 LCD anzeigen serielle schnittstellen und so. kannst ja 
mal schaun ob man davon etwas übernehmen kannnnnnn.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie sich das anhört geht's wohl nur darum das es bei PICs 
vorgefertigte Funktionen für UART und Standard-Displays gibt. Brauchen 
wir nicht :)

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang der aktuelle Stand.
Da einige Fragen zur Implementierung aufgetaucht sind, hier mal die 
etwas genauere Beschreibung des Code:

Globale Variablen:
char uart_buffer[MAX_BUFFER_SIZE];
Der UART Daten Buffer in den alle Daten die ankommen gespeichert werden.

unsigned int uart_byte_cnt;
Zähler für die Anzahl der Bytes die in uart_buffer[] eingelesen wurden.

unsigned int uart_transmit_cnt;
Zähler für die Anzahl der Bytes die bereits gesendet wurden. Ist nur 
wichtig wenn man die Interrupt Sende-Funktion benutzt.

unsigned char profibus_status;
Aktueller Status der Profibus Schnittstelle.

unsigned char slave_addr;
Wie der Name schon sagt.

unsigned char master_addr;
Könnte man wahrscheinlich auch weg machen, da wird eh immer nur die 
source_add reinkopiert.

unsigned char group;
Bisher auch unnötig da nicht benutzt.

unsigned char data_out_register[OUTPUT_DATA_SIZE];
Hier die Daten reinkopieren die zur SPS sollen (Daten Slave -> SPS).

unsigned char data_in_register [INPUT_DATA_SIZE];
Hier kommen die Daten der SPS rein (Daten SPS -> Slave).

unsigned char Input_Data_size;
Anzahl der Bytes die die SPS senden will.

unsigned char Output_Data_size;
Anzahl der Bytes die die SPS vom Slave erwartet.

Das Konzept der Input- und Output_Data_size muss evt. überdacht werden 
da die SPS wohl Modulabhängig auch mehrere "Blöcke" Ein-und 
Ausgangsdaten senden kann. Da wird aktuell dran geforscht.

unsigned char Vendor_Data_size;
Unbenutzt



Was ist nötig um das ganze zum laufen zu bekommen?
Zur Initialisierung benötigt der Slave erst mal eine Adresse. Sollte 
zwischen 1 und 126 liegen. Im Code kommt sie von der Funktion 
read_slave_addr();
Dann muss man die Zeitsteuerung rein bekommen. Im Code mit Timer A 
erledigt (unten mehr dazu). Grundsätzlich mal die Zeit Tsyn abwarten 
(Zeit ohne UART Kommunikation) und dann alles an Daten einlesen und 
profibus_RX() aufrufen. Die Funktion erledigt eigentlich alles 
automatisch.
Wichtige Stelle ist diese:
// Daten von Master einlesen
for (cnt = 0; cnt < INPUT_DATA_SIZE; cnt++)
{
  data_in_register[cnt] = uart_buffer[cnt + 7];
}

// Daten fuer Master in Buffer schreiben
for (cnt = 0; cnt < OUTPUT_DATA_SIZE; cnt++)
{
  uart_buffer[cnt + 7] = data_out_register[cnt];
}
Sollte selbsterklärend sein, oder? SPS Daten einlesen, Slave Daten raus.

Die Funktion profibus_send_CMD() macht alles selber, nur die Funktion 
profibus_TX() muss wieder an eure Hardware angepasst werden. Einfach die 
Anzahl length Bytes von *data auf den RS485 schicken, fertig.

Hardware abhängig ist also nur die UART Empfangs- und Sendefunktion so 
wie die Zeitsteurung. Die Auswertung der Daten sollte auf jedem 
Controller laufen. Für einen einfachen Taster oder Schalter/Relais Slave 
kommt man auch komplett ohne Interrupts aus.



Ein Wort zur Zeit-Steuerung:
1) WAIT_SYN: Warten auf Tsyn (Gewisse Zeit ohne UART Kommunikation).
2) Wenn Tsyn erreicht ist auf WAIT_DATA schalten
3) In der Zeit WAIT_DATA alles an UART Daten einlesen und auf GET_DATA 
gehen
4) GET_DATA hat ein Timeout. Wenn eine gewisse Zeit keine weiteren Daten 
über UART rein kommen wird profibus_RX() aufgerufen um die Daten 
auszuwerten
5) Beim senden wird auf SEND_DATA geschaltet
6) Sind alle Daten rausgeschickt, gehen wir wieder auf WAIT_SYN und das 
Spiel beginnt von vorn.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und noch die neue h-Datei.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

was machen die Zeilen:
RS485_TX_EN;
und
RS485_RX_EN;
wirklich?

Ich kann mir zwar vorstellen, was sie bewirken sollen. Aber da erfolgt 
ja keine Zuweisung und wie ein Funktionsaufruf sieht das auch nicht aus. 
Ich würde ja noch verstehen, wenn diese Flags (?) irgendwie gesetzt 
werden (z.B. =1 oder =true)...

Thomas

P.S. Ich kenne mich nicht so mit dem MSP430 aus...

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit wird der externe RS485 Transceiver von TX auf RX und umgedreht 
umgeschaltet.
//////////////////////////////////////////////////////////////////////////
/* RS485 Transceiver */
//////////////////////////////////////////////////////////////////////////
#define RS485_TX_EN           (P3OUT |= PIN6);
#define RS485_RX_EN           (P3OUT &=~PIN6);
//////////////////////////////////////////////////////////////////////////

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, das ging ja schnell. Danke.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

Was verbirgt sich hinter "SLAVE_DATA"?

(benutzt in:
profibus_send_CMD(SD2, SLAVE_DATA, 0, &uart_buffer[7], OUTPUT_DATA_SIZE);
)

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ein Function Code. Siehe (alte) h-Datei:
///////////////////////////////////////////////////////////////////////////
// Function Codes
///////////////////////////////////////////////////////////////////////////
#define REQ_FDL_STATUS        0x49  // SPS: Status Abfrage
#define FDL_STATUS_OK         0x00  // SLA: OK
//#define SEND_DATA
#define SEND_REQ_DATA         0x5D  // SPS: Ausgaenge setzen, Eingaenge lesen
#define SEND_REQ_DATA_T       0x7D  // SPS: Ausgaenge setzen, Eingaenge lesen (Toggle)
#define SEND_REQ_DATA_FIRST   0x6D  // SPS: Erste Anfrage

#define SLAVE_DATA            0x08  // SLA: Daten Eingaenge senden
///////////////////////////////////////////////////////////////////////////

In der aktuellen Version durch
#define DATA_LOW              0x08
ersetzt

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, dann passt die Quelle nicht ganz zum Header.  ;o)

Ich werd's mal ersetzen...

Danke.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>OK, dann passt die Quelle nicht ganz zum Header.  ;o)
Stimmt, mein Fehler. Gibt seit gestern aber eh wieder ne neue Version :) 
Werde ich im laufe der Woche reinstellen.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

ich bin gerade dabei, den Code auf einen AVR anzupassen und bin schon 
ziemlich weit. Einzig die praktische Prüfung steht noch aus. ;o)
Vielleicht sollten wir uns mal unterhalten, wie man den Code 
hardwareunabhängig macht und so auf verschiedener Hardware nutzen kann.

Gruß,
Jörg

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin an einer Implementierung für AVR interessiert, hätte auch die nötige 
Hardware (315-2DP) neben mir am Schreibtisch stehen. Müsste nur den AVR 
daran anschliessen, bzw. den RS485 Bus anbinden.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Vielleicht sollten wir uns mal unterhalten, wie man den Code
>hardwareunabhängig macht und so auf verschiedener Hardware nutzen kann.
Na ja, der Hauptteil (profibus_RX) ist ja schon unabhängig. Was stellst 
du dir da noch vor?

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Na ja, der Hauptteil (profibus_RX) ist ja schon unabhängig. Was stellst
>du dir da noch vor?

Ich habe die gesamte UART-Kommunikation und alles, was damit zu tun hat, 
ausgelagert. Auch gibt es die Timerfunktion nicht mehr. Das ist bei mir 
eine Funktion profibus_Statusmachine() und diese wird dann extern in 
einem Timer aufgerufen. So was meine ich.

Ich denke, man kann die Logik sehr schön von allen hardwarenahen Dingen 
trennen. Somit hätte man dann eine profibus.c/.h, die in verschiedenen 
Projekten verwendet werden kann und einfach nur Funktionen bereitstellt, 
die von extern aufgerufen werden können.

Jörg

P.S. Ich möchte im Moment nur den geänderten Code hier nicht posten, 
da der völlig ungetestet ist (Er lässt sich nur fehlerfrei kompilieren 
;o) ).

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Logische Auslagerungen könnte man natürlich machen, all zu viele 
Änderungen werden ich (zumindest beim aktuellen Projekt) vermutlich aber 
nicht machen können. Muss jetzt schon darauf achten das die 
Funktionsaufrufe bzw. Interrupts nicht zu lange dauern.

Aber am besten warten wir mal ab bis du fertig bist und reden dann 
weiter über das Thema :)

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt seit gestern aber eh wieder ne neue Version :)

Kannst Du sie hier bitte reinstellen. Dann kann ich meine modifizierte 
Variante anpassen. Die könnte ich Dir dann bspw. auch zumailen, damit 
man ab dann evtl. eine gemeinsame Basis hat.

Jörg

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War die letzten Tage etwas kränklich, von daher hat es noch nicht 
geklappt. Ich denke mal heute abend oder morgen stell ich die neue 
Version rein.... Hauptänderung waren aber eh nur Interrupt Geschichten. 
Für AVR Umbastler wohl nicht sooo interessant.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, die aktuelle Version.

Änderungen:
- RX Interrupt optimiert.
- Slave Adresse wird vor Checksummenberechnung überprüft
- TX Interrupt wartet nicht mehr bis letztes Byte gesendet wurde
- Umschaltung von TX auf RX (RS485 Transceiver) jetzt per Timer 
(PROFIBUS_SEND_DATA)
- Timer Interrupt Stop Timer für die Zeit der Verarbeitung
- Interrupt nesting im Timer Interrupt möglich

Alle Änderungen verringern die Verarbeitungszeit für die Profibus 
Schnittstelle und geben anderen Applikationen mehr und schnelleren 
Zugriff auf die CPU.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und die h....

Autor: Viviane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

unterstützt auch das DPV0 die erweiterte Diagnose des Typs "device 
related" - "Status Model" - "Status Message" ?

Wenn ja wie ??

Danke im Vorraus.

Gruß,
Viviane

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Diagnose kann gesendet werden indem man bei der I/O Datenübertragung 
anstatt Data-low
profibus_send_CMD(SD2, DATA_LOW, 0, &uart_buffer[7], OUTPUT_DATA_SIZE);
Data-high sendet (Define: DIAGNOSE):
profibus_send_CMD(SD2, DIAGNOSE, 0, &uart_buffer[7], OUTPUT_DATA_SIZE);

Das führt dazu das die SPS über den SAP 62->60 die Diagnose Daten 
abholt. Im Status1 Byte muss dann das Bit 0x08 (EXT_DIAG_) gesetzt 
werden
uart_buffer[9]  = EXT_DIAG_;                    // Status 1
uart_buffer[10] = STATUS_2_DEFAULT;             // Status 2
uart_buffer[11] = DIAG_SIZE_OK;                 // Status 3
uart_buffer[12] = master_addr - SAP_OFFSET;     // Adresse Master
uart_buffer[13] = IDENT_HIGH_BYTE;              // Ident high
uart_buffer[14] = IDENT_LOW_BYTE;               // Ident low
uart_buffer[15] = 0x05;     // Geraetebezogene Diagnose (Anzahl Bytes)
uart_buffer[16] = 0x00;     // Geraetebezogene Diagnose Byte 1
uart_buffer[17] = 0x20;
uart_buffer[18] = 0x20;
uart_buffer[19] = 0x00;
Dann kann man mehr oder weniger beliebig viele Gerätebezogene Diagnose 
Bytes senden. Was die einzelnen Bits bedeuten muss in der GSD Datei 
beschrieben werden.

Autor: Tino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

ich bin gerade am testen mit einem experimentellen Aufbau.

Nun weiß ich aber nicht so recht, wie denn die Peripherie initialisiert 
werden muß (Basic Clock Modul, TimerA, UART, Interrupts) ?

Vielen Dank im Vorraus.

Gruß Tino

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Basic Clock Modul
Bei mir ist SMCLK = 4MHz und MCLK = 8MHz
Im einfachsten Fall mit internem DCO wäre das:
  // DCO auf 8MHz stellen
  BCSCTL1 = CALBC1_8MHZ;
  DCOCTL = CALDCO_8MHZ;

  BCSCTL2 = DIVS_1;  // SMCLK = DCO/2 = 4MHz, MCLK = DCO = 8MHz

>TimerA
Müsste im Source Code schon alles drin sein (Siehe init_Profibus())

>UART
  UCA0CTL0 = UCPEN + UCPAR;     // Parity, Even Parity
  UCA0CTL1 = UCSSEL_2;          // Clock = SMCLK = 4MHz
//  UCA0BR0  = 0xD0;              // Einstellung fuer 19200
//  UCA0BR1  = 0x00;              // Einstellung fuer 19200
//  UCA0MCTL = UCBRS_3;           // Modulation für Korrektur fuer 19200
  UCA0BR0  = 0x2A;              // Einstellung fuer 93750
  UCA0BR1  = 0x00;              // Einstellung fuer 93750
  UCA0MCTL = UCBRS_5;           // Modulation für Korrektur fuer 93750

>Interrupts
IE2 |= UCA0RXIE;                    // Interrupt UART0 an für RX  

Autor: SPS - User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

wäre es eventuell möglich, dass Du mal den SPS - Code (auch wenn 
offtoppic) hier posten könntest, mit dem Du die gesamte Kommunikatin 
über den Profibus machst. Die Parametrierung ist mir klar.
Geht sich um den AWL Part (Receive-Signal - Datenbank auslesen - 
weiterverarbeiten und wie die Daten dann von der Datenbank aus weiter 
verarbeitet werden.

Gruß

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf die SPS Sachen hab ich keinen Zugriff, da müsste ich erst die 
anderen Fragen...

Autor: mhedder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@SPS:
Den AWL-Code für die Profibus-Kommunikation kann ich gern bei passender 
Gelegenheit mal rauskopieren und hier posten. Ich denke allerdings 
nicht, dass der wirklich weiter hilft, da er auf die speziellen 
Anforderungen zugeschnitten ist, und unzählige andere FCs aufruft, die 
z.B. für die Normierung, IR-Code-Verarbeitung, usw. zuständig sind.

Prinzipiell besteht so ein SPS-Remote für die SPS aus 35Byte E/A. Diese 
Daten werden in jedem Zyklus aus einem DB auf die Ausgangsbytes 
kopiert...

Kannst Du evtl. deine Frage bzgl. des SPS-Programms ein wenig 
konkretisieren. Vieleicht lässt sich so besser helfen.

Gruß Marc

Autor: SPS - User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@mhedder:

ich habe folgendes Problem, ich arbeite derzeit mit einer Vipa 313-CPU 
mit RS485 Schnittstelle. Es gibt einige viele tolle Beispiele, aber 
alle, die ich bisher gesehen habe, waren so der Art, ich schick ein paar 
Zeichen zur SPS, die schickt die dann wieder zurück oder schreibt die in 
eine DB. Okay, das hab ich auch schon selbst realisiert.
Was mich derzeit aber interessiert, ist eher folgender Fall:
- ich schicke Daten an die SPS
- Daten werden in einer DB abgelegt - okay bis hier ist alles klar
- danach sollen sie ja so ganz toll ausgewertet werden. nur genau beim 
Auswerten hab ich das Problem.
Zugriff auf einzelne Elemente aus einer Datenbank ist da auch nicht das 
Problem, aber bei der Fehlerbehandlung und der Aufbau der Schleifen 
hakts bei mir. Ich bau mir da meistens irgendwie eine Endlosschleife 
oder so... .
Daher würde mich der Code mal interessieren, mit dem ihr die Daten 
auswertet, um vielleicht so auf meine Probleme aufmerksam zu werden.

Gruß

Autor: mhedder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit DB meinst Du wohl "Datenbank". Bei unserem Projekt, wird die 
gesammte Datenhaltung in "Datenbausteinen" direkt in der SPS gemacht. 
Bei deinem Problem kann ich Dir da nicht wirklich weiterhelfen...
Mir scheint, Du solltest Dich erstmal richtig in die Materie 
SPS-Programmierung einlesen.
Für SPS-Spezifische fragen ist folgendes Forum im Übrigen eine gute 
Adresse:

http://www.sps-forum.de

Gruß Marc

Autor: Frickel Heini (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPS DB = Datenbaustein ;)

Autor: SPS - User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@mhedder:
sorry, aber ich weiß schon, wovon ich da rede und ich hab mich auch mehr 
als genug belesen ... .

Also, das alle Daten in Datenbausteinen [DB]vorgehalten werden, ist mir 
klar.
Also nochmal:
- Daten werden vom PC via RS485 an die SPS geschickt
- SPS speichert die gesendeten Daten in einer "Empfangs"DB
- Auslösen eines Interrupts, oder setzen eines Merkers - Daten vorhanden
- danach folgt ein Algorithmus, der eben die empfangen Daten auswerten 
soll
- ich weiß, dass ich folgende Daten anschl. habe:
  - ID des Senders
  - ID des Empfängers
  - Datenblock
Wie wertet ihr diesen Datenblock in der o.g. DB aus?
Dazu fehlt mir einfach mal ein Beispiel da ich daran meistens ziemliche 
Probleme bekomme.

Gruß

Autor: mhedder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

irgendwie verstehe ich Dein Problem nicht wirklich. Also, Du hast die 
Daten in einem DB in der SPS stehen. Dann ist es doch ein Leichtes auf 
die Daten mit einem neuen FC oder FB zuzugreifen und die Daten 
auszuwerten...?

z.B.:

u db1.dbx3.0
= a 0.0 // Wenn Bit 3.0 in DB1 gleich eins, dann A 0.0 High


Wir reden aber immer von Datenbausteinen, oder?
Einmal schreibst Du

"Also, das alle Daten in Datenbausteinen [DB]vorgehalten werden, ist mir 
klar."

und ein anderes Mal

"SPS speichert die gesendeten Daten in einer "Empfangs"DB"

Gruß Marc

Autor: Michael Hoerner (michael-f)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich möchte auch einen MSP verwenden um den SPC4 anzusteuern. Hast du die 
Funktionalität für den Zugriff auf die 10 Addressbits selbst 
programmiert oder hast du hierfür eine Bibliothek ? Ist dein MSP430F2252 
für die anbindung eines externen Datenbusses besonders geeignet (Adress 
und Datenbus) ?

Gruß
Michael

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast du was falsch verstanden. Wir machen ALLES mit dem MSP. Ein SPC4 
o.ä. ist nicht notwendig. Nur ein RS485 Baustein :)
Funktioniert also mit allen MSPs (oder anderen Controllern) die eine 
UART Schnittstelle haben. Der MSP430F2252 ist im prinzip schon etwas 
oversized. Für einfache I/O Sachen geht auch was kleineres.


In den nächsten Tagen wird es übrigens noch ein kleines Update der SW 
geben.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die neue Version...

Änderungen:
- Mit defines werden jetzt die diversen Arrays automatisch angelegt und 
initialisiert.
- Zwei neue Arrays: Vendor_Data[] und Diag_Data[]
- Neues Flag: diagnose_status
- read_slave_addr() in get_Address() umbenannt

Über "diagnose_status = TRUE" werden Diagnose Daten automatisch 
übertragen.
Der Datentausch wird durch die defines "automatisiert". Wenn keine Daten 
gesendet, sondern nur empfangen werden, wird automatisch nur noch eine 
Kurzquittung anstatt SD2 Kommando gesendet.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal eine Frage eines nur bedingt mit der Materie vertrauten:

Das Ganze funktioniert doch nur so lange prima, wie allen Nodes die 
Geschwindigkeit des MSP, bzw. der geringeren Busgeschwindigkeit 
ausreicht (?) oder kann man so einen low-speed-Slave auch zusammen mit 
anderen Full-Speed-Slaves in einem 12 MBit Netz einsetzen ?

Stefan

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alle müssen die gleiche Busgeschwindigkeit haben, sonst geht nix.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab' ich mir gedacht - wäre ja auch zu genial gewesen.

Vielen Dank und viel Erfolg !

Autor: Alberto C. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joerg-S an Co
 Super arbeit geleistet. Da habe ich ein par Fragen dazu.

1º
   Könnten Sie mir sagen auf wieviele ms der interrupt eingestellt ist?

2º Ist es möglich der code mit der function main() uploaden, es wäre 
nähmlich sehr hilfreich.

Alberto (Spain)

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Könnten Sie mir sagen auf wieviele ms der interrupt eingestellt ist?
Timer A?
Das ist variable, je nachdem in welchem Zustand der Profibus gerade ist.

Relevanter Code:
//////////////////////////////////////////////////////////////////////////
#define TIMEOUT_MAX_SYN_TIME  33 * DELAY_TBIT // 33 TBit = TSYN
#define TIMEOUT_MAX_RX_TIME   15 * DELAY_TBIT
#define TIMEOUT_MAX_TX_TIME   15 * DELAY_TBIT
#define TIMEOUT_MAX_SDR_TIME  15 * DELAY_TBIT // 15 Tbit = TSDR
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#define TA_SMCLK_500KHZ       TACTL = MC1 + TASSEL1 + ID_3;
#define TA_RUN                TACTL |= MC1
#define TA_STOP               TACTL &= ~MC1

#define DELAY_TBIT            5.33    // UART @ 93750
//////////////////////////////////////////////////////////////////////////


> Ist es möglich der code mit der function main() uploaden, es wäre
> nähmlich sehr hilfreich.
Das das sonderlich hilfreich ist, glaube ich nicht :)
Gibt es konkrete Fragen?
//////////////////////////////////////////////////////////////////////////
void main (void)
{

  ///////////////////////////////////////
  watchdog_aus          ();
  init_MCU              ();
  switch_SMCLK_XT1_8MHz ();
  init_UART0            ();
  init_Profibus         ();
  interrupt_settings    ();
  ///////////////////////////////////////

  while(1)
  {
    // Hier Code fuer Hauptprogramm
  }
}
///////////////////////////////////////////////////////////////////////// 

Autor: Alberto C. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg

Ok, es ist einfacher als ich dachte.
In dem fall 5.33 sind das 5.33 ms?

mfg.
  Alberto

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In dem fall 5.33 sind das 5.33 ms?
Nein, das ist die Anzahl der Takte des Timer A für ein Bit.

Timer A = 500kHz -> 2µs/Takt
Profibus = 93750 Baud -> 10,66µs/Bit

10,66µs/2µs = 5,33 Takte/Bit

Autor: Alberto C. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jörg,
vielen dank für die erklärung. Ich versuchs mal
zu einem PIC.

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier war mal die rede von einer Version für einen AVR, ist darraus was 
geworden?

Welche maximale Profibus Baudrate wäre denn mit einem MSP430F2252 
möglich?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Welche maximale Profibus Baudrate wäre denn mit einem MSP430F2252
>möglich?
Wenn Marc noch ne 2. SPS auftreiben kann, wollte ich ein Versuch mit 
500k und 1,5M starten.
500k sollte sicherlich noch gehen, 1,5M würde schon ausserhalb der Spec 
vom 2252 liegen, es gibt aber MSPs der F2xxer Serie die das laut 
Datenblatt noch können.

Autor: Allgegenwärtig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interessant wäre eine Portierung auch auf einen ARM ala STM32 oder LPC2

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allgegenwärtig schrieb:
> Interessant wäre eine Portierung auch auf einen ARM ala STM32 oder LPC2
Auf meinem Schreibtisch liegt schon ne Platine mit ARM Cortex M3 
(LPC1768) :)

Autor: Allgegenwärtig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, ein Sample ;)

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jain, hat mit einem Sample angefangen, den 1768 hab ich aber normal 
gekauft ;)
Wird aber noch etwas dauern bis da Profibus läuft. Bis jetzt blinkt nur 
ne LED, als nächstes kommt erst mal ein Display dran, danach dann 
UART...

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg S. schrieb:
> Wenn Marc noch ne 2. SPS auftreiben kann, wollte ich ein Versuch mit
> 500k und 1,5M starten.
> 500k sollte sicherlich noch gehen, 1,5M würde schon ausserhalb der Spec
> vom 2252 liegen, es gibt aber MSPs der F2xxer Serie die das laut
> Datenblatt noch können.

wo bekomme Ich dennam besten die MSP Microcontroller?

Bei welchem würden denn laut Datenblatt 1,5 gehen, hab mal gestöbert, 
aber Ich finde bei allen die gleiche Uart Frequenz!

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wo bekomme Ich denn am besten die MSP Microcontroller?
HBE (www.hbe-shop.de) hat eigentlich alle im Programm.

>Bei welchem würden denn laut Datenblatt 1,5 gehen, hab mal gestöbert,
>aber Ich finde bei allen die gleiche Uart Frequenz!
Die F21x2 gehen z.B. bis 2MHz BitClk.

Autor: KiliPet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Wie ist denn die Einschätzung das auf einem ATtiny2313 zum Laufen zu 
bekommen?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab eben mal schnell mein Projekt total abgespeckt. Es kommen 2,3 kByte 
Flash und 150 Byte RAM raus (bei MSP430 / Code Optimierung "low").
Beim Profibus könnte man aber noch einiges raus werfen (z.B. SAP 62 -> 
DSAP 62) und dadurch noch etlichen Speicher sparen.

Wenn man also nur ein paar Byte direkt von einem Port auslesen oder 
setzen will, könnte man es mit eisernem Willen vielleicht schon mit 2 
kByte Flash und 128 Byte RAM schaffen. Wäre hart an der Grenze, aber 
wohl noch im Bereich des möglichen.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn wir schon dabei sind....
Der 6-fach Dimmer befindet sich gerade in der Testphase :)

Autor: Christian Armbruster (noeppkes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joerg,

sieht wirklich Klasse aus was du da machst.
Habe auch eine SPS im Keller hängen zur Haussteuerung.
Wäre sehr an dem 6-fach Dimmer interessiert.

Würdest du die Daten herausgeben (Source-Code, Layout etc.) ?
Ich benutze Eagle. Sieht auch sehr nach Eagle aus.

noeppkes ...

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beschreibung von dem ganzen Kram ist schon in Arbeit.
Evt. könnte ich am Wochenende die Homepage soweit fertig machen das 
schon ein paar Schaltpläne usw. mit drin sind...

Und ja, es ist mit Eagle gemacht :)

Autor: Christian Armbruster (noeppkes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joerg.

Freue mich schon drauf.
Hinterlasse hier einfach eine Nachricht.

Bis dann ...
noeppkes ...

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, hier findet sich jetzt die Schaltungsbeschreibung, Schaltplan und 
das Eagle Projekt:
http://www.see-solutions.de/projekte/projekte.htm (2007_02)

Weiss noch nicht genau wie das dann mit der Beschreibung der SPS Seite 
werden soll. Evt. gibt es dann mal eine separate Homepage für die ganze 
Sache...

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

Als eine PROFIBUS slave sollte es unter beliebige master (SPS oder 
anders) arbeiten.

Ich versuche diese mit ein AVR AtMega16 zu machen. Es springt doch eine 
meldung herüber und die nächste wird dann im Profibus_RX bearbeitet!? 
Also jede zweite meldung ist verloren.

Dann muss immer als 3 oder so in master als Retry Count angegeben. Dann 
wird die fehler behebt bei die nächste (retry) meldung.

Ich hat die Timer_ISR unter case PROFIBUS_GET_DATA ein kurzes ein/aus 
mit der RS485 treiber gemacht (7,5us). Dann kann ich es in ProfiTrace2 
oscilloscope als ein "blip" sehen. Und wenn eine meldung bearbeitet sind 
wird die nächste es nicht. Aber immer die meldung danach.

Hast du mit ProfiTrace oder ähnliches überprüft dass deine slave keine 
meldungen übersehen?

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hurra Propeller!! Nun laüft es.

Und es springt keine meldungen herüber. Dass war meine fehler wenn zum 
AVR umschreiben.

In SAP_CHK_CFG sollte du erst diese kode einsetzen:
Output_Data_size=0;
Input_Data_size=0;
Danach alle "=" mit "+=" ersätzen. Dann wird es mehrere module 
akzeptieren. Wenn du in konfigurator 10 byte input angibt als ein modul 
8byte und ein modul 2byte, dann bekommst du nur 2 byte! Mit diese 
korrektur kannst du mehrere module korrekt einsetzen. Und diese slave 
will sich zum master konfiguration anpassen, nicht nur wie üblich 
überprüfen.

Es lüft nun mit 187.5Kbit/s und Tsdr 42Tbit. Wird mit ProfiTrace2 
ausgemessen.

Mit 2 kleine änderungen ist auch Set Slave Address OK.

Wie geht es dann mit ihre hausautomations projekt Jörg?

Autor: KiliPet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Einar,
ich würde auch gerne mal mit meinem Atmega16 und Profibus 
herumexperimentieren. Könntest Du vielleicht den Code deiner Portierung 
zum AVR zur Verfügung stellen?

Dann muss ich das Rad nicht neu erfinden.

Danke im Voraus
Kilian

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einar S. schrieb:
> In SAP_CHK_CFG sollte du erst diese kode einsetzen:
>
> Output_Data_size=0;
> Input_Data_size=0;
> 
Das wird ja schon in der init_Profibus() gemacht.

Einar S. schrieb:
> Danach alle "=" mit "+=" ersätzen. Dann wird es mehrere module
> akzeptieren. Wenn du in konfigurator 10 byte input angibt als ein modul
> 8byte und ein modul 2byte, dann bekommst du nur 2 byte! Mit diese
> korrektur kannst du mehrere module korrekt einsetzen.
Das mit den Modulen ist bekannt. Hab ich weiter oben schon erwähnt. Für 
Konfigurationen mit mehreren Modulen sind die auskommentierten Arrays
Input_Data_size_Module[INPUT_MODULE_CNT]
und
Output_Data_size_Module[OUTPUT_MODULE_CNT]
vorgesehen. Da hab ich aber noch nicht weiter dran gearbeitet. Das mit 
+= ist natürlich erst mal eine einfache Lösung :)

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einar S. schrieb:
>Wie geht es dann mit ihre hausautomations projekt Jörg?
Grundätzlich läuft's. Ein paar kleine Probleme und Änderungen müssen 
noch bearbeitet werden :)

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss es doch erst ein bisschen durchsehen, so bitte geduld Kilian.
Und nur wenn Jörg gibt sein OK.

@Jörg: Ist es OK wenn ich die modifizierte kode auch für andere zu 
verfügung stellt? Es is ja nahezu 100% deine arbeit.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@Jörg: Ist es OK wenn ich die modifizierte kode auch für andere zu
>verfügung stellt? Es is ja nahezu 100% deine arbeit.
Hätte ich kein Problem mit.

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
KiliPet schrieb:
> Dann muss ich das Rad nicht neu erfinden.

Hier isses.
Das rundlauf diese rad konnte besser sein. ;-)

Bei mir geht es ziemlich gut, aber es ist bekannte fehler darin.

Für meine erste projekt LEDlicht steuerung/dimmer ist es scon gut genug. 
Verbesserungen will ich trotzdem machen.

Autor: Jochen Kühner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einar S. schrieb:
> Hier isses.
> Das rundlauf diese rad konnte besser sein. ;-)
>
> Bei mir geht es ziemlich gut, aber es ist bekannte fehler darin.
>
> Für meine erste projekt LEDlicht steuerung/dimmer ist es scon gut genug.
> Verbesserungen will ich trotzdem machen.

Kann man auch einen Schaltplan zu deinem entwurf bekommen?

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die PROFIBUS treibern von eine slave modul ausgeschlachtet.

Meistens ist die alle gleich. Und in das buch "The New Rapid Way to 
Profibus DP" (Manfred Popp) ist auch shaltplan zu finden.

Oder 75176 datenblatt suchen.

Autor: Jochen Kühner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einar S. schrieb:
> Ich habe die PROFIBUS treibern von eine slave modul ausgeschlachtet.
>
> Meistens ist die alle gleich. Und in das buch "The New Rapid Way to
> Profibus DP" (Manfred Popp) ist auch shaltplan zu finden.
>
> Oder 75176 datenblatt suchen.

Hab leider dieses Buch nicht...

Und in dem Datenblatt finde Ich kein Schaltplan mit AVR...

geht auch ein Max3485 als PB Treiber??

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jochen Kühner schrieb:

> Und in dem Datenblatt finde Ich kein Schaltplan mit AVR...

Findet du auch nicht in buch.
Diese kannst du in Profibus.c lesen:
"Pins used: USART RX / TX, Portd:2 controls TX enable."
Besser kann ich nicht tun. Ich habe selber keine schaltplan.

Diese DP-slave ist keine DIY DP-slave.
Es ist auch keine komplette DP-Slave, aber eine basis für DP funktionen 
herumzuspielen. Man sollte PROFIBUS und AVR ziemlich gut verstehen um 
von hier weiter zu kommen. (Gilt mindestens für meine AVR anpassung. Wie 
es mit Jörg's MSP430 ist, weiss ich nicht.)

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>geht auch ein Max3485 als PB Treiber??
Es sollte jeder 485 Treiber gehen.

Autor: Soares (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hello. i try the code profibus.c and the profibus.h that u gave but when 
i run apper this:

error: `FALSE' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:51: 
error: (Each undeclared identifier is reported only once
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:51: 
error: for each function it appears in.)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:91: 
error: `TACTL' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:91: 
error: `MC1' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:91: 
error: `TASSEL1' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:91: 
error: `ID_3' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:92: 
error: `TAR' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:93: 
error: `TACCR0' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: At 
top level:
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:101 
:  error: function name not found in vector #pragma
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: In 
function `USCIAB0RX_ISR':
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:105 
:  error: `UCA0RXBUF' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:123 
:  error: `TAR' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: In 
function `profibus_RX':
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:146 
:  error: `FALSE' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:166 
:  error: `TRUE' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:269 
:  error: `LED_ERROR_AN' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:271 
:  error: `LED_ERROR_AUS' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:367 
:  warning: comparison is always false due to limited range of data type
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: In 
function `profibus_TX':
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:712 
:  error: `RS485_TX_EN' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:714 
:  error: `TACCR0' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:720 
:  error: `IFG2' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:720 
:  error: `UCA0TXIFG' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:721 
:  error: `IE2' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:721 
:  error: `UCA0TXIE' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: In 
function `addmatch':
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:752 
:  error: `FALSE' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:754 
:  error: `TRUE' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: At 
top level:
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:760 
:  error: function name not found in vector #pragma
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: In 
function `USCIAB0TX_ISR':
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:766 
:  error: `UCA0TXBUF' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:769 
:  error: `IE2' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:769 
:  error: `UCA0TXIE' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:772 
:  error: `TAR' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: At 
top level:
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:777 
:  error: function name not found in vector #pragma
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c: In 
function `TIMERA0_ISR':
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:783 
:  error: `TACTL' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:783 
:  error: `MC1' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:789 
:  error: `TACCR0' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:813 
:  error: `RS485_RX_EN' undeclared (first use in this function)
Projecto\Firmware\Firware\SPC3_app_example\Profibus_Final\profibus.c:825 
:  error: `TAR' undeclared (first use in this function)

Why apper that? can u help me? please

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Why apper that? can u help me? please
What Compiler are you using?
It looks like you do not include the Header Files for the MSP430 
specific Defines.
Other Defines like "LED_ERROR_AN" or "RS485_TX_EN" are Defines for some 
Port-Pin Switching. They have to be created by you.

Has the "SPC3" Name to do anything with your Project? Because this 
Source Code isn't for any Profibus-ASIC like the SPC!

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In eigener Sache:

Das Profibus Handbuch von Max Felser habe ich mal auf meine Homepage 
gestellt, da es ja nicht mehr im web verfügbar ist:
http://www.see-solutions.de/sonstiges/sonstiges.ht...

In den nächsten Woche gibt's auch wieder ein kleines Update. Da ist das 
dann mit den Modulen für die I/O Datengröße besser gelöst.

Autor: Soares (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im using mplap. I trying to developing a module with VPC3+S using the 
SPI interface. Can you help me ?please

Autor: Soares (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I forgot. my email is soaresandre@live.com We can talk by email if you 
want.

With regards

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soares schrieb:
> Im using mplap. I trying to developing a module with VPC3+S using the
> SPI interface. Can you help me ?please
Sorry, i don't know nothing about mplap and nothing about the VPC3 Chip.


Summary:
This Project implements a Profibus Client ONLY WITH SOFTWARE to a MSP430 
Microcontroller. There is no need for a special Profibus Chip, because 
this things are done within the Software on the µC!
On the Hardware-Side, you need a µC with UART and a RS485 Transceiver 
Chip, that's all :)

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Neue Version.

Änderungen:
diagnose_status wird nicht mehr als Flag benutzt, sondern jetzt direkt 
als Status Byte 1 in der Diagnose verwendet. Daher Umbenennung in 
diagnose_status_1.
Der Ablauf der Diagnose wurde ebenfalls überarbeitet, da ein Bug dazu 
führte das die falsche Anzahl der Diagnose Bytes gesendet wurde.
Die Software benutzt zur Zeit die Gerätebezogene Diagnose. Die weiteren 
zwei Diagnosemöglichkeiten wurden noch nicht getestet.
Das Define DIAGNOSE wurde in DATA_HIGH unbenannt, um konform zur Felser 
Dokumentation zu sein.
Hinweis zum Ablauf: Wenn man Diagnosedaten überträgt, löscht die SPS den 
Diagnosestatus erst wenn bei gesetztem Diagnosebit (diagnose_status_1 & 
EXT_DIAG_) leere Diagnosedaten übertragen wurden. Löscht man EXT_DIAG_ 
zusammen mit den Diagnosedaten, so erkennt die SPS den gelöschten 
Diagnose Status nicht.


Beim "Parameter Request" ist die Bezeichnung User Parameter richtiger. 
Daher wird das Define VENDOR_DATA_SIZE umbenannt in USER_PARA_SIZE.
Achtung: Der Name VENDOR_DATA_SIZE wird weiterhin verwendet (Bei Config 
Request).


Wie bereits angekündigt wird die Input/Output Datengröße neu ermittelt. 
Dazu wird ein neues, 2-Dimensionales, Array Module_Data_size[][] 
verwendet.
Die SPS kann nicht nur eine einzige Eingangs- und Ausgangsgröße 
festlegen, sondern auch verschiedene Module. Vor allem beim "speziellem 
Format" spielt das eine Rolle.
Mit MODULE_CNT wird die Anzahl der Module festgelegt. In den zwei Byte 
pro Modul im Array wird die Anzahl der Eingangs- und Ausgangsbytes 
gespeichert.
Bei einem Fehler wird automatisch das entsprechende Flag (CFG_FAULT_) in 
der Diagnose gesetzt.
Der gesamte Abschnitt "Check Config Request" wurde diesbezüglich 
überarbeitet.

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einar S. schrieb:
> KiliPet schrieb:
>> Dann muss ich das Rad nicht neu erfinden.
>
> Hier isses.
> Das rundlauf diese rad konnte besser sein. ;-)
>
> Bei mir geht es ziemlich gut, aber es ist bekannte fehler darin.
>
> Für meine erste projekt LEDlicht steuerung/dimmer ist es scon gut genug.
> Verbesserungen will ich trotzdem machen.

Ich habe nun auch meine Profibus Platine fertig, habe jedoch statts 
einem 12mHz Quarz ein 16MHz quarz verwendet.

Sehe Ich das richtig, das Ich in der profibus.h die F_CPU auf 16000000 
anpassen muss, und noch die DELAY_TBIT  auf 85 erhöhen, das wars dann 
schon??

Und wenn Ichs mit 1,5 Mbit testen will, muss Ich dann auch nur die 
DELAY_TBIT anpassen (um faktor 8 verkleinern?)

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, Ich hab gesehen, Ich muss auch noch die werte bei
#define UART_BAUD_187500 anpassen.

Aber wie kommt man bei 12MHz Quarz auf 7 für #define UART_BAUD_187500 
7
(Wert fürs Register UBBRL)

Wenn Ich da die Formeln aus dem Microcontroller Wiki nehm, kommt bei mir 
bei 12MHz 3 raus!

Autor: Jochen Kuehner (jogibear9988)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die beiden vorherigen Fragen haben sich soweit erledigt, habe jetzt auch 
ein 12MHz Quarz eingelötet, da sonst für die Teilerberechnungen ja 
unschöne Werte rauskommen. Wenns mit dem 12MHz mal läuft werd Ich ja 
sehen ob Ich das 16MHz noch brauche oder nicht.

Hab nur das Problem Ich kriegs nicht zum laufen. Hab mir mal einen 
Blinker ins Hauptprogramm eingebaut, der geht, aber sonst läufts nicht.


In profibus_RX hab Ich mal einen meiner Ausgänge angesteuert, da läufts 
anscheinend rein, aber dann springt er im select zum case default.

Und wenn Ich das ganze ein paar minuten laufen lasse, dann hängt 
plötzlich der PD2 Ausgang (also das Umschalten von Recieve auf Send), 
und dann geht der ganze Profibus nicht mehr (da auch TX die ganze Zeit 
bei 5V ist!)

Hab mal meinen Plan angehängt, viel. ist ja auch da noch was falsch!

Mfg.

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit 16MHz muss du 500Kbit/s läufen. Und dann wird die PROFIBUS timing 
ein problem. Mindestens mit die heutige erkennung von ende der 
einkommende meldung. Es wird erkannt als die antwort ausgehen sollte.

Ihr plan ist OK. Ich habe galvanische trennung zwischen MCU und RS485. 
Aber wenn deine testbus nur am labortisch ist sollte das kein problem 
sein.

Die steuerungsaufgaben sollte in doit() sein. Und es sollte nimmer die 
interrupt blockieren.

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nun ein 12Mhz eingelötet, zur Problemanalyse. Auch die 
Busgeschwindigkeit habe Ich auf 187500 eingestellt. Der Profibus 
funktioniert also noch nicht.

Ich habe zur Kontrolle mal die empfangen daten ins Eeprom geschrieben, 
aber im uart_buffer[0] steht nie ein SD1, SD2, SD3 oder SD4. Es wird 
dort immer in den default case gesprungen. d.h. ich empfange daten, aber 
nicht die richtigen.
Hast du da noch irgendwelche Ideen?

Was für einen Optokoppler hast du denn drin, bzw würdest du empfehlen?

Danke schonmals.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A und B vielleicht vertauscht?

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du die quellcode wie es ist versucht? Bei mir läuft es gut.
Erst die originalcode nützen. Wenn es läuft ist deine hardware in 
ordnung.

Von störungen weghalten und es sollte ausser galvanische trennung OK 
sein.

Hast du die fuse für externe quarz einprogrammiert? Wenn nicht lauft es 
etwa 8MHz von die interne PLL. Und wenn du eine neue ATmega kriegst ist 
diese fuse nicht für externe quarz programmiert.

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich Idiot!

Es war das vertauschen von A und B!

Danke schon mal an Einar und Jörg für die Hilfe.

Hab jetzt noch sporadisch Busausfälle, hast du das auch Einar?

Werd mal morgen mit dem Profibusanalyser drangehen, um zu sehen ob er im 
nicht gestörten Zustand schon oft in die Telegrammwiederholung kommt.

Als nächstes werd Ich dann noch versuchen AutoBau Erkennung zu 
implementieren. Müsste doch möglich sein, wenn man einen Zähler bei den 
empfangen falschen Telegrammen einbaut, so das wenn dieser zu groß wird, 
man die Baudrate ändert, bis es funktioniert?

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einar S. schrieb:
> Von störungen weghalten und es sollte ausser galvanische trennung OK
> sein.

Ist den eine Galvanische Trennung bei PB-Vorschrift? Machst du in deinen 
PB Platinen eine galvaische Trennung Jörg?

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch Infos:

Wenn Ich das RetryLimit hochsetze, bekommt die CPU die Störung nicht 
mehr mit. Muss morgen mal mit dem Busanalyser sehen, ob der Slave gar 
nicht Antwortet, oder was falsches schickt...

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und schon wieder Ich.

@Eimar:

Sollte in deinem AVR Projekt nicht auch unsigned char data_in_register 
[INPUT_DATA_SIZE]; volatile sein?

Wenn es gedacht Ist die Verabreitung in doit zu machen, gehts bei mir 
ohne nicht!

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und nochmals Ich:

Ich hab jetzt das Retry_Limit auf 5, und da läuft es eigendlich stabil. 
Doch wenn ich dann z.B. den baugruppenzustand in Step7 aufmache, und 
somit mein Schnittstellenadapter ein Haufen Informationen vom Bus zieht, 
habe Ich einen Busausfall von meinem Teilnehmer. werd das auch mal 
morgen weiter Analysieren, aber viel. hat ja da schon jemand eine Idee!

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jochen Kuehner schrieb:
> Machst du in deinen PB Platinen eine galvaische Trennung Jörg?
Nein.

> Doch wenn ich dann z.B. den baugruppenzustand in Step7 aufmache, und
> somit mein Schnittstellenadapter ein Haufen Informationen vom Bus zieht,
> habe Ich einen Busausfall von meinem Teilnehmer.
Das Verhalten kenne ich bei der MSP Software als damals noch der Buffer 
-Überlauf durch zu viele Eingangsdaten noch nicht abgefangen wurde.

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg S. schrieb:
> -Überlauf durch zu viele Eingangsdaten noch nicht abgefangen wurde.
Das ist aber in dem AVR Code von Eimar schon drinn...

Um erstmal HW Probleme auszuschließen, was macht Ihr denn mit dem 
Schirm?

Autor: Jochen Kuehner (jogibear9988)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So....

hab jetzt was Rausgefunden. Sowie es aussieht braucht der Teilnehmer zu 
lange wenn Ich große Telegramme auf dem Bus Verschicke.

Ich bin ja schon bei Normal laufenden Bus bei einer Min-SDT von 49.

Hab die max sdt deshalb mal hochgesetzt, dann geht die CPU auch nicht 
mehr in Stop, doch es kommt immer noch zu einer Telgrammwiederholung, da 
selbst nach über 279 Bitzeiten noch keine Antwort kam.

Hab mal einen Screenshot vom telegramlog angehäüngt, und hab mal auf die 
Telegrammwiederholung getriggert. Im normalen Betrieb tritt keine 
wiederholung auf. Was mich aber wundert ist, das nach dem längeren FDL 
request, welcher wahrscheinlich die Probleme verursacht, erst mal 2 
normale telegramme vom teilnehmer kamen, und erst danach das mit der 
wiederholung passiert ist!

Einer Ne Idee?

Achso, noch Infos: ID SPS=2 , ID AVR=1
Spalte 1 - TeleNr
Spalte 2 - zeitstempel
Spalte 3 - Adressen
Spalte 4 - Protokoll
Spalte 5 - Primitive
Spalte 6 - Dienst
Spalte 7 - Daten

Autor: Jochen Kuehner (jogibear9988)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habs jetzt auch noch im normalen Betrieb geschafft.

Wenn das Global_Control Telegramm kommt, kann der AVR nicht auf die 
Statusanfrage danach gleich Antworten.

Denke das ist aber, da der AVR das Global Control noch verarbeiten muss, 
und daher noch nicht auf das neue Telegramm reagieren kann! Kann das 
sein?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Global Control muss er ja nichts machen, noch nicht mal antworten. 
Von daher sollte er da ja schon sehr schnell durch sein...

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg S. schrieb:
> Bei Global Control muss er ja nichts machen, noch nicht mal antworten.
> Von daher sollte er da ja schon sehr schnell durch sein...

keine Ahnung warums dann passiert.

Hast du denn den Bus bei dir ohne ausfälle (Telegrammwiederholungen) am 
laufen? Irgend eine Idee was das sonst verursachen könnte?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist ist Zeit Tsyn nach Global Control noch nicht abgelaufen.

Hast du ein Speicheroszi? Dann könnte man sich mal an einem Portpin 
ausgeben lassen wann er wieder bereit ist und schauen ob vorher schon 
Daten reinkommen.

Autor: Jochen Kuehner (jogibear9988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Speicheroszi ist leider nicht vorhanden. Mal sehen was Ich noch an Tests 
durchführen kann...

Autor: Michael Piciorgros (Firma: Piciorgros GmbH) (colonia)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg S.
ich habe mit Interesse Ihr Projekt und die Kommentare dazu studiert.
Könnten Sie mich diesbezüglich bitte per E-Mail kontaktieren?
mfG
Michael

Autor: Daniel Wiljan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich verfolge diesen Beitrag nun schon eine ganze Weile. Ich wollte diese 
DP-Ablaufsteuerung auf einen AVR, am besten AtmegaXY ummünzen. Jetzt 
gibts da kleinere Probleme beim Anpassen der Interrupts und des Timers.

Hat jemand vllt. eine funktionierende Anpassung an einen atmega32 oder 
ähnlich... nur mal zum rein schauen und draus lernen :-)

vielen Dank schon mal

Grüße Daniel

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, für ATmega16. Bitte mein post von Datum: 07.05.2010 14:44 lesen. Da 
ist die quellkode dabei.

Vielleicht kannst du nicht diese als "gast" sehen?

ATmega32 ist soweit ich weiss dieselbe MCU mit mehr Flash & RAM.

Einar

Autor: Daniel W. (Firma: WD-Electronic-Solutions) (wdaniel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnelle Antwort, ja die AtmegaXY sind so ziemlich 
gleich, vor allem was Register angeht... werde den Code die Tage mal 
testen..
man muss ja manchmal auch noch arbeiten nebenher :-)

Autor: Zachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich beschäftige mich schon länger mit dem Thema und hab folgendes 
gefunden:
http://netload.in/datei2gwFjdz2UF/profibus.zip.htm
Vieleicht hilft das jemandem weiter?

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Zachter (Gast): Leider nicht. Ich bekommt nur ein fehlermeldung:
--------------
Error
Code: ER_NFF_102420110918
Possible reasons for that:
* you have a mistake in the link
* The file was deleted in case of a abuse report.
* The file was deleted by the uploader.
--------------

@Daniel: Wie geht es? Atmega32 sollte ohne änderungen spielen.

Autor: Zachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.hackchina.com/?lang=en&q=profibus
Da gibts auch jede menge sourcen und beispiele, aber vor allem mit dem 
vcp3

Autor: Zachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW: Was ich eigentlich brauche sind ein paar Slaves mit 1,5Mbit für 
meinen Hausbus. Dafür ist aber jeder ASIC viel zu teuer...
Eine lösung hab ich bisher leider nicht.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der µC genug Power hat, sollte mit der Software Lösung auch 1,5MBit 
möglich sein.
LPC13xx von NXP sollte z.B. ganz gut passen.

Autor: cell85 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich arbeite gerade daran meine steuerung für motoren als Profibus slave 
zu erweitere.
Die Daten werden dann praktisch aus meiner Steuerung an eine S7 gesendet 
und von dort aus an ein PLS.
Ich verwende einen ARM Cortex und habe eine Möglichkeit gesucht, 
praktisch einen Profibus DP Slave Code zu finden und somit die 
funktionialität in meine MCU zu integrieren als bspw. ein Profichip 
Modul zu kaufen.

Meint ihr das ist mit eurem Code möglich?

Ich muss ca. 80Byte an daten an die S7 senden.

Viele Grüße
Steffen

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es ein hobbyprojekt? Dann versuchen sie es. Es ist möglich.

Aber wenn es ein kommerzielles produkt ist, dann nein! überhaupt nicht! 
Diese code hat elementen die nie durch eine PROFIBUS certification 
kommt.

http://www.profibus.com/community/test-labs/

Dann sollte du ein chiplösung oder modullösung suchen. Profichip ist 
einer von diese, es gibt mehrere. Ich rate sie mit eine PICC zu sprechen 
wenn dies eine kommerzielle produkt ist.

MvG
Einar

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cell85 schrieb:
> Meint ihr das ist mit eurem Code möglich?
Der Code stellt ein Profbus Slave dar. Geht also :)

> Diese code hat elementen die nie durch eine PROFIBUS certification
> kommt.
Ausserdem hab ich komerzielle Nutzung untersagt ;)

Wenn man noch einiges an Zeit reinsteckt kann auch was zertifizierbares 
raus kommen. Aber im aktuellen Zustand ist der Code natürlich nicht 100% 
Profibus konform. Wie auch auch schon im Ursprungspost steht.

Autor: Cell85 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja mir reicht eigentlich die Info aus, das es möglich ist einen 
soft-pb-dp in meine mcu zu integrieren. Ich würde versuchen einen 
konformen stack zu benutzen (kaufen/selbst coden) oder eine geeignete 
Chiplösung zu finden.

Autor: Mohammad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
In the Profibus.c there is a function that not define,
can u explain what's this?
The function is get_Address()

Thanks alot

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
This Function reads the Dip-Switch Status on the µC Port, where the 
Profibus Address is set.

Autor: Mohammad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dear Jörg S
Thanks alot for your reply.
I want to use this system with PLC siemens CPU314C-2DP,and I need a GSD 
file,
do u have a correct GSD file for this system?

Best Regards

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
See:
Beitrag "Re: Software Profibus DP-Slave in C"

I think it is not 100% correct and doesn't matches the actual Source 
code exactly, but it should be a good starting Point.

Autor: Mohammad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dear Jörg S
I hope that you are fine .
I have a question : Do you know ,how I can connect with PLC siemens.
Do you have a function that I can use this for communication with PLC 
and MCU .

thanks alot

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I'am not sure what you are mean with "connect"?

Autor: Mohammad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Connect means communication

I want to read and write some bytes between MCU and PLC.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
If you want to know how to include a Profibus Device into the SPS 
Programm, that are Basics of the SPS Programming. And i'am not familiar 
with that. My Part in this Projekt was only the programming of the 
Firmware for MSP430 µC.

Autor: Azher I. (azher_i)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hello Joerg,

I appreciate your hardwork in developing profibus slave in uC.

Would you please guide me how can I modify this code to view/recive 
32bit(4byte) data from master.
I just want simple DP slave implementation and Slave will receive 4byte 
data from master every second.


Regards,
Azher

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In the profibus.h File, there is the Define "INPUT_DATA_SIZE" and 
"OUTPUT_DATA_SIZE". Set Input to 4 and Output to 0.
That should be all...

Autor: Janne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Is it possible to get the source code somewhere? I would like to take a 
look at it to determine the complexity of a Profibus slave and possibly 
port it to an ARM Cortex M4.

Best regards,
Janne

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Is it possible to get the source code somewhere?
Sure, take a look in the Thread!

For example the newest Version:
Beitrag "Re: Software Profibus DP-Slave in C"

Autor: Janne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thank you very much!

Autor: Thoma Hauc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Ich stieß auf diesen Thread bei der Suche nach Informationen über die 
Implementierung von PROFIBUS.
Ich denke, ich werde eine Anpassung im programmierbaren Logik machen.
Aber dafür, brauche ich eine Aufzeichnung der Austausch zwischen Master 
und Slave.
Und im Moment, habe ich keine Zugang zu einem SPS.
Könnte jemand mir das bieten?

Vielen Dank im Voraus.

MfG,

Thoma

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du suchst also einen Kommunikations-Mittschnitt?

Autor: Thoma Hauc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

Ja, ich suche ein Kommunikations-Mitschnitt (Ich kannte diesen Begriff 
nicht, Deutsch ist nicht meine Muttersprache).

Hast du so etwas auf dein Festplatte?

Thoma

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, da hätte ich nichts da, ich wüsste auch nicht ob dich das wirklich 
weiter bringt.
Beantwortet das PROFIBUS Handbuch nicht schon alle deine Fragen:
http://www.see-solutions.de/sonstiges/sonstiges.ht...

Ansonsten würde ich
http://www.sps-forum.de/
empfehlen. Da kann dir sicher jemand mal einen Log geben.

Autor: Thoma Hauc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

Ein Kommunikations-Mitschnitt wird mir erlauben, eine zeitgesteuerte 
Prüfstand erstellen.

Dann frage ich einfach diese Forumsteilnehmer.

Vielen Dank für deine Hilfe.

Thoma

Autor: Sony Hendrawan (sony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dear,
I am Sony from Indonesia.

@ Jörg, I really appreciate for your hardwork. I also have hardwork to 
understanding the german language in this forum :D

@ Einar, How to implement your program to AVR with PA as 8bit output and 
PB as 8bit input like layout that attached by Jochen Kuehner?

I actually not familiar wit C language, but I will start to learn. I has 
been try to compile the code with AVR Studio-4 without error and made 
challenge for me.

Gruß

Sony

Beitrag #3457053 wurde von einem Moderator gelöscht.
Autor: Romain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jörg,

I'm building an embedded solution to do profibus and i was wondering why 
you didn't use a specific ASIC chip like the VPC3+C or SPC3 for more 
easier develloping.

I'd like to also know which part of your Source Code is doing the job of 
the ASIC chip.

Excuse me i don't speak dutch.

Thanks,

Romain

Autor: deathfun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Romain,

this post is seven years old. We do not even know whether the author is 
reading yet. Please contact the creator of the solution with a PM or 
open a new topic.

greeting
deathfun

Autor: Romain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi deathfun,

I'm aware that it's an old topic but last message is only 1 year old so 
maybe with luck Jörg is still active ?

But thanks for the advice, i'm gonna PM him :-)

Best regards,

Romain

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yes I am not dead ;)

A ASIC is expensive and not easy to get. And so it was much easier to 
start with a normal RS485 Chip. The first test to analyze what is going 
on on the Bus where very good, with the documentation we could decode 
all of the commands.

The profibus.c is doing the job.

Autor: Romain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jörg,

cool to see you are here :)

Okay for the Asic you are right but for my embedded solution, the cost 
of the Asic isn't expensive so I'll surely use it.

When i said:

"I'd like to also know which part of your Source Code is doing the job 
of
the ASIC chip."

I wanted to mean which part of your code is only doing the job of the 
Asic ? I'm new with Profibus and i know that in software level, we need 
implement de FDL , the user app and the DP-slave stack. Does your code 
is doing the three of them in a same .c ?

Thanks,

Romain

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I don't know exactly what the ASIC is doing :) But i would say that all 
of the things you mentioned is in the profibus.c

But (mentioned above) this implementation is not a complete 
implementation! We wanted to send and receive Bytes for a S7 home 
Automation Project. And for this little Project it works fine.

Autor: Romain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok thank you,

I have a new question now,

I just found something strange for me in your source code :

"
// Slave Adresse holen
  slave_addr = get_Address();
"

I understand that you want to get the address of the slave but i don't 
find where this fuction "get_Address()" is defined ?

Thanks

Romain

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
You have to define it for yourself ;)
In my System get_Address() is a function that reads a Dip-Switch.

Autor: Einar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Other suggestions would be to read it from EEPROM or hard code it.
In that case you would have to set it in EEPROM using any method of your 
choice.

One of them might be the PROFIBUS function Set Slave Address. If using 
this, a "virgin" slave should default to address 126. This strategy is 
useful when you cannot access your hardware because it is potted or in 
other cases where switches are not an option.

Hard coding it is really only sensible when you want to postpone your 
decision during development.

Einar

Autor: Anders L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jorg and Einar,
I have ported Einars softbus(based on Jorg's work)to Basom-avr running 
on a ATMEGA1284p.
For testing, its connected to a DeltaV system and a couple of bytes are 
configured as input and output.
This is working ok, but when I reset(or power cycles) the 1284 the 
communication goes down and are not restored
until I dissables/enables the DP port on the system side.
Is this also the case with yours tests?

I also tried to implement the latest version from Jorg, but have some 
problem understanding
the "else" witch I marked >>>>>??
------------------------------------------------------------------------ 
-
if (Vendor_Data_size != 0)
            {
              // Auswerten
            }


            // Bei Fehler -> CFG_FAULT_ in Diagnose senden
            #if (VENDOR_DATA_SIZE > 0)
            if (Module_cnt > MODULE_CNT || Vendor_Data_size != 
VENDOR_DATA_SIZE)
              diagnose_status_1 |= CFG_FAULT_;
            #else
            if (Module_cnt > MODULE_CNT)
              diagnose_status_1 |= CFG_FAULT_;
            #endif
>>>>>??     else
              diagnose_status_1 &= ~(STATION_NOT_READY_ + CFG_FAULT_);


            // Kurzquittung
            profibus_send_CMD(SC, 0, SAP_OFFSET, &uart_buffer[0], 0);

            break;
------------------------------------------------------------------------ 
---
I'm not an C expert som I thoght that:
if (Vendor_Data_size != 0)
            {
              // Auswerten
            }
 the if will end here.
 So I cant understand the marked else.
 Could you explain?

 Regards
 Andes L.

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Did you check if that is caused by this slave, the DeltaV master or your 
master configuration.

That would not be my master of choice to test a "newborn" slave, as it 
has a few peculiarities itself.

So I suggest you first try with another slave to make sure that it is 
really your slave that causes this. I don't say that you encountered a 
bug in your master, but that it may be a feature that is not exactly 
announced on page 1 in the manual. ;-) Like what is the behaviour when a 
slave disappear? Maybe you need to handle that fault in some way (in the 
master).

Look for what behaviour it will have to different abnormal timings from 
the slave. I am a bit surprised that you can actually do this in Bascom! 
I thought that was a language of convenience more than speed?

If I remember correctly The DeltaV master and configurator are actually 
branded in components, so may not have gotten full focus from the 
producer.

Einar

Autor: Anders L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Einar,
I’ve been working with DeltaV the last 15+ years and believe me it deals 
with Profibus DP quit well 
The slave I’m making is just for fun as a hobby and I test it in a lab 
of course.
Other slaves as motor starters ,etc are also connected and behave as 
expected when powered off/on.
They resume communication after a short period after this power cycle.
The GSD file I’m using is the one that you shared in AVRSoftBus.zip.
Could it be that the GSD needs modification in order to handle the power 
off/on event?

@Jorg: Could you try to explain me the diagnose_status_1 handling with 
the “else” that confusing me?

Autor: Einar S. (Firma: Norwegen) (esjaavik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anders L. schrieb:
> Could it be that the GSD needs modification in order to handle the power
> off/on event?

The slave does not "see" the .GSD file, so the only thing to think about 
is if the GSD does tell the master that some timing (or other factor)is 
outside what the slave actually can handle.

Since your program is assumed to be quite different than mine, as you 
used another (slower?) language. What I did was to observe with 
ProfiTrace and squeeze the timing until the slave could not keep up. 
Then I relaxed it somewhat. And this at the higher baudrate(s). At low 
baudrate the slave is just sitting there twiddling its thumbs anyway.

If I remember right, the timing that needed to be pushed up a bit is max 
Tsdr.

There is much room for improvement. If this was something I would use 
for several of my projects, I would process incoming messages in 
parallel with them arriving. So that when the last byte of a message 
arrive the response packet is ready to be shoved out the UART. You would 
not know there was a microcontroller doing it all behind the scenes. :-)

Check with your bus analyzer what the master does when the slave is 
lost. Does it continue issuing data exchange messages, or does it issue 
diagnostic requests? Disregard the FDL status request to the slave. 
That's just the master looking for a mate ;-)

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anders L. schrieb:

> I'm not an C expert som I thoght that:
> if (Vendor_Data_size != 0)
>             {
>               // Auswerten
>             }
>  the if will end here.
>  So I cant understand the marked else.
>  Could you explain?
Right, the if ends there.
The else is the else from the if Part here:
#if (VENDOR_DATA_SIZE > 0)
  if (Module_cnt > MODULE_CNT || Vendor_Data_size != VENDOR_DATA_SIZE)
    diagnose_status_1 |= CFG_FAULT_;
#else
  if (Module_cnt > MODULE_CNT)
    diagnose_status_1 |= CFG_FAULT_;
#endif

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es eigentlich inzwischen eine neuere Version?

Die einzige Version die ich finde ist von 2010.

Peter

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe da noch eine Frage.

Gibt es hier von einen Port für einen ARM Cortex M.

Ich wollte für ein Projekt einen M0 als RS485 (Profibus) Datenlieferant 
einbauen und dieser Code wäre da was passendes.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> gibt es eigentlich inzwischen eine neuere Version?
Nein, gibt nichts neues.

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls jemand an einer Profibus-DP-Implementierung in Python interessiert 
ist:
http://bues.ch/h/profibus

Entwickelt wird aktuell im git branch "more-features".
http://bues.ch/gitweb?p=raspi-profibus.git;a=short...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade das es nichts neues gibt, ist an sich ein wirklich gutes Stück 
Software. Ich werde versuchen die Software einzusetzen!


Bitte Michael nimm mir es nicht Übel aber Phyton ist nicht gerade das 
was ich für so was nehmen würde.

Aber in Prinzip ist es so was ähnliches was ich bauen will.
Ein M0 der sich um den Profibus kümmert so wie ein SPC3 und ein 
Hauptsystem das das darüber liegende Protokoll macht. Wobei mir dann 
egal wäre in welcher Sprache das Protokoll abgearbeitet wird, ist ab da 
sowieso nichts wildes mehr. Aber mein M0 (dein AVR) sollte schon etwas 
mehr machen.

VG, Peter

Autor: Bhaudip Mehta (bhaudip_m262)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
can you share this code with us using arm cortex m0?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I started with my project this week and i saw that i need a CPU with a 
12mBit UART.
Now i'm locking for a solution.


May be some one else had a M0 solution without the 12Mbit.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.