Hi Strango,
der Robi kann auch negative Werte vom Bus lesen. Du musst nur den Gruppeneingang (was du auch bestimmt gemacht hast) in einen Analogeingang ändern. Dann klappt das.

Ein Gruppeneingang wird immer als Integerwert ohne Vorzeichen gelesen.
-Name "giWertVonSPS" -SignalType "GI" -Unit "BUSKOMM" -UnitMap "0-15"
ändern in:
-Name "aiWertVonSPS" -SignalType "AI" -Unit "BUSKOMM" -UnitMap "0-15"\
-MaxPhys 32767 -MaxBitVal 32767 -MinPhys -32767 -MinBitVal -32767
Ein Analogsignal wird als Floatzahl gelesen. Den muss man entsprechend parametrieren.
Mit einem Wort (16 Bits) kannst du eine Zahl ohne Vorzeichen bis 65535 darstellen.
Mit dem Beispiel Oben kann eine Zahl von: -32767 bis: 32767 dargestellt werden.
Auf der SPS-Seite wird ein Integerwert mit zwei Bytes dargestellt. Diese zwei Bytes spiegeln sich in dem Analogeingang wieder. Der Name: Analogeingang täuscht ein wenig.!
Wenn du auch noch Floatzahlen an den Roboter senden willst muss du den Eingang auf vier Bytes erhöhen. Eine Floatzahl auf der SPS-Seite hat 4 Bytes.
Wenn du zum Beispiel mit dem oberen Vorschlag (mit zwei Bytes) auch Kommazahlen von der SPS einlesen willst, mache folgendes:
Auf der SPS-Seite: mit 10 Multiplizieren / 5.0*10=50
Auf der Roboterseite den Analogeingang anpassen.
-Name "aiWertVonSPS" -SignalType "AI" -Unit "BUSKOMM" -UnitMap "0-15"\
-MaxPhys 3276.7 -MaxBitVal 32767 -MinPhys -3276.7 -MinBitVal -32767
beachte -MaxPhys und -MinPhys! Der Wert wird automatisch Skaliert. Das dividieren durch 10 macht das System selbst. Du brauchst keine Funktion die den eingelesenen Wert noch extra durch 10 teilt.

Noch viel Erfolg beim Projekt.
