Ich kämpfe mich seit zwei Wochen (mal wieder) durch die TX Programmierung für den ftduino RoboPro TX-Light...
Diesmal geht es um die TA_Config, das ist "die" Umschaltung der Eingänge z.B. von digitalem Taster auf Widerstandsmessung, Ultraschall...
Das 1. Problem ist das der fxparser keinen Befehl 5 Empfang kennt. Er reagiert einfach nicht darauf.
Eigentlich hätte ich gedacht, dass die Daten einfach immer mit gesendet werden. Das ist jedoch nicht der Fall.
Im Befehl 5 wird eine Konfiguration zum TX übertragen, wenn diese geändert wird.
Laut ftpadia 2/2018 Seite 63:
Remote Config Write (5)
- Senden von der Eingangskonfiguration an die TX-Cs
- Sendet einen Datenblock an den Master und jede verbundene Extension
- In die Felder Input Config wird je nach Modus ein Byte geschrieben. Soll ein Analogwert gemessen werden, so muss der Wert mit 128
multipliziert
werden:
------------------------------
Modus----------Digital--Analog
Spannung-------0x00-----0x80
Widerstand 5k--0x01-----0x81
Widerstand 15k-0x02-----0x82
Ultraschall----0x03-----0x83
------------------------------
Abb. 5: Byteschema Remote Config Write
Problem 2 das sind nur 36 Bytes
Problem 3 multipliziert <--- ??? (Wirklich?)
Problem 4 Da sind 8 Befehle in der Tabelle. Es sind vom RoboPro-Test aber nur 5 anwählbar.
###############################################################
Dann steht in der Datei:
PC-Programming-RoboTXC-V1-5-24-Nov-2012
In der Datei ROBO_TX_FW.H vom 8.8.2017 steht:
Code: Alles auswählen
...
// Modes of universal inputs
enum input_mode_e
{
MODE_U = 0,
MODE_R = 1,
MODE_ULTRASONIC = 3,
MODE_INVALID
};
...
// Universal inputs configuration, 4 bytes
typedef struct
{
UINT8 mode; // See enum input_mode_e
BOOL8 digital; // FALSE = analog input, TRUE = digital input
char reserved[2];
} UNI_CONFIG;
...
// Config structure, 88 bytes
typedef struct
{
UINT8 pgm_state_req; // See enum pgm_state_e, program state change request
char reserved_1[3];
BOOL8 motor[N_MOTOR]; // TRUE = corresponding outputs are used as a pair of motor outputs M1...M4,
// FALSE = corresponding outputs are used as a pair of separate digital
// PWM outputs O1...O8
UNI_CONFIG uni[N_UNI];
CNT_CONFIG cnt[N_CNT];
char reserved_2[32];
} TA_CONFIG;
...
Demnach sind hier 88 Bytes die ohne die TA_ID... übertragen werden (ersten 4 Bytes).
Die Umschaltung von Analog zu Digital geht hier über digital (und mode) an anderer Stelle der Übertragung.
Die "Lösung" ist eine Mischung zwischen den beiden Berichten.
Also, die TA_CONFIG enthält (nach der TA_ID (4 Bytes)) 8 Bytes (UINT8) mit der Configuration der Eingänge.
Ich bin hingegangen und hab mit Byte für Byte die Daten anzeigen lassen. Dabei ist folgendes rausgekommen:
Getestet mit RoboPro 3.1.2. und neuste Version
Dez-Bedeutung-------------------Hex
00--Analog 10V (Farbsensor)-----00
01--Analog 5kOhm (NTC,...)-----01
03--Ultraschall---------------------03
128-Digital 10V (Spurensensor)--80
129-Digital 5kOhm (Taster,...)---81
ByteNr Eingang
4-- 1
5-- 2
6-- 3
7-- 4
8-- 5
9-- 6
10-- 7
11-- 8
Die Umschaltung von Digital zu Analog erfolgt also indem 128 (Hex80) dazu addiert wird.
Ob nun ein analoger Ultraschall existiert kann ich leider nicht ausprobieren, da ich meine Sensoren nicht finde.
Ich gebe zu, dass ich gerade besonders stolz bin, dass ich es hinbekommen habe, einen RoboPro Comand 005 Request zu programmieren.
Somit werden nun die Daten von RoboPro zur Umschaltung der Eingänge vom ftduino auch ausgewertet.
Ich habe darauf Verzichtet UNI_CONFIG zu verwenden und lese die Bytes mit UINT8 ein. Beim Weiterverwenden und Übertragen in andere
Variablen, gab es mit der Arduino IDE nur Probleme.
Die Anzahl der Bytes spielt keine Rolle.
Die 15k (Universal-)Eingänge sind nicht anwählbar, in der älteren RoboPro Version. Ultraschallsensor kann man im Level 5 auf Analog stellen. Ob das geht ist eine andere Frage...
Ich bin mal gespannt auf die Konfiguration der Counter...
Die sollten je eigentlich dahinter kommen.
Mit freundliche Grüßen
fishfriend
Holger Howey