RoboPro Umschaltung der Eingänge

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
fishfriend
Beiträge: 364
Registriert: 26 Nov 2010, 11:45

RoboPro Umschaltung der Eingänge

Beitrag von fishfriend » 22 Apr 2020, 00:37

Hallo...
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

vleeuwen
Beiträge: 1209
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)

Re: RoboPro Umschaltung der Eingänge

Beitrag von vleeuwen » 22 Apr 2020, 13:37

The problem you are describing is not clear to me.
The TA part on this topic has not changed significantly since the Robot interface.
There have only been minor variations in content.

Additional remark:
For what I can find in my archive and on the fischertechnik download site, the last TA description for the TX-C has been publish in nov-2012 (C-Compiler-RoboTXC-V1-2-13-Nov-2012).
The V1-2 (C-Compiler-RoboTXC-V1-2-13-Nov-2012) is for the(cross-compiling) programming of application which are running locally., This was the last Msc release of the TX-C software.
Could it be that your date, 8.8.2017,is a date when this file has been saved?
The V1.5 (ftMscLib) is the definition of the remote interface (MS-VS). How the PC is communicating over the driver with the TX-C.
It looks like that you are mixing up local and remote access.

=========================== Google translate============
Das Problem, das Sie beschreiben, ist mir nicht klar.
Der TA-Teil zu diesem Thema hat sich seit der Roboterschnittstelle nicht wesentlich geändert.
Es gab nur geringfügige inhaltliche Abweichungen.
===================================================
Het probleem dat je beschrijft, is mij niet duidelijk.
Het TA-gedeelte over dit onderwerp is niet significant veranderd sinds de Robot-interface.
Er zijn slechts kleine variaties in inhoud.

fishfriend
Beiträge: 364
Registriert: 26 Nov 2010, 11:45

Re: RoboPro Umschaltung der Eingänge

Beitrag von fishfriend » 22 Apr 2020, 18:15

Hallo…
Die Informationen die da sind, beschreiben wie man eine TX Controller vom PC aus anspricht. Ich bin nun auf der Controllerseite und lese den Datenstrom von RoboPro ein nicht der ausgehenden Datenstrom der MSC Lib.
Ich denke, es sind Informationen für Leute, die ähnliches machen wollen oder nur sich den Datenstrom mal anschauen oder analysieren wollen. Die werden genau dieselben Probleme haben.

Die Beschreibung in den beiden Dokumenten:
PC-Programming-RoboTXC-V1-5-24-Nov-2012
ftpadia 2/2018
entsprechen nicht dem Datenstrom der von RoboPro übertragen wird.


In der Zip-Datei: PC-Programming-RoboTXC-V1-5-24-Nov-2012 /Dokumente
Windows_Library_ftMscLib.pdf
steht:

3.10 SetFtUniConfig
DWORD SetFtUniConfig ( HANDLE fthdl, int devId, int ioId, int mode, BOOL digital)

Funktion konfiguriert einen Universaleingang (Kombi-Eingang) zur Messung von analogen und digitalen Spannungs- und Widerstandswerten und zur analogen Abstandsmessung.
Aufruf:
HANDLE fthdl - aktueller Handle des ROBO TX Controllers
int devId - Controller-ID (Master- oder Extension-Controller)
int ioId - Index des Universaleingangs (0 - 7)
int mode - Art der Messung
0= Spannung (mV),
1= Widerstand (5 kΩ)
3= Ultraschallsensor (Abstandsmessung)
BOOL digital - Kennung ob der Wert digital zurückgegeben wird (FALSE= analog, TRUE= digital), bei der Abstandsmessung nur analog

Return: DWORD errCode - FTLIB_ERR_SUCCESS (kein Fehler) oder Error-Code


Hier wird angegeben, dass keine digitalen Ultraschall –Daten übertragen werden.
In der Tabelle in der ftpedia ist sie angegeben.
Der übertragene Wert ist ein UINT8 Byte und es gibt scheinbar nur 5 davon, nicht 8.

In der Datei Windows_Library_ftMscLib.pdf
Unter
9.5 Struktur TA_CONFIG
Sieht man wie der TA_CONFIG aufgebaut ist – von der Lib (!). Hier sind die Motoren (digital oder PWM) noch –vor- der Konfiguration der Universaleingänge.


Ich frage mich, ob es sein kann, dass die Übertragung des Datenstroms von RoboPro und der C-Programmierung sich unterscheiden. Wohl kaum, denn dann würde der TX die Daten nicht liefern können. Oder der Datenstrom wird noch mal von der Lib geändert - was ich mir nicht vorstellen kann. Wie auch immer, es kann ja sein das jemanden diese Info hilft.

Mit freundlichen Grüßen
fishfriend
Holger Howey

PS
Ja mit dem Datum hab ich mich vertan. Ich dacht an das Datum in der Zip Datei.

vleeuwen
Beiträge: 1209
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)

Re: RoboPro Umschaltung der Eingänge

Beitrag von vleeuwen » 22 Apr 2020, 20:41

Maybe this can help you:
The TX-C is using a different internal protocol (internal on the TX-C) for the ultra sensor then the TXT .
These sensor are not interchangeable.
There is no choise for a real digital or analogue ultra sensor, the 3 is a choice
With 3 you choose for the way that the Input is dealing with the sensor. As I remember me well, it is a protocol with sending (powering) and receiving a small sequence of pulses back.
In the TA you will only see the result of the measurement and not how.
The article in the Wiki-pedia is about how to connect a Python module with a TA protocol.
===================================
Vielleicht kann Ihnen das helfen:
Der TX-C verwendet für den Ultra-Sensor ein anderes internes Protokoll (intern beim TX-C) als der TXT.
Diese Sensoren sind nicht austauschbar.
Es gibt keine Wahl für einen echten digitalen oder analogen Ultra-Sensor, die 3 ist eine Wahl
Mit 3 wählen Sie, wie der Eingang mit dem Sensor umgeht. Wie ich mich gut erinnere, handelt es sich um ein Protokoll zum Senden (Einschalten) und Empfangen einer kleinen Folge von Impulsen.
In der TA sehen Sie nur das Ergebnis der Messung und nicht wie.
================================================================
http://stefanbrunner.com/fischertechnik-tx-inputs/
Ultrasonic Inputs
The Ultrasonic TX sensor is special in a way to all other fischertechnik sensors. It does not appear to deliver a resistance or a voltage level correlated to its distance. The sensor itself appears to communicate via digital messages with the processor. I do not have such a sensor so that I could sniff the protocol. But from probing around it looks to me that the sensor uses "bit banging" on a Universal input to transfer its message. If one would know that protocol it would be another very nice way to interface with the TX brick to other microcontrollers such a PIC, AVR, or Arduino. If I get my hands on one, I will sniff the protocol and publish it here.

Code: Alles auswählen


DWORD SetFtUniConfig (HANDLE fthdl, int shmId, int idxIO, int mode, bool digital) {

    if ( (errCode=IsHandleValid(fthdl)) != FTLIB_ERR_SUCCESS)
        return errCode;

    //Log(LOG, "SetFtUniConfig, shmId= %d, idxIO= %d, mode= %d, digital= %d",shmId, idxIO, mode, digital);

    //  fill fish.X1 config structure
    SetFishX1ConfigUni(shmId, idxIO, mode, digital);

    return FTLIB_ERR_SUCCESS;
    
    void SetFishX1ConfigUni(int shmId, int idx, int mode, bool digital) {

    if ( idx < 0 || idx >= IZ_UNI_INPUT )
        return;

    FISH_X1_TRANSFER *pTA = FishX1Transfer[shmId];

    //Log(LOGPRINT,"SetFishX1ConfigUni, idx= %d, mode= %d, digital= %d", idx, mode, digital);

    //  set mode (U/R), analog/digital for uni io's in config structure
    pTA->ftX1config.uni[idx].mode = (UINT8) mode;
    pTA->ftX1config.uni[idx].digital = (BOOL8) digital;

    //  clean uni value in order not to get overrun at the very first moment after mode change
    pTA->ftX1in.uni[idx] = 0;

    //  config change, increment config_id
    pTA->ftX1state.config_id += 1;

    //FishX1Transfer[shmId]->ftX1config.uni[idx].mode = (UINT8) mode;
    //FishX1Transfer[shmId]->ftX1config.uni[idx].digital = (BOOL8) digital;
}
    

Benutzeravatar
ski7777
Beiträge: 844
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: RoboPro Umschaltung der Eingänge

Beitrag von ski7777 » 23 Apr 2020, 21:41

fishfriend hat geschrieben:
22 Apr 2020, 00:37
Problem 2 das sind nur 36 Bytes
Also grundsätzlich stimmen alle Datenstrukturen in dem Artikel.
fishfriend hat geschrieben:
22 Apr 2020, 00:37
Problem 3 multipliziert <--- ??? (Wirklich?)
Ne. Tatsächlich Addiert. War mein Fehler. Ist mir selbst vor ca. 4 Wochen aufgefallen.
fishfriend hat geschrieben:
22 Apr 2020, 00:37
Problem 4 Da sind 8 Befehle in der Tabelle. Es sind vom RoboPro-Test aber nur 5 anwählbar.
Ja. Liegt daran, dass ROBOPRo den 15k-Bereich nicht unterstützt (der ft:duino auch nicht, oder?) und Distanz digital die selben Ergebnisse wie Distanz Analog bring (siehe letzter Abschnitt des Artikels)
fishfriend hat geschrieben:
22 Apr 2020, 00:37
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:
Und jetzt vergisst du das bitte ganz schnell. Haha. In den Dateien steht ganz viel Zeug drin, was nicht stimmt. Leider half da nur ausprobieren. Das allermeiste solltest du aber in meinem Artikel finden.
fishfriend hat geschrieben:
22 Apr 2020, 00:37
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.
Exakt.
fishfriend hat geschrieben:
22 Apr 2020, 00:37
Ob nun ein analoger Ultraschall existiert kann ich leider nicht ausprobieren, da ich meine Sensoren nicht finde.
Am besten wertest du einfach beides aus.
fishfriend hat geschrieben:
22 Apr 2020, 00:37
Ich bin mal gespannt auf die Konfiguration der Counter...
Ich habe das meiste ja durch Sniffing analysiert und kann dir deshalb versprechen, dass Counter nicht konfiguriert werden. Halte dich am besten an meine Ergebnisse.
Insgesamt gilt für den 5er: 4Bytes Nullen, 8 Bytes wie von dir analysiert, 4 Bytes Einsen (das sind theoretisch die Counter), und dann 20 Bytes Nullen.

Ich hoffe, dass bringt ein bisschen mehr Licht ins Dunkel.

Viele Grüße
Raphael

P.S.: Vielleicht schaffen wir es ja im Rahmen der Convention einen funktionierenden Extension Support zu bauen :)

fishfriend
Beiträge: 364
Registriert: 26 Nov 2010, 11:45

Re: RoboPro Umschaltung der Eingänge

Beitrag von fishfriend » 23 Apr 2020, 23:56

Hallo...
Es gibt da ja noch die dritte ("neuste") Zip Datei zur TX-C-Programmierung und halt die Python (die kannte ich noch nicht) wo die 88 Bytes stehen und halt die Reihenfolge der Bytes.
Ich bin mir nicht sicher ob der 15k Bereich bei den ersten Robo-IF drin war oder nicht. Ist zu lang her. Ich hab zwar noch eins hier, aber hat ja nichts mit dem TX zu tun, um jetzt die Schaltung von den Beta-Interfaces zu analysieren.

Ich hab ja auch sniffing gemacht, halt nur mit dem ftduino.
Das war ziemlich aufwendig, da ich mir die Werte über die Counter-Werte anzeigen ließ.
Wenn man da 60 (88) Werte hat, kommt da einiges zusammen. Ich war schon drauf und dran mir ein Display dranzuhängen.
Schlimmer war aber der UINT8+BOOL ungleich INT. Die Konvertierung hab ich dann gelassen und einfach nur INT verwendet.
Na ja, Arduino IDE und Anfänger ist eine schlechte Kombi ... :-)

Also mit der Konfiguration der Counter bin ich mir nicht sooo sicher.
Ich kann momentan nur Vermuten wen es betrifft:

3.6.3 Impulszähler und 3.6.2 Warten auf EIngang
Im Kontextmenue vom Impulszähler steht, das die Counter als digitale Zähler ausgewertet und nicht als schnelle Zähler - das geht nur über Distanz.
Entweder macht das dann RoboPro selbst (vermutlich) oder es steht an anderer Stelle.
Wie gesagt an dem Punkt bin ich aber noch nicht.

Tja die Extension...,
das I2C (von RoboPro),
das Display,
der Distanz-Motor Notstopp (ist schon drin, muss noch getestet werden)
Counter start ohne Motorcommandwechsel (zu Anfang einmal starten, damit er mit dem Motor sofort läuft)
Counter Reset einbinden...
(Reihenfolge willkürlich)

Ich meine das DIng läuft ja. Ich baue gerade viele Modelle um die RoboPro-Programme zu testen. Ich sammle auch Sachen die man in der Anleitung zum ftduino evtl. aufnehmen könnte, mache Fotos...
Ist halt Hobby...
Ja, ich gebe zu das mit der Extension verfolgt mich schon eine Ganze Zeit. Ich stelle mir vor, wie man mit RoboPro mit einen Arudino Uno und einem Stapel von Motorshields ein Industriemodell 4.0 steuert... Ganz so weit bin ich nicht davon entfernt... (Ich liebe Punkte:-)
Mit freundlichen Grüßen
fishfriend
Holger Howey

Antworten