B&R X20 in Ansi C programmieren

OE5AMP

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Miteinander

Kurz zu meiner Person.

Bin 29 Jahre alt, habe Elektroinstallationstechniker gelernt und bin jetzt in der Prüfmittelentwicklung bei einer Automatisierungsfirma mit dem Orangen Logo tätig :smile:
Habe aber im Beruf nur mit Hardware zu tun. Deshalb ein Laie auf dem Gebiet der SPS programmierung. Hobbys sind Amateurfunk eigentlich alles was so mit Technik zu tun hat.

Vor meinen Tisch liegt eine CP3586 B&R CPU mit DI und DO Modulen die schon konfiguriert sind. Verbindung zum Automationstudio funktioniert, Variablen sind gesetzt usw.

Eingänge sind mit In1-In36
Ausgänge mit Out1-Out36 gesetzt


#include <bur/plctypes.h>

#ifdef _DEFAULT_INCLUDES
#include <AsDefault.h>
#endif

void _CYCLIC ProgramCyclic(void)
{
Out1 = 1; //Testkommentar
Out2 = 1;

}

Damit kann ich zumindest die Ausgänge einschalten soviel habe ich schon kapiert:smile:

Jetzt zu meinen Fragen. Wie weiß Automation Studio welcher Befehl was machen soll. Sind die generell in Ansi C gleich (nur einfache Standardbefehle) Oder muss ich den AS irgendwo sagen was welcher Befehl tun soll.
Habs jetzt mal probiert wie beim Arduino ein Blinklicht zu machen oder mit einen Eingang auf 1 einen Ausgang auf 1 zu schalten. Das hat mal nicht funktioniert.

Kann mir jemand einen Link oder Lektüre zum Nachschauen für C empfehlen, wo ich dann die Erfahrungen auch im Automation Studio verwenden kann. Oder sind die Befehlsstrukturen überall anders?

Danke schon mal im voraus.

mfg francy
 
In der Hilfe unter Prigramm/Libary findest du viele Beispiele auch in ANSI C

Wenn du mit dem Programmieren erst anfängst ist Structur Text sicher die bessere Wahl, da dieser auch in anderen Sprachen unterstützt wird

Blinklist in ANSI C
Kannst dir auch die TON Funktion unter
_LOCAL UDINT Counter,CounterMax,BlinkON;

_INIT taskinit(void)
{
Counter = 0;
CounterMax = 100;
BllinkON = 50;
}
_CYCLIC taskcyc(void)
{
Counter++;
if(Counter > CounterMax) Counter = 0;
if(Counter < BlinkON){
OUT2 = 1;
}
else{
OUT2 = 0;
}
}

TON Beispielprogramm in der Hilfe/Librarie/standard
#include <bur/plc.h> /* macros for B&R PLC programming */
#include <bur/plctypes.h>

#include <standard.h> /* prototypes for STANDARD-Library */
/* === variables declaration === */
_LOCAL TON_typ TON_01; /* instance variable of TON */
_LOCAL BOOL input; /* input */
_LOCAL TIME presetTime; /* Time for switch on delay */
_LOCAL BOOL output; /* output is input with an on switch delay
of presetTime */
_LOCAL TIME elapsedTime; /* elapsed time since positive edge of input */
/* === init part of task === */
_INIT void init(void)
{
/* set delay time */
presetTime = 1200; /* is 1.2 seconds, since TIME is
measured in milliseconds*/

}
/* === cyclic part of task === */
_CYCLIC void cyclic(void)
{
/* set input parameters */
TON_01.IN = input;
TON_01.PT = presetTime;
/* call TON with address of instance variable */
TON(&TON_01);
/* read output parameters */
output = TON_01.Q;
elapsedTime = TON_01.ET;
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Danke für die schnelle Hilfe.
Da habe ich noch viel zu lernen. Ich denke ich werde mit ST anfangen. Sieht irgendwie logischer aus für mich. Und die B&R Hilfe Datei verwenden.
Am Montag habe ich in der Mittagspause einen Termin mit nen Programmierer. Der wollte mir das schon per Whats App erklären aber das wird nix. Da gehts persönlich schon einfacher.


Ich werde euch aufjedenfall auf den Laufenden halten. Morgen habe ich ja genug Zeit um was auszuprobieren. Was ich schon mal herausgefunden habe ist, das ich mit rauskopieren und schauen obs geht nicht weit komme. Muss versuchen das ich mal die Basics verstehe, wie Bibliotheken ins Programm verknpüft werden und der Programmierablauf, was die ganzen Zeichen alles bedeuten und machen usw.
 
Hallo !

Ich hab vor 25 Jahren selbst bei B&R entwickelt, mich dann selbständig gemacht und meine Firma baut nun seit 19 Jahren Schaltschränke und schreibt Applikationen mit B&R-SPS-en.
Da ganz neu einzusteigen ist nicht so easy, weil es eine Menge Fußangeln gibt, daher mein Tipp: Besorg dir von einem Kollegen der Akademie im Haus die Kursunterlagen für das Einsteigerseminar. Da hast du gleich mal an ein paar Wochenenden die Basics intus und es ist nicht so frustrierend, weil die Beispiele (anders als die in der Hilfe zum AS...) wirklich alle funktionieren. und der Vorschlag erst einmal mit ST oder AutomationBasic zu beginnen ist sicher ein guter Rat von roger34.

lg Rainer aus Graz
(ehemals OE6TRG, als ich noch qrv war)
 
Servus

Danke für deine Antwort. Oh ein Funkamateur und ehem. B&R Arbeiter. Sind ja auch einige Funkamateure bei B&R :)

Ja die Unterlagen habe ich mir schon runtergeladen und bin da schon am Herumprobieren in ST. Nebenbei mache ich mich aber noch in C schlau. C ist doch die Standardsprache in der Firma. Vlt bringt mir mal was beruflich.

Mal sehen vielleicht haben die in der Akademie mal nen Platz frei für mich um so nen Kurs zu belegen.





#include <bur/plctypes.h>



#ifdef _DEFAULT_INCLUDES

#include <AsDefault.h>

#endif



void
_CYCLIC ProgramCyclic(void)

{
if



(In1
== 1)

Out1 = 1;
Out2 = 1;


else

Out1 = 0;
Out2 = 0;




Kann mir jemand sagen wieso ich da

expected expression before 'else' bekomme, wenn ich Out2 auch mit einbeziehe.

Kann ich das in einer Befehlsgruppe machen oder muss ich pro Ausgang wieder neu mit if (In1 == 1) Out2 = 1; usw. weitermachen?



73 de OE5AMP
 
Zuviel Werbung?
-> Hier kostenlos registrieren
{if



(In1
==1){

Out1=1;
Out2 = 1;
}


else {

Out1=0;
Out2 = 0;
}

Wenn nur ein Befehl nach If() kommt kannst du direkt mit else weitermachen, dann kannst du auch bei Out1=1 das ";" weglassen.
z.B.
if(In1==1)Out1=1 else Out1=0;

Sobald die Anweisung nach deinem If aber ein ";" hat und/oder aus mehreren Befehlen besteht musst du "{" und "}" setzen.


 
Zuletzt bearbeitet:
Wenn es um die Sprache C an sich geht, macht es vielleicht auch Sinn, zunächst auf einem PC und nicht auf einer Steuerung zu lernen.
Man kann C natürlich so nutzen wie Automation Basic oder Structured Text aber dafür wurde C sicher nicht entwickelt.
 
Hallo

Danke für eure Antworten.

Also mittlerweile traue ich mir fast zu z.b. eine einfache Jalousiesteuerung für ein Haus in C zu programmieren. (Einfache Funktionsblöcke in C verwenden) Wo ich Probleme habe sind die Leerzeichen.
Da vergess ich meistens was. Aber der Compiler sagt ja eh wenn was nicht passt.

Bei uns in der Firma intern wird sehr viel in C Programmiert. Steuerungen sowie auch PC Software. Mit dem Eigenstudium erhoffe ich mir mal Chancen auf ne andere Stelle in der Firma. Da schadet es sicher nicht wenn man die Grundlegenden Funktionen in C kapiert und kleinere Sachen schon programmieren kann.

mfg francy
 

Similar threads

Zurück
Oben