Hallo zusammen,
Ich versuche, für den TXT eine Java Anwendung zu schreiben, die sich vom PC aus über USB mit dem TXT verbindet. Grundlage dafür ist die bekannte Dokumentation von ft:
http://www.fischertechnik.de/ResourceIm ... ?raid=8757
Leider komme ich an einem Punkt nicht weiter:
- Socket-Verbindung auf Port 65000 wird erfolgreich geöffnet
- Der Befehl 'ftIF2013CommandId_QueryStatus' wird auf den Socket geschrieben, samt abschließendem 'flush()'.
- Anschließend versucht das Programm, dem Socket irgendeine Antwort (ftIF2013Response_QueryStatus) vom TXT zu entlocken. Leider erfolglos, es kommt einfach nix zurück. Der TXT ist wie ein schwarzes Loch
Ich glaube zumindest, mich an die Doku gehalten zu haben. Da C- und Phyton-Anwendungen offensichtlich erfolgreich laufen, mache ich wohl etwas falsch.
Vielleicht kann mir einer von Euch auf die Sprünge helfen? Hat jemand schon mal eine Verbindung mit Java geschafft? Gibt es da vielleicht Besonderheiten zu beachten???
Ich freue mich über jeden Hinweis!
Gruß, Stefan
TXT und Java
Forumsregeln
Bitte beachte die Forumsregeln!
Bitte beachte die Forumsregeln!
Re: TXT und Java
Hallo Stefan,
die Dokumentation ist in großen Teilen nur eine Einführung, wesentliche Datenstrukturen der IP-Telegramme müssen aus dem C++-Quellcode abgeleitet werden.
Zwar kein Java, aber da evtl. doch hilfreich hier meine ersten Gehversuche als MATLAB-Code für MATLAB_R2015B auf OSX 10.10.5 :
% establish TCP/IP communication to TXT
hdFtTXT = tcpclient('192.168.7.2',65000);
%QueryStatus
write (hdFtTXT, uint32(hex2dec('dc21219a')));
data = read (hdFtTXT,24);
sQueryStatus = sprintf('%x', data (4),data(3),data(2),data(1));
if not( strcmp(sQueryStatus, 'bac9723e'))
sQuery= 'Query not ok'
end
sName = char(data(5:20))
sVersion = sprintf('%x', data (24),data(23),data(22),data(21))
%start ONLINE mode
buffer = zeros(1,17,'uint32');
buffer(1)=(uint32(hex2dec('163ff61d')));
write (hdFtTXT, buffer);
data = read (hdFtTXT,4);
sQueryStatus = sprintf('%x', data (4),data(3),data(2),data(1));
if not( strcmp(sQueryStatus , 'ca689f75'))
sQuery= 'ONLINE MODE not ok'
end
pause(10)
%stop ONLINE mode
write (hdFtTXT, uint32(hex2dec('9be5082c')));
data = read (hdFtTXT,4);
sQueryStatus = sprintf('%x', data (4),data(3),data(2),data(1));
if strcmp(sQueryStatus , 'fbf60d2')
sQuery= 'ONLINE MODE stopped'
end
delete (hdFtTXT);
clear hdFtTXT;
Der Code funktioniert soweit, aber erst nachdem Sende- und Empfangslängen genau angegeben waren.
Beim Auswerten der Empfangsdaten muss gemäß "LittleEndian" dekodiert werden, für die Sendedaten passt es offenbar auch so.
Wichtig hier ist u.a. die Ergänzung des Telegramms "Start Online Mode" mit 16 zusätzlichen unit32-Datenwörten. Diesen Hinweis kann man nur aus dem C++-Code ableiten.
Beste Grüße
Christian
die Dokumentation ist in großen Teilen nur eine Einführung, wesentliche Datenstrukturen der IP-Telegramme müssen aus dem C++-Quellcode abgeleitet werden.
Zwar kein Java, aber da evtl. doch hilfreich hier meine ersten Gehversuche als MATLAB-Code für MATLAB_R2015B auf OSX 10.10.5 :
% establish TCP/IP communication to TXT
hdFtTXT = tcpclient('192.168.7.2',65000);
%QueryStatus
write (hdFtTXT, uint32(hex2dec('dc21219a')));
data = read (hdFtTXT,24);
sQueryStatus = sprintf('%x', data (4),data(3),data(2),data(1));
if not( strcmp(sQueryStatus, 'bac9723e'))
sQuery= 'Query not ok'
end
sName = char(data(5:20))
sVersion = sprintf('%x', data (24),data(23),data(22),data(21))
%start ONLINE mode
buffer = zeros(1,17,'uint32');
buffer(1)=(uint32(hex2dec('163ff61d')));
write (hdFtTXT, buffer);
data = read (hdFtTXT,4);
sQueryStatus = sprintf('%x', data (4),data(3),data(2),data(1));
if not( strcmp(sQueryStatus , 'ca689f75'))
sQuery= 'ONLINE MODE not ok'
end
pause(10)
%stop ONLINE mode
write (hdFtTXT, uint32(hex2dec('9be5082c')));
data = read (hdFtTXT,4);
sQueryStatus = sprintf('%x', data (4),data(3),data(2),data(1));
if strcmp(sQueryStatus , 'fbf60d2')
sQuery= 'ONLINE MODE stopped'
end
delete (hdFtTXT);
clear hdFtTXT;
Der Code funktioniert soweit, aber erst nachdem Sende- und Empfangslängen genau angegeben waren.
Beim Auswerten der Empfangsdaten muss gemäß "LittleEndian" dekodiert werden, für die Sendedaten passt es offenbar auch so.
Wichtig hier ist u.a. die Ergänzung des Telegramms "Start Online Mode" mit 16 zusätzlichen unit32-Datenwörten. Diesen Hinweis kann man nur aus dem C++-Code ableiten.
Beste Grüße
Christian