PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SolarController SCD20 über RS232 ansprechen



tobidd
06.11.13, 10:35
Hallo liebe Forenuser.

Mein Name ist Tobi und ich bin hier der Neue.

Das Forum hier ist so meine letzte Hoffnung mein Projekt doch noch erfolgreich zuende zu bringen.

Folgendes.

Ich habe zu Hause einen Raspberry PI (2. Generation).

Mit diesem überwache ich momentan 16 Temp. und Luftfeuchte Sensoren via 1-Wire.

Funktioniert Super.
Die Daten werden in einer Datenbank gespeichert und dann mit PHP und RRD ausgewertet und angezeigt.
Weiterhin habe ich eine 8fach Relaiskarte über RS232 angeschlossen, über diese werden 20 Lüfter (5 Lüfterkreise) gesteuert, in Abhängigkeit von Temperatur, Luftfeuchte, Taupunkt und Absoluter Feuchte.
Kurzum eine Vollautomatische Kellerlüftung.

Jetzt habe ich mir 2 Solarmodule gekauft mit einem Solarladeregler von Conrad (SCD20), dieser hat eine RS232 Schnitstelle die ich auslesen möchte.

Nur leider weis ich absolut nicht wie ich das anstellen soll.
Vom Support habe ich folgendes bekommen.


Übertragungsprotokoll SolarController - PC

Parameter:
Baudrate: 1200
Parity: no
Databits: 8
Stopbits: 1

Zur Abfrage der Daten muß der PC F<CRLF> senden.
Antwort des SCD:
Antwortdaten werden in dieser Reihenfolge in ASCII Zeichen zurückgegeben.
Zum Testen kann das HyperTerminal-Programm benutzt werden.

R:aktuelle Spannung;aktueller Strom;aktuelle Temperatur;Minimum Spannung;Maximum Spannung;Minimum Strom;Maximum Strom;CRLF

Zum Löschen der Minimum- Maximum Daten muß der PC L<CRLF> senden.
Die Werte werden sofort gelöscht.

Mein Problem ist jetzt, wie genau muss ich das zum Solarcontroler senden?

ich habe schon ne ganze Menge versucht.

Mir ist nicht klar wie ich CR und LF senden kann, muss ich F in ASCII umwandeln oder nicht?

Geht es mit echo oder geht es nicht mit echo?

hier meine Versuche (alle ohne Erfolg):



echo "\xFF\x01\x01" > /dev/ttyUSB0
echo "\xFF\x01\x02" > /dev/ttyUSB0
echo "\xFF\x00\x01" > /dev/ttyUSB0
echo "\xFF\x02\x01" > /dev/ttyUSB0
echo "\xFF\x02\x01" > /dev/ttyUSB1
echo "\xFF\x02\x01" > /dev/ttyUSB1
echo "\xFF\x01\x01" > /dev/ttyUSB1
echo "\xFF\x01\x02" > /dev/ttyUSB1
echo "\xFF\x00\x01" > /dev/ttyUSB1
echo -e "\xFF\x01\x01" > /dev/ttyUSB0
echo -e "\xFF\x01\x00" > /dev/ttyUSB0
echo -e "\xFF\x01\x01" > /dev/ttyUSB0
echo -e "\xFF\x01\x01" > /dev/ttyUSB0
echo -e "\xFF\x01\x00" > /dev/ttyUSB0
echo -e "\xFF\x01\x01" > /dev/ttyUSB0
echo -e "\xFF\x0\x01" > /dev/ttyUSB0
echo -e "0x01" > /dev/ttyUSB0
echo -e "0x05" > /dev/ttyUSB0
echo -e "0x10" > /dev/ttyUSB0
echo -e "01 10 00 00 00 00 2b" > /dev/ttyUSB0
echo -e "01\ 10\ 00\ 00\ 00\ 00\ 2b" > /dev/ttyUSB0
echo -e "0110000000002b" > /dev/ttyUSB0
echo -e "ehelo" > /dev/ttyUSB0
echo -e "ehlo" > /dev/ttyUSB0
echo -e "get data" > /dev/ttyUSB0
echo -e "01510000000039" > /dev/ttyUSB0
echo -e "11100011" > /dev/ttyUSB0
echo -e "00000000" > /dev/ttyUSB0
echo -e "F<CRLF>" > /dev/ttyUSB0
echo "" | hexdump -c
echo -e "F<CRLF>" > /dev/ttyUSB0 | hexdump -c
echo -e "F<CRLF>" | hexdump -c
echo -e "F\<CRLF>" | hexdump -c
echo "F\<CRLF>" | hexdump -c
echo "F<CRLF>" | hexdump -c
echo -n "F<CRLF>" | hexdump -c
echo -e "F<CR><LF>" > /dev/ttyUSB0
echo -e "F<CRLF>" > /dev/ttyUSB0
echo -e "F<CR><LF>" > /dev/ttyUSB0
echo -e "F<CRLF>" > /dev/ttyUSB0
echo -e "<ESC>F<CR><LF>" > /dev/ttyUSB0
echo "<ESC>F<CR><LF>" > /dev/ttyUSB0
echo "F<CR><LF>" > /dev/ttyUSB0
echo "F" > /dev/ttyUSB0
echo -e "F" > /dev/ttyUSB0
echo -e "0xF" > /dev/ttyUSB0
echo -e "F" > /dev/ttyUSB0
echo "F'CRLF'" > /dev/ttyUSB0
echo "F" > /dev/ttyUSB0
echo "F\n" > /dev/ttyUSB0
echo "\'ESX\'F\'CRLF\'" > /dev/ttyUSB0
echo -e "\'ESX\'F\'CRLF\'" > /dev/ttyUSB0
echo -e "0x15" > /dev/ttyUSB0
echo -e "L" > /dev/ttyUSB0
echo -e "F" > /dev/ttyUSB0
echo -e "<ESC>F<CR><LF>" > /dev/ttyUSB0
echo -e "<ESC>F<CRLF>" > /dev/ttyUSB0
echo -e "<ESC>F<CRLF>" > /dev/ttyUSB0
echo -e "<ESC>F<CRLF>" > /dev/ttyUSB0
echo -e "<ESC>F<CRLF>" > /dev/ttyUSB0
echo -e "\xF" > /dev/ttyUSB0
echo -e "\xFF" > /dev/ttyUSB0
echo -e "\xF" > /dev/ttyUSB0
echo -e "xF" > /dev/ttyUSB0
echo -e " ^QF<undef>" > /dev/ttyUSB0
echo -e " ^Qf<undef>" > /dev/ttyUSB0
echo -e " ^Qf" > /dev/ttyUSB0
echo -e " ^Qf\r\n" > /dev/ttyUSB0
echo -e "^Qf\r\n" > /dev/ttyUSB0
echo -e "^Qf" > /dev/ttyUSB0
echo -e "^QF" > /dev/ttyUSB0
echo -e "F\r\n" > /dev/ttyUSB0
echo -e "xF\r\n" > /dev/ttyUSB0
echo -e "\xF\r\n" > /dev/ttyUSB0
echo -e "\F" > /dev/ttyUSB0
echo -e \F > /dev/ttyUSB0
echo -e F > /dev/ttyUSB0
echo F > /dev/ttyUSB0
echo -n F > /dev/ttyUSB0
echo -n "F" > /dev/ttyUSB0
echo -e "^[F" > /dev/ttyUSB0
echo -e "1xB" > /dev/ttyUSB0
echo -e "ESC [ x" > /dev/ttyUSB0
echo -e "ESC [ ?" > /dev/ttyUSB0
echo -e "F\xFF\x0D" > /dev/ttyUSB0
echo -e "\F\xFF\x0D" > /dev/ttyUSB0
echo -e "\F\x0Ax0D" > /dev/ttyUSB0
echo -e "\^[F\x0Ax0D" > /dev/ttyUSB0
echo -e "\^[F\x0A\x0D" > /dev/ttyUSB0
echo -e "\^[F\x0D\x0A" > /dev/ttyUSB0
echo -e "F\x0D\x0A" > /dev/ttyUSB0
echo -e "\F\x0D\x0A" > /dev/ttyUSB0
echo -e "\^[F\x0D\x0C" > /dev/ttyUSB0
echo -e "\^[F\0x0D\0x0C" > /dev/ttyUSB0
echo -e "\^[F\0x0D\0x0A" > /dev/ttyUSB0
echo -e "\0x1B\F\0x0D\0x0A" > /dev/ttyUSB0
echo -e "\x1B\F\x0D\x0A" > /dev/ttyUSB0
echo "F\r" > /dev/ttyUSB0
echo -n "F\r" > /dev/ttyUSB0
echo -e "F\r" > /dev/ttyUSB0
man echo
echo -e "\eF\r\n" > /dev/ttyUSB0
man echo
echo -e "\e\xF\r\n" > /dev/ttyUSB0
echo -e "\e\xFF\r\n" > /dev/ttyUSB0
echo -e "\e\xF\r\n" > /dev/ttyUSB0
echo -e "\e\xF\r" > /dev/ttyUSB0
man echo
info coreutils 'echo invocation'
echo -e "\e\70\r" > /dev/ttyUSB0
echo -e "70" > /dev/ttyUSB0
echo -e "x70" > /dev/ttyUSB0
echo -e "102" > /dev/ttyUSB0
echo -e "70 32 39 67 82 76 70 39" > /dev/ttyUSB0
echo -e "\x70\x32\x39\x67\x82\x76\x70\x39" > /dev/ttyUSB0
echo <ESC> <0> <CR> <LF>
echo "<ESC> <0> <CR> <LF>" > /dev/ttyUSB0
echo "<ESC> <70> <CR> <LF>" > /dev/ttyUSB0
echo "<ESC> <102> <CR> <LF>" > /dev/ttyUSB0
echo "<ESC><102><CR><LF>" > /dev/ttyUSB0
echo "<ESC><70><CR><LF>" > /dev/ttyUSB0
echo -e "<ESC><70><CR><LF>" > /dev/ttyUSB0
echo -n "<ESC><70><CR><LF>" > /dev/ttyUSB0
echo -n "<ESC><F><CR><LF>" > /dev/ttyUSB0
echo -e "<ESC><F><CR><LF>" > /dev/ttyUSB0
echo "<ESC><F><CR><LF>" > /dev/ttyUSB0
echo F<CRLF>
echo "F<CRLF>"
echo "F<CRLF>" > /dev/ttyUSB0
echo -n "F<CRLF>" > /dev/ttyUSB0
echo -e "F<CRLF>" > /dev/ttyUSB0


könnt ihr mir da eventuell weiterhelfen?

Grüße Tobi

derguteweka
06.11.13, 12:56
Moin,

Kannst ja mal
printf "\x46\xd\xa" > /dev/ttyUSB0 versuchen.
Aber vorher muss die Schnittstelle irgendwie auf die 1200 Bd, etc. eingestellt werden. Und irgendwie musst du auch an die Antwort des Moduls kommen...

Einfacher waer's wahrscheinlich, erstmal mit minicom oder sowas in der Art zu arbeiten.

Gruss
WK

tobidd
06.11.13, 13:03
hallo

danke für die Antwort.
leider ´kommt da auch nix zurück.
zumindestens sehe ich auf der console nix, wie muss ich das machen, das ich es auf der console sehe. ich dachte immer das die antwort automatisch auf der console landet.

die Schnittstelle ist folgendermaße eingestellt.

stty -a </dev/ttyUSB0



speed 1200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke



Gruß Tobi

derguteweka
06.11.13, 19:40
Moin,

Klar kommt da nix "zurueck". Wieso sollte auch - es "horcht" ja keiner an der Seriellen.

Ich weiss nicht, ob sowas funktioniert:


cat /dev/ttyUSB0
im einen Fensterchen und in einem anderen Fensterchen dann den printf absetzen.
Aber genau fuer sowas sind eigentlich Terminalprogramme wie z.b. minicom gedacht.

Gruss
WK

tobidd
06.11.13, 20:32
Super danke,das hat funktioniert.

Aber wie kann ich das jetzt am einfachsten mit nem Shell script lösen?

Eventuell mit screen?
Mit pipe hat es nicht funktioniert.

Gruß Tobi

derguteweka
06.11.13, 20:38
Moin,

Vielleicht kannste dir hier was abschauen...
http://www.linuxforen.de/forums/showthread.php?t=275869

Gruss
WK

tobidd
07.11.13, 08:19
Danke für den Link.
Gibt es eine Möglichkeit das auch in einem Script zu lösen, also dass Senden und Empfangen?

Gruß Tobi

tobidd
07.11.13, 10:33
So hab es jetzt mit einem Script hinbekommen.

hier der Code:



#!/bin/bash
stty -F /dev/ttyUSB1 1200
cat < /dev/ttyUSB1 > testread &

bgPid=$!
stty -F /dev/ttyUSB1 1200

printf "\x46\xd\xa" > /dev/ttyUSB1

sleep 1
kill $bgPid > /dev/null 2>&1


DBHOST="xxx"
DBUSER="xxx"
DB="xxx"
DBPASS="xxx"
TABELLE="xxx"


UNIXTIME=`date "+%s"`
DATUM=`date "+%F %T"`

SPANNUNGAKTUELL=`cat testread | cut -d: -f2 | cut -d\; -f1`
STROMAKTUELL=`cat testread | cut -d: -f2 | cut -d\; -f2`
TEMPERATUTAKTUELL=`cat testread | cut -d: -f2 | cut -d\; -f3`
MINSPANNUNG=`cat testread | cut -d: -f2 | cut -d\; -f4`
MAXSPANNUNG=`cat testread | cut -d: -f2 | cut -d\; -f5`
MINSTROM=`cat testread | cut -d: -f2 | cut -d\; -f6`
MAXSTROM=`cat testread | cut -d: -f2 | cut -d\; -f7`

SPANNUNG=`echo $SPANNUNGAKTUELL | tr ',' '.'`
STROM=`echo $STROMAKTUELL | tr ',' '.'`

LEISTUNG=`echo "$SPANNUNG * $STROM" | bc -l`

echo "INSERT INTO ${TABELLE} (spannungaktuell,stromaktuell,leistungaktuell,temp aktuell,minspannung,maxspannung,minstrom,maxstrom, datum,time) VALUES ('${SPANNUNGAKTUELL}','${STROMAKTUELL}','${LEISTUN G}','${TEMPERATUTAKTUELL}','${MINSPANNUNG}','${MAX SPANNUNG}','${MINSTROM}','${MAXSTROM}','${DATUM}', '${UNIXTIME}')" | mysql -h ${DBHOST} -u ${DBUSER} -p''${DBPASS}'' ${DB} >> /var/log/solar_debug.log



Echt super Forum hier.

Danke für eure Hilfe.

Gruß Tobi

derguteweka
07.11.13, 12:47
Moin,


So hab es jetzt mit einem Script hinbekommen

Cool; ich kann kein bash, da haett' ich eh nix qualifiziertes sagen koennen.

Gruss
WK