Sie sind nicht angemeldet.

Anzeigen

**Wir werden in den kommenden Tagen einen Umzug auf einen neuen Server durchführen. Im Rahmen dieser Maßnahme wird das Forum ca. 1 Stunde nicht erreichbar sein.** nslu2-info.de ist ein privates Projekt von mir, welches jeden Monat aus eigener Tasche finanziert wird. Mit einer freiwilligen Spende wird der Erhalt und der weitere Ausbau dieses Forums unterstützt. Um mich beim Erhalt des Forums zu unterstützen, kannst Du entweder via Flattr oder Paypal spenden. Ich bedanke mich schon jetzt bei allen Unterstützern.

Lieber Besucher, herzlich willkommen bei: Die NSLU2 Community****wenns ums speichern und streamen geht****. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

1

29.11.2008, 16:23

serielle Kommunikation - Porteinstellungen

Hallo!
So, ich versuche jetzt schon seit über einem Monat über ein RS232-USB-Adapter seriell Befehle auszugeben, aber es gibt nur Probleme!
Es funktioniert mit Picocom, aber das kann ich nicht für meinen Zweck einsetzen.
Ich habe nun endlich mal meienn Laptop seriell an dem Adapter an der NSLU2 angeschlossen um zu schaun was überhaupt rausgeht.
Mit 'stty' habe ich dann die Porteinstellungen erst einmal so vorgenommen, daß überhaupt etwas am Laptop angezeigt wird. Das Problem ist, daß der Erste 'Befehl' direkt ausgegeben wird, aber danach ersteinmal nichts.
Wenn ich aber eine etwas größere Textdatei auf den seriellen Port ausgebe, wird dieser Übertragen.. Ich dachte erst an Puffer (diese flush-Geschichte), aber dann müssten ja die vorher unterdrückten Befehle rausgehen..
Also kleine Zeichenketten werden nach dem ersten Versenden Unterdrückt, Lange Zeichenketten werden übertragen und danach geht auch wieder einmal eine kurze Zeichenkette...
Kann sich jemand den Fehler vorstellen?
Ich habe schon einige Einstellungen bei stty verwendet, aber bisher erfolglos :(..
gz

Anzeigen

warti

Forensupporter

Beiträge: 244

Verwendetes NAS-Device: NSLU2

Firmwareversion / your current Firmware: Debian

  • Nachricht senden

2

01.12.2008, 08:41

AW: serielle Kommunikation - Porteinstellungen

Da keiner eine Idee zu habe scheint, probier ich es mal:

Wie sehen denn die Kommandos aus?
Hast Du mal versucht die Kommandos mit einem Newline (\n) oder CR (\r) abzuschließen?
Also statt
echo "tu was" > /dev/ttyX
sowas
echo "tu was\n" > /dev/ttyX

Wenn das nicht geht würde ich versuchen ein kleines PERL-Skript oder C-Prg. zu schreiben, dass nach jedem senden das serielle Interface schließt.

MfG
Werner

Anzeigen

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

3

01.12.2008, 17:01

AW: serielle Kommunikation - Porteinstellungen

Nee, ha leider nicht geklappt.. Ich versteh das alles nicht.. Woran liegt das denn überhaupt, wenn Du sagst, daß die Verbindung ebendet werden soll nach dem Senden?? Weil dann der Puffer geleert wird??

warti

Forensupporter

Beiträge: 244

Verwendetes NAS-Device: NSLU2

Firmwareversion / your current Firmware: Debian

  • Nachricht senden

4

01.12.2008, 20:33

AW: serielle Kommunikation - Porteinstellungen

Schade :(

Ich hätte mir so ein Prg. vorgestellt.

http://www.cc-c.de/german/linux/linux-serial.php
Und daraus irgendwie sowas:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

### Serielle Schnittstelle definieren
$port = "/dev/ttyS0";	# entspricht COM1

### mit stty die Port-Einstellungen setzen
system "stty 2400 ixon -echo < $port";
### Port als COM öffnen
open(COM, "+>$port") or die "can't open $port";
select(COM);	# COM als standard E/A festlegen
$| = 1;		# Character einzeln ausgeben = nicht puffern

### Sendet Q1 an die USV zur Statusabfrage
printf("Q1\015");	# Hier Befehl rein <<<<
sleep(1);		# 2400 BPS sind recht langsam ...
sysread(COM, my ($line), 50);
printf(stderr $line);	# Ausgabe auf Console

close(COM);

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

5

02.12.2008, 07:02

AW: serielle Kommunikation - Porteinstellungen

Hallo!
Also ich hatte ursprünglich vor, das ganze so einfach zu lösen:

echo "$befehl" >/dev/ttyUSB1;
Also bei der internen Schnittstelle soll es so auch klappen.
Weißt Du denn evtl. warum sich die NSLU so verhält? Also ich habe dafür keine Erklärung. Es wird ja tatsächlich etwas ausgegeben, aber eben nicht alles und schon gar nicht immer. :(

warti

Forensupporter

Beiträge: 244

Verwendetes NAS-Device: NSLU2

Firmwareversion / your current Firmware: Debian

  • Nachricht senden

6

02.12.2008, 14:39

AW: serielle Kommunikation - Porteinstellungen

Hmm,

wie vorgeschlagen:

echo -e $befehl "\n" >/dev/ttyUSB1;

geht wohl nicht. (Das -e bei echo hattest Du doch angegeben, oder?)

Warum sich die SLUG so verhält - k.a. Aber Serial-USB Konverter können sich schon mal seltsam verhalten.

Hast Du schon das kleine PERL-Progrämmchen probiert?

Mfg
Werner

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

7

02.12.2008, 23:59

AW: serielle Kommunikation - Porteinstellungen

Hallo!
Also das mit dem "e" habe ich bei dem echo schon mal gemacht, aber noch nicht zusammen mit dem /n.. Werde ich morgen nachholen, auch mit dem perl-Programm! Wäre schön, wenn es ginge.. Heute hatte ich leider keine Zeit gehabt. Ich probier das beides morgen Nachmittag aus und hoffentlich klappt es :rolleyes:.. Danke schon mal!!

EDIT:// So, ich habe es nun versucht mit echo -e und dem \n, aber das ging hat leider nicht funktioniert..
Bei dem kleinen Testprogramm von Dir habe ich leider ein Problem, bzw. die NSLU hat damit eins:

=: No such file or directory
system: No such file or directory
/testprogramm: 7: Syntax error: word unexpected (expecting ")")


Ich will nicht ausschließen, daß ich dafür evtl.gerade zu blöd bin, aber muß ich da noch was beachten?

warti

Forensupporter

Beiträge: 244

Verwendetes NAS-Device: NSLU2

Firmwareversion / your current Firmware: Debian

  • Nachricht senden

8

04.12.2008, 06:18

AW: serielle Kommunikation - Porteinstellungen

Zitat

Ich will nicht ausschließen, daß ich dafür evtl.gerade zu blöd bin, aber muß ich da noch was beachten?


PERL installiert?

9

04.12.2008, 16:25

AW: serielle Kommunikation - Porteinstellungen

Hallo!
Weil ich wahrscheinlich am gleichen Problem sitze, möchte ich mich mal einmischen.

Hinter meinem /dev/ttyUSB0 steckt ein kleines Gerät namens SystaInterface, das mit die Daten meiner Heizung ausliest. Auf dem Gerät werkelt der bekannte Chip von FTDI.
dmeg gibt mir aus:
...
usbserial.c: FTDI FT232BM Compatible converter detected
usbserial.c: FTDI FT232BM Compatible converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
usbserial.c: USB Serial support registered for USB-UIRT Infrared Receiver/Transmitter
usbserial.c: USB Serial support registered for Home-Electronics TIRA-1 IR Transceiver
ftdi_sio.c: v1.3.5:USB FTDI Serial Converters Driver
...

Das Auslesen und Steuern mit picocom funktioniert prima:
picocom --baud 115200 --parity n --databits 8 /dev/ttyUSB0

Über /dev/ttyUSB0 trudeln bei mir alle 10 sec Daten rein.
Die kann ich prima lesen:
- mit perl (Device::SerialPort)
- mit socat: socat - /dev/ttyUSB0,raw,echo=0,crnl

Das Schreiben auf /dev/ttyUSB0 klappt nur dann, wenn ich picocom vorher aufgerufen hatte. Und dann habe ich genau einen Schreibversuch.
echo -e '$CSV' '\n'|socat - /dev/ttyUSB0,raw,echo=0,crnl
(Der String $CSV ist der Befehl, auf den /dev/ttyUSB0 reagieren soll.)

Beim nächsten Schreibversuch bekomme ich keinen Fehler - aber leider auch keine Antwort von /dev/ttyUSB0.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl
$| = 1;

############################################################################
##  Packages
############################################################################
use Device::SerialPort;


############################################################################
##     main
############################################################################

my $serial = Device::SerialPort->new("/dev/ttyUSB0");

$serial->baudrate(115200);
$serial->databits(8);
$serial->stopbits(1);
$serial->parity("none");

$serial->purge_all();
$serial->rts_active(0);
$serial->dtr_active(1);

my $cmd = "\$CSV\n";
  
while(1){
   $rc = $serial->write($cmd);             # Write

   select(undef, undef, undef, 1);         # Wait one second
  
   my($count, $out) = $serial->read(1000); # Read response
   print "cmd=$cmd , rc=$rc ... count=$count, $out\n";
}
Als Ergebnis bekomme ich:
cmd=$CSV
, rc=5 ... count=0,
cmd=$CSV
, rc=5 ... count=0,

Es wurden (vielleicht) fünf Zeichen geschrieben: $rc=5 (also: "$CSV<CR>").

Ich habe den Verdacht, dass picocom etwas an /dev/ttyUSB0 ändert (initialisiert?), doch nach dem ersten "normalen" Zugriff durch socat oder perl ist alles wieder futsch.

Hallo warti,
ich habe Dein Perlprogramm abgeändert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
$| = 1;         # Character einzeln ausgeben = nicht puffern
### Serielle USB-Schnittstelle definieren
$port = "/dev/ttyUSB0";

### mit stty die Port-Einstellungen setzen
system "stty 115200 ixon -echo < $port";
### Port als COM öffnen
printf("-> gesetzt \n");
open(COM, "+>$port") or die "can't open $port";
print("-> geoeffnet \n");
select(COM);    # COM als standard E/A festlegen

### Sendet Q1 an die Heizung zur Statusabfrage
my $cmd="\$CSV\n";
printf($cmd);   # Hier Befehl rein <<<<
sleep(1);              
sysread(COM, my ($line), 50);
printf(stderr $line);   # Ausgabe auf Console

close(COM);
Hier erhalte ich stets folgende Ausgabe:
-> gesetzt
-> geoeffnet
und dann wartet das Programm.
(Ob ich vorher picocom aufgerufen hatte - oder nicht - spielt keine Rolle.) Ich bekomme also keine Antwort.

Habe ich das USB-Device so eingestellt, dass es die Heizungdaten automatisch im 10-sec-Takt auf die Schnittstelle schreibt, so erhalte ich die Daten von der Schnittstelle:
-> gesetzt
-> geoeffnet
================================
04.12.2008 16:12

Das Lesen klappt also, das Schreiben kommt nicht bis zum Gerät durch.

(Ich arbeite mit Unslung V2.3R63-uNSLUng-6.10-beta.)
Ich bin für jeden Tipp dankbar.
Danke.

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

10

04.12.2008, 17:19

AW: serielle Kommunikation - Porteinstellungen

Hallo!
JA, das Problem scheint echt bei un das gleiche zu sein!
PERL habe ich installiert, also (ipkg install perl)...
Mit dem geänderten bekomme ich auch folgende Ausgabe:

-> gesetzt
-> geoeffnet


und warten.. ich habe dann mal einen Befehl eingegeben, aber es ist nichts passiert..

warti

Forensupporter

Beiträge: 244

Verwendetes NAS-Device: NSLU2

Firmwareversion / your current Firmware: Debian

  • Nachricht senden

11

05.12.2008, 07:54

AW: serielle Kommunikation - Porteinstellungen

Lasst doch mal die Befehle mit der Error Abfrage weg. Und ein bisschen mehr printf-debugging...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl
$| = 1;         # Character einzeln ausgeben = nicht puffern
### Serielle USB-Schnittstelle definieren
$port = "/dev/ttyUSB0";

### mit stty die Port-Einstellungen setzen
system "stty 115200 ixon -echo < $port";
### Port als COM öffnen
printf("-> gesetzt \n");
open(COM, "+>$port") or die "can't open $port";
print("-> geoeffnet \n");
select(COM);    # COM als standard E/A festlegen

print("-> COM selected \n");

### Sendet Q1 an die Heizung zur Statusabfrage
my $cmd="\$CSV\n";
printf($cmd);   # Hier Befehl rein <<<<

print("-> cmd send \n");
sleep(1);              

close(COM);
print("-> COM geschlossen \n");

12

05.12.2008, 18:01

AW: serielle Kommunikation - Porteinstellungen

Hallo,

ich habe den Code noch etwas abgeändert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl
$| = 1;         # Character einzeln ausgeben = nicht puffern
### Serielle USB-Schnittstelle definieren
$port = "/dev/ttyUSB0";

### mit stty die Port-Einstellungen setzen
system "stty 115200 ixon -echo < $port";
printf("-> gesetzt \n");

### Port als COM öffnen
open(COM, "+>$port") or die "can't open $port";
print STDOUT ("-> geoeffnet \n");
select(COM);    # COM als standard E/A festlegen
print STDOUT ("-> COM selected \n");

### Sendet Q1 an die Heizung zur Statusabfrage
my $cmd="\$CSV\n";
printf($cmd);   # Hier Befehl rein <<<<

print STDOUT ("-> cmd send \n");

close(COM);
print STDOUT ("-> COM geschlossen \n");
Die Ausgabe lautet:
-> gesetzt
-> geoeffnet
-> COM selected
-> cmd send
-> COM geschlossen

Das Programm läuft hübsch durch.
Es scheint so, als ob irgendwas geschrieben würde.

warti

Forensupporter

Beiträge: 244

Verwendetes NAS-Device: NSLU2

Firmwareversion / your current Firmware: Debian

  • Nachricht senden

13

05.12.2008, 18:37

AW: serielle Kommunikation - Porteinstellungen

Äh

printf

oder

print

?

14

05.12.2008, 22:11

AW: serielle Kommunikation - Porteinstellungen

print oder printf ist egal.
Ich nutze in der (Perl-)Praxis fast ausschließlich print.
Falls es dann doch mal formatiert sein muss, greife ich zu printf - das ist aber ziemlich selten.

Ich habe sicherheitshalber beide Varianten durchgetestet (alles mit print und alles mit printf). Das Ergebnis ist aber so, wie ich das im Beitrag oben schrieb.

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

15

16.01.2009, 10:53

AW: serielle Kommunikation - Porteinstellungen

Hallo!

So, ich war eine Weile nicht da und habe nun endlich mal das kleine Testprogramm laufen lassen.. Also es erscheint:
-> gesetzt
-> geoeffnet
-> COM selected
-> cmd send
-> COM geschlossen
#
Aber es scheint nichts zu passieren. Ich habe die Datenrate auf meine 2400 angepasst und den Port auf /dev/ttyUSB1 geändert so wie es sein soll, aber leider wird scheinbar kein Befehl gesendet...jedenfalls reagiert der Controller nicht auf die Befehle.. anders als direkt über picocom...
kann man sonst picocom irgendwie dazu bringen, daß die Eingabe automatisch erfolgt? Also es klappt ja direkt mit
picocom -b 2400 /dev/ttyUSB1
aber es soll ja automatisch laufen..:confused:

sowas in der Art:
picocom -b 2400 /dev/ttyUSB1
sende sb100
schließe picocom

das muß doch irgendwie gehen, oder?

warti

Forensupporter

Beiträge: 244

Verwendetes NAS-Device: NSLU2

Firmwareversion / your current Firmware: Debian

  • Nachricht senden

16

16.01.2009, 11:18

AW: serielle Kommunikation - Porteinstellungen

Versuchs mal damit?
http://en.kioskea.net/forum/affich-37067…nd-run-commands

Dies ist zwar ein Beispiel für Telnet aber vielleicht geht es so ähnlich.
Allerdings müssen noch Pakete installiert werden:

Zitat

"but you need to install EXPECT and TCL packages on your unix system."


Viel Erfolg,
Werner

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

17

16.01.2009, 14:19

AW: serielle Kommunikation - Porteinstellungen

Hallo!
Danke für die schnelle Hilfe.. Aber alleine das installieren der Pakete bekomme ich nicht hin.. gibt es keine befehle um direkt etwas an picocom zu senden? So in der Art
echo "sb100" > picocom -b 2400 /dev/ttyUSB1
Ich habe schon so viele Anleitungen durchgelesen und es klappt einfach nicht..ärgerlich..

18

17.01.2009, 11:07

AW: serielle Kommunikation - Porteinstellungen

Hi,

wahrscheinlich hast du es schon ausgetestet.

Du schreibst ja, dass lange Zeichenketten mit echo.... übertragen werden. Was ist denn, wenn du eine längere Zeichenkette mit zum Beispiel echo"................................................sb100" > /dev/ttyUSB0 überträgst?
Der MIC800 hat damit kein Problem. Er ignoriert die Zeichen davor.

Gruß Stone

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

19

18.01.2009, 13:02

AW: serielle Kommunikation - Porteinstellungen

Hallo!
Oh, gute Idee!!
Bisher hat das aber noch nicht geklappt. Ich habe eine Datei erstelle mit langer Zeichenkette und am ende sb100. Danach
cat /test > /dev/ttyUSB0
.. Ich kann das leider grad auch nicht testen was da aus dem Adapter nun genau rausgeht weil die NSLU 800km weiter in München steht. Aber bewegt hat sich die Kamera leider noch nicht..
// Ach ja, hab Dein Video gesehen! Sehr schön!
Ich habe auch mal den Autor von picocom angeschrieben ob es die Möglichkeit
echo "sb100" > picococom -b 2400 /dev/ttyUSBx
irgendwie gibt... bisher erfolglos..


//EDIT:
So, picocom funktioniert defnitiv nicht auf diese Weise so wie ich es versuch habe.. Antwort vom Autor:

"... [FONT=&quot]Picocom expects its standard input to be connected to a "tty" device. It will not work if it is not (as is the case when you try to use it in a pipeline)...."

Vielleicht sollte ich die interne serielle Schnittestelle doch freilegen und das Problem so lösen.. Aber schön finde ich die Idee nicht..


[/FONT]

gznw

Fortgeschrittener

  • »gznw« ist der Autor dieses Themas

Beiträge: 158

Firmwareversion / your current Firmware: Unslung 3.18

  • Nachricht senden

20

22.01.2009, 16:51

AW: serielle Kommunikation - Porteinstellungen

:D:D:D
So, nach soo langer Zeit klappt es endlich!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
:D:D:D
Entscheidend war der Tipp mit den Zeichen vor dem eigentlichen Befehl, damit die ganze Zeichenkette ausgegeben wird!
Es klappt allerding nicht in der Form:
echo"............................................. ...sb100" > /dev/ttyUSB0
sondern mit socat:

echo -e '.................................................................sa80' '\n'|socat - /dev/ttyUSB0,raw,echo=0,crnl
;)
vielen vielen Dank Stone!!

Nun kann ich mich endlich an die Steuerung über die HP machen..
Bin total begeistert!
:D:D:D

Social Bookmarks