ABB Roboterschulung von praxiserfahrenen Trainern
in unserem Schulungszentrum in Mainburg oder vor Ort bei Ihnen
Bediener und Expertenschulungen anfragen

Autor Thema:  Negative Zahlen empfangen  (Gelesen 1689 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

mani

  • Gast
Negative Zahlen empfangen
« am: 09. März 2006, 12:08:23 »
Hallo Leute
Wollte wissen ob man über einen seriellen Kanal negative Zahlen empfangen kann?
Mein Kanal: Open "COM1:",channel\Bin;
So lese ich: Prozedur:=ReadBin(channel);
Danke im voraus für eure Hilfe!
Schönen Tag
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert


ABB Robotertraining
günstig und verständlich mit Zertifikat
ABB Roboterschulung

Offline Robiman

  • Global Moderator
  • Forum Elite LV 8
  • *
  • Beiträge: 382
  • robi for ever
    • Ersatzteile für ABB Roboter
  • Bewertet: +4
Re: Negative Zahlen empfangen
« am: 09. März 2006, 14:20:35 »
seriell weis ich nicht

ich hatte mal das bdürfniss negative Zahle über eine EA Gruppe zu empfangen :kopfkratz:
==> geht auch nicht :wallbash:
Mußte mir helfen und mit einen Offset zu arbeiten.
heist also in der SPS und im Roboter jeweils einen bestimmten Betrag dazu zurechnen
ist blos blöd immer wenn du die EA's anschaust siehst du halt nicht den richtigen Wert.
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline rmac

  • Forum Elite LV 4
  • *
  • Beiträge: 281
  • Bewertet: 0
Re: Negative Zahlen empfangen
« am: 09. März 2006, 14:26:53 »
Hallo mani,

Also datenmäßig kannst du prinzipiell alles empfangen was nicht bei drei auf den Bäumen ist, sind eh alles nur Bits und Bytes...  8)
Die Frage ist vielmehr wie du und die Gegenstelle diese Daten interpretierst.

Vorzeichenbehaftet Ganzzahlen (Integer) werden fast ausschließlich im Zweierkomplement gespeichert/verwendet/berechnet/bla...
Grundlagen hierzu findest du unter: http://de.wikipedia.org/wiki/Zweierkomplement

Solange du nur mit einem Byte (0-255) arbeitest, sieht das also folgendermaßen aus:

Bin.       Dez.    Zw.-Kompl.
11111111 = 255 =   -1
11111110 = 254 =   -2
11111101 = 253 =   -3
...
10000001 = 129 = -127
10000000 = 128 = -128
01111111 = 127 =  127
...
00000001 =   1 =    1
00000000 =   0 =    0

Vorausgesetzt die Gegenstelle schickt dir die Daten im Zweierkomplement (!) und du willst lediglich mit einem Byte arbeiten, mußt du das empfangene Byte entsprechend umrechnen, da die ReadBin-Funktion (laut Doku) nur eine positive Ganzzahl als NUM liefert.
Für die Umrechnung könntest du die Bit-Funktionen verwenden, die sind allerdings nur in der (kostenpflichtigen) Software-Option "Developer's Function" enthalten (glaub ich).

Bei Byte-Daten sollte es aber auch ausreichen vom Absolutwert 256 abzuziehen, wenn dieser >= 128 ist.
Sieht dann in etwa so aus:
nVal := ReadBin(channel);
if nVal >= 128 nVal := nVal - 256;

Bei größeren Zahlenbereichen muß du das Konzept entsprechend erweitern.
Viel Spaß dabei....  :mrgreen:

Gruß
Rainer
« Letzte Änderung: 09. März 2006, 14:28:34 von rmac »
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Micky

  • Forum Elite LV 3
  • *
  • Beiträge: 269
  • Bewertet: +40
Re: Negative Zahlen empfangen
« am: 09. März 2006, 17:38:22 »
Hallo Mani,

mit der Funktion ReadBin empfängt man den ASCII-Code eines Zeichen (0-255). Den ASCII-Code kannst Du mit der Funktion ByteToStr in ein Zeichen umwandeln.

 :meld:

Beispiel:

  Var byte btInput;
  VAR string stValue;
 

  btInput:= ReadBin(deRS232);
  stValue:=ByteToStr(btInput\Char)

Bei der Übertragung eines Minus-Zeichens wird der ASCII-Code 45 übertragen und in die Variable btInput gespeichert. Durch Umwandlung in ein Zeichen mit der Funktion ByteToStr wird der ASCII-Code 45 in ein Minus-Zeichen umgewandelt.


Da ReadBin Zeichenweise arbeitet, musst du bei einer vierstelligen Zahl 4 Zeichen mit ReadBin empfangen, diese umwandeln in ein String, die Strings zusammenbauen und dann mit StrToVal in eine Zahl umwandeln.

Alternativ solltest Du Dir auch mal die Instruktionen ReadStr, ReadNum, ReadStrBin anschauen, den diese beinhalten bereits die Umwadlung in einen String oder einen Zahlenwert.

Gruß
Micky

 
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline stefanM

  • Global Moderator
  • Forum Elite LV 11
  • *
  • Beiträge: 535
  • Bewertet: +3
Re: Negative Zahlen empfangen
« am: 25. März 2006, 12:46:23 »
Hallo,
fuer Integer wuerde sich die Darstellung im zweierkomplement anbieten, als Ultraprimitivloessung ein einfaches Vorzeichenbit.
Willst du Gleitkommazahlen darstellen, gibt es die Moeglichkeit deinen Integer einfach durch z.B. 1000 zu teilen (drei Nachkommastellen).
Aufwaendiger ist die normierte Darstellung in Exponentialschreibweise nach IEEE IEEE 754 - ausfuehrliche Beschreibung bei Wikipedia zu finden.
Gruss Stefan
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert


question
Negative Integerwerte von der SPS zum IRB6400RF/2.8-150 übertragen

Begonnen von strango

9 Antworten
3040 Aufrufe
Letzter Beitrag 27. Mai 2008, 13:02:57
von strango
xx
Länge von REAL Zahlen

Begonnen von RobbiSchubser

7 Antworten
2045 Aufrufe
Letzter Beitrag 22. November 2006, 11:05:35
von RobbiSchubser
xx
Erkennung von Geraden und Ungeraden Zahlen

Begonnen von RSLiebhaBär

2 Antworten
926 Aufrufe
Letzter Beitrag 22. November 2010, 21:43:00
von abb2400
 

über das Roboterforum

Nutzungsbedingungen Impressum
Sitemap