18. Februar 2019, 01:02:37
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

 Negative Zahlen empfangen


normal_post Autor Thema:  Negative Zahlen empfangen  (Gelesen 1956 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

09. März 2006, 12:08:23
Gelesen 1956 mal

mani

Gast
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
  • gefällt mir    Danke

Heute um 01:02:37
Antwort #1

Werbung

Gast

09. März 2006, 14:20:35
Antwort #1
Offline

Robiman

Global Moderator
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.
  • gefällt mir    Danke

09. März 2006, 14:26:53
Antwort #2
Offline

rmac


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 »
  • gefällt mir    Danke

09. März 2006, 17:38:22
Antwort #3
Offline

Micky


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

 
  • gefällt mir    Danke
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

25. März 2006, 12:46:23
Antwort #4
Offline

stefanM

Global Moderator
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
  • gefällt mir    Danke

Heute um 01:02:37
Antwort #5

Werbung

Gast


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH