1

Téma: Sériová komunikace

zajímavá věc - nefunguje mi komunikace přes UART v programu SDS-C (kompilátor v.04, firmware Micro light2 je 0x05),
sys[48] je trvale na 1, takže se nic nevypíše (v bufferu sys[49] je stejně pořád -1),
ale když se na zařízení připojím přes telnet nebo hyperterm (nezávisle nebo souběžně s SDS-C, chová se to stejně), tak měnič komunikuje bez chyb, po stisku "Q" nebo "I" a Enter
vypíše stavové údaje, i opakovaně.

Taky mám problém vymyslet, jak přečtený znak zobrazit nebo převést na text.

 cti_meanwell
 {
    serial_text_out('I\r');
    serial_text_out('Q\r');
 cteni_mw:
    if(sys[48] != 0) goto konec_cteni_mw;
    znak = sys[49];
    echo(znak);
    goto cteni_mw;

 konec_cteni_mw:
    return;
 }

V init mám

   serial_set(9600, 8, 1, 0); 

což je stejné jako pro hyperterm.

Tušíte, kde by mohla být zrada ?

2

Re: Sériová komunikace

Když zkusím sekvenci:

  
   serial_set(9600,8,1,0);
   echo(sys[50],sys[51],sys[52],sys[53],sys[54],'\n');

tak dostanu 00000\n.

Vypadá to, že nefunguje inicializace ve funkci serial_set().

3 Naposledy upravil: TiborTeam (2012-02-01 11:32:46)

Re: Sériová komunikace

na rs232 ne echo !!!! ale  například serial_text_out('hodnota i = ', i);
Jo ták ... ty chceš jenom vypsat sys[50] až sys[54] ??? anebo poslat na serial ?????

Otestováno ... taky vypisuje 00000 ...
Jde to testovat přes putty a spojit piny 2a3 ....

SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

4

Re: Sériová komunikace

Na serial chci poslat "Q\r" a obratem dostat asi 70 znaků písmen a číslic. V arduinu mi to funguje, přes hyperterm nebo telnet to funguje ale přes serial_text_out a násldné čtení sys[48] a sys[49] ani ránu. Jednikrát za sto pokusů se náhodou něco vypsalo, ale z 99% UART mlčí a program jede dál.

5

Re: Sériová komunikace

Vzal jsem SDS MICRO, spojil jsem dohromady RX a TX piny a otestoval jsem následující program:

var znak;

main
{

   serial_set(9600,8,1,0);

   serial_text_out('*B1OS2H');

label cteni_mw:
    if(sys[48] != 0) goto cteni_mw;
    znak = sys[49];
    echo(znak);
    goto cteni_mw;

}

Výstup:

CONSOLE:

42
66
49
79
83
50
72

Takže to funguje OK.

Co se sys[50] až sys[54] týká, tak tady je chyba na mojí straně, dal jsem to na WiKi ale ve firmware chybělo naplnění sys[] při jejich čtení. Funkce serial_set() ale je funkční od samého začátku. Stáhněte si nový firmware (beta pro SDS MICRO) tam jsou ty sys[] doplněny.

Funkce serial_text_out() neumí zpracovat \r nebo \n atd. Musíte to zadat přímo jako číslo, příkladem

 serial_text_out('Q' , 0x0d);

Funkčnost ověřte ve webovém rozhraní, stránka "Serial config" (anglická verze webu, v české je to nějak jinak pojmenované). Musí tam být vypsáno kolik bajtů se přijalo, odeslalo a jaké je nastavení (serial_set).
Přijímací buffer je určitě dost velký na to aby se do něj 70 znaků vlezlo...

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

6

Re: Sériová komunikace

Tak po aktualizaci na nový BETA firmware z 2.2.2012 se komunikace SDS-C s UARTem rozjela, aniž bych se jakkoliv jinak dotkl zařízení. Ani novou kompilaci programu jsem nemusel dělat.
Teď mi už zbývá jen zajistit, aby se přečtená data dostala na web server v nějaké čitelné podobě.
Každopádně díky za opravy FW, hlavně ať vydrží i v oficiální verzi.

7

Re: Sériová komunikace

Tak zatím přečtené znaky (ve formátu čísla) nejsem schopen jako znaky poslat přes http_get funkci, aniž bych to příliš komplikoval na straně odesílání a v přijímacím php skriptu. Netrpělivě očekávám alespoň základní řetězcové funkce, vyhrazené slovo "char" se už v SDS-C vyskytuje, ale ještě nefunguje...

8

Re: Sériová komunikace

Jsem rád že to funguje.

Tento požadavek (předávání textu pro http_get) bude potřeba nějak vyřešit, no uvidíme...

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

9 Naposledy upravil: TiborTeam (2012-02-05 12:49:32)

Re: Sériová komunikace

palca napsal:

Tak zatím přečtené znaky (ve formátu čísla) nejsem schopen jako znaky poslat přes http_get funkci, aniž bych to příliš komplikoval na straně odesílání a v přijímacím php skriptu. Netrpělivě očekávám alespoň základní řetězcové funkce, vyhrazené slovo "char" se už v SDS-C vyskytuje, ale ještě nefunguje...

Není nic jednoduchší než těch pár čísel přeložit na straně webu, např. v php :

<?php
echo chr(84);
?>
Vypíše "T" smile

Citace měla být o příspěvek nahoru ....

SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

10

Re: Sériová komunikace

No, s jedním znakem by opravdu nebyl problém, jak ale bude vypadat http get řetězec když budu chtít poslat  pole 70 znaků označujících float čísla rozložená na jednotlivé znaky a převedná na decimální hodnoty ... ? Zbytečné zesložitění proti původní možnosti odeslat to jako text.

11

Re: Sériová komunikace

Vyřeší to nové pole, text[]. Je to pole pro 512 znaků, se kterými se dá pracovat jako s textovým řetězcem.

Úvodní informace viz http://wiki.merenienergie.cz/index.php/ … text.5B.5D , teprve se provádí beta testování. Stáhněte si SDSC.exe a testujte taky.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

12

Re: Sériová komunikace

To by mohlo velmi výrazně pomoct, děkuji.