Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 57

Thema: Datentypen

  1. #1
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute, habe eine kurze Frage.
    Ich hab schonmal vor ca. einem Jahr mit SCL angefangen durch dieses Forum. Bin aber leider nicht dazu gekommen mich weiterhin mit der Materie zu beschäftigen.
    Wollte jetzt nochmals neu ansetzen.
    Ich wollte Fragen, bei welcher Funktion man welche Datentyen verwendet, z.B. DINT Dword Int....
    Eine Erklärung oder ein LINK würde mir sehr helfen.

    Danke im voraus.

    LG
    EMZ
    Zitieren Zitieren Datentypen  

  2. #2
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    bei fertigen Funktionen MUSS du die Typen benutzen die durch die Parameter vorgegeben werden
    bei deinen eigenen Funktionen bestimmt DEINE Anforderung welche Typen du verwenden "solltest"

    oder ist deine Frage nur unklar formuliert?

  3. #3
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hallo EMZ

    die Frage musst du anderes herum stellen.
    In der Hilfe sind die Datentypen alle aufgelistet. Jeder Datentyp hat einen Wertebereich.
    Du solltest den Typ nehmen, der zu deinem Problem passt.

    Wenn du von einer Lichtschranke ein Signal bekommst, dann ist das BOOL. Das kann mit logischen Funktionen verarbeitet werden. Also mit AND OR XOR NOT. Plus Minus Mal Geteilt machen einfach keinen Sinn.

    Wenn du von einem Analog-Digital-Wandler einen Wert bekommst, dann ist der vermutlich 16 bit breit und damit erst mal INT. Mit INT kann man rechnen, also plus minus mal geteilt.
    Aber damit geht bei den Anfängern das Drama auch schon los. Sagen wir mal INT#0 entspricht 0V und INT#32767 entspricht 5V. Was ist dann INT#12500 in Volt.
    Der Dreisatz sagt dem Hauptschüler 12500/32767*5V liefert Volt. Probier das aus und du bekommst 0
    Und das ist kein Fehler, denn wenn du ein INT mit einem INT teilst, dann bekommst du INT.
    12500/32767 = 0,3814813684499649 und das ist nun mal keine Ganzzahl. Also wird abgeschnitten und übrig bleibt 0.
    Ok, sagt der Realschüler, dann multiplizieren wir eben zuerst und teilen dann.
    12500*5 = 62500 das passt aber nicht in ein INT. Deswegen liefert eine SIMATIC und auch alle anderen µ-Controller nun -3036.
    Und das teilen wir jetzt und haben wie oben schon wieder 0.
    Damit aus dem INT eine brauchbare Zahl in Volt wird, musst du zuerst von INT nach REAL wandeln und dann rechnen.
    12500.0 / 32767.0 * 5.0 = 1,9074068422 oder so ähnlich.
    Womit wir beim schlimmsten aller Datentypen angelangt sind, dem REAL. Hieran verzweifelt sogar der Gymnasiast, denn damit treten ständig Rundungsfehler auf. Die uns in der Praxis aber gar nicht stören, denn wenn nur 12 oder 16 Bit rein kommen und unser Sensor nur eine Linearität von 3% und einen Fehler von 5% hat, dann reichen eigentlich 2 Stellen aus.
    Deswegen ist REAL oft gut, solange man nicht versucht auf Gleichheit zu prüfen. Merke: 1.0 / 10.0 * 10.0 ist eigentlich nie 1.0!
    Rechner arbeiten binär und da geht ein Zehntel nicht auf. Da hilft auch LREAL nix.

    Was gibt es sonst noch. Datum und Zeitformate. Die sollte man verwenden wenn man mit Datum und Zeiten umgehen muss.
    Und Zeichenketten -- zur Ausgabe von Fehlermeldungen.

    'n schön' Tach auch
    HB

  4. Folgende 5 Benutzer sagen Danke zu HelleBarde für den nützlichen Beitrag:

    PN/DP (08.12.2014),rostiger Nagel (20.12.2014),simon.s (08.01.2015),vollmi (10.12.2014),winnman (12.12.2014)

  5. #4
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Erstmals danke euch beiden
    Hi Helle Barde..
    Also soweit konnte ich dir folgen.
    Und wozu nimmt man den Datentyp Dint ?
    Und z.B. Array?

    Und bei dem.Tia portal.gibt es ja in der symboltab. die Aufteilung : Input Output ,Static, Temp und noch eins oder zwei... (Bin momentan nicht am rechner)
    Und wie weiß ich, wo ich welchen Datentyp bzw. Welche Variable einfügen muss ?
    Was kommt.z.b. bei static rein oder temp?

    Beispiel Bild folg heute noch

    LG
    EMZ

  6. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von EMZ Beitrag anzeigen
    Also soweit konnte ich dir folgen.
    Und wozu nimmt man den Datentyp Dint ?
    Und z.B. Array?
    D(ouble)INT nimmt man, wenn der Zahlenwert die Grenzen von INT übersteigt.
    Ein Array (Feld) nimmt man, wenn man eine Liste eines bestimmten Format braucht. Z.B. eine Liste an String, wo man die Fragen von EMZ speichert:
    Code:
    Fragen_EMZ: Array[1..10] of STRING;
    Fragen_EMZ(1):="Ich wollte Fragen, bei welcher Funktion man welche Datentyen verwendet";
    Fragen_EMZ(2):="...";
    ...



    Zitat Zitat von EMZ Beitrag anzeigen
    Und bei dem.Tia portal.gibt es ja in der symboltab. die Aufteilung : Input Output ,Static, Temp und noch eins oder zwei... (Bin momentan nicht am rechner)
    Und wie weiß ich, wo ich welchen Datentyp bzw. Welche Variable einfügen muss ?
    Was kommt.z.b. bei static rein oder temp?
    Das ist die Schnittstelle des Bausteins und was wo rein kommt, hängt davon ab, was mit den Variablen geschehen soll.

    Code:
    IN:     Werte vom Aufruf des Bausteins in den Baustein übergeben.
    INOUT:  Werte vom Aufruf des Bausteins in den Baustein übergeben, bearbeiten (oder nicht) und wieder zurück an den Aufruf geben.
    OUT:    Werte im Baustein erzeugen und an den Aufruf übergeben
    STATIC: Werte im Baustein erzeugen oder gespeicherte Werte verwenden und bis zu einem späteren Zyklus speichern.
    TEMP:   Werte zuerst im Baustein erzeugen und noch im gleichen Zyklus verwenden (werden nach dem Bausteinaufruf "gelöscht").

  7. #6
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich habe gestern einen Testprogramm programmiert, natürlich ohne Funktion. Also meine erste Übung war es, dass ich zum Beispiel eine bestimmte Positionsabfrage programmiere.
    Wie zum Beispiel bei einem Servoantrieb: Dass z.B. nach 10 Takten der Motor Position 1 erreicht und dann z.b. für eine bestimmte Taktzahl steht und dann zur Position 2 fährt und und und...
    @hucki : Ich habe schon einmal von dir eine ähnliche Programmierstruktur bekommen, da ich es als herausforderung sehe möchte ich gleich damit beginnen.
    Ich möchte auch keine Programmbeispiele, sondern eher Tipps und Fehleranalysen, nicht dass sich der ein oder andere denkt, dass ich ein fertiges Programm will.

    FOR Index := 10 TO 1 BY 1 DO Zaehler [Index] := Zaehler [Index +1]; END_FOR;


    so sah ungefähr mein SCL-Programm aus, habe aber leider nicht mehr das richtige, da nach einem PC Absturz die Übung verloren gegangen ist, aber ich denke da sind einige Fehler drinne.



    http://www.bilder-upload.eu/show.php...1418158252.png

  8. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Ersetz doch einfach mal Index durch einen bestimmten Wert.
    Dann schau' Dir an, von wo nach wo der Wert im Array übergeben wird und ob Du das so wolltest?

    Danach nimm' mal den größten und kleinsten Wert, die in der FOR-Schleife für Index vorgegeben werden und prüfe, ob die entstehenden Arrayfelder noch existieren!

  9. #8
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Zitat Zitat von EMZ Beitrag anzeigen
    Wie zum Beispiel bei einem Servoantrieb: Dass z.B. nach 10 Takten der Motor Position 1 erreicht und dann z.b. für eine bestimmte Taktzahl steht und dann zur Position 2 fährt und und und...
    Hi

    alles etwas wirr.
    Was ist die Aufgabe?

    'n schön' Tach auch
    HB

  10. #9
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,
    danke erstmals für die hilfreichen Beiträge.
    @hucki: bin momentan nicht am PC wo ich TIA draufhabe. schicke ich morgen.
    Wo kann ich den Wert im Array verfolgen ob der steigt ?
    Die kleinste wäre 0 und der größte 10 ?

    @HelleBarde
    Soll ja nur eine Übung sein. Dass ich zum Beispiel einen Servomotor habe, der bis zur einer bestimmten Position z.b. 100mm fährt und dann dort für eine bestimmte umdrehungszahl stehen bleibt z.B. 2 Impulsen (drehgeber vom servoantrieb) und dann fährt der an Position 2 welches z.B. bei 200mm ist und dort bleibt er dann auch 2 Impulse stehen. Das will ich erstmal versuchen in scl zu programmieren.

    LG
    EMZ

  11. #10
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    ok du hast ein Array, in dem stehen Positionen und Wartezeiten. Ich würde ein

    positionen : Array[1..100] of struct
    pos : DINT
    wait : DINT
    machen. Dann hast du einen FB. Der hat einen Index, der sich merkt in welchem Schritt also welches Array Element gerade dran ist. Und der FB hat eine Zähler für das Warten.

    Solange die Position nicht erreicht ist, macht der FB nix!
    Ist die Position erreicht, dann lade ich den Zähler aus positionen[ #index ].pos und mach sonst nix
    Ist im Zähler was drin wird der Zähler dekrementiert.
    Ist der Zähler 0, dann wird der Index erhöhrt und dem Moter der Befehl gegeben auf die neue Position zu fahren.

    Womit wir bei der spannenden Frage sind, wie fährst du eine Position an?

    'n schön' Tach auch
    HB

Ähnliche Themen

  1. Datentypen in Codesys V3
    Von Bensen83 im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 05.09.2011, 19:38
  2. Datentypen mit TSEND
    Von Papa_Bene im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.02.2011, 20:11
  3. Profibus DPV1 - Datentypen
    Von hae im Forum Feldbusse
    Antworten: 3
    Letzter Beitrag: 02.02.2009, 10:38
  4. Datentypen in WinCC 6.0
    Von Elton_500 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 25.04.2008, 09:09
  5. Datentypen in Bildbaustein
    Von Vatter im Forum HMI
    Antworten: 1
    Letzter Beitrag: 28.03.2008, 18:13

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •