Arduino ethernet socket komunikacia

Miroslav Mraz mrazik na volny.cz
Pátek Září 20 20:17:53 CEST 2019


Sice se necítím být povolán odpovídat na otázky týkající se matlabu - a 
problém se zdá být právě zde, protože píšete, že pomocí telnetu to něco 
dělá, ale přesto si dovolím malou poznámku :

Usuzovat na cokoli jen na základě dokumentace Arduino je cesta do pekel.

Metoda server.available() musí _vždy_ vrátit nějakou instanci třídy 
EthernetClient. Proto následuje test "if (client == true)", což je dost 
matoucí zápis, lze to ekvivalentně zkrátit na "if (client)", podstatné 
je co to vlastně znamená.
Pro začátečníka v C++ bude asi dost podivné vysvětlení, že jde o volání 
přetíženého operátoru bool() ve třídě EthernetClient. Tento operátor 
vrací hodnotu metody connected() zmíněné třídy.
A tato metoda (která může být i dost komplikovaná) může vracet opravdu 
jen zda je daný klient připojen či ne. Bez ohledu na to, zda má klient 
data k dispozici nebo ne. Na toto má třída EthernetClient metodu int 
available().

Mrazík

Dne 20. 09. 19 v 11:08 Daniel Valuch napsal(a):
> na telnet reaguje.
> Takze nevie zistit, kedy sa mu skoncil paket, ktory som poslal z Matlabu.
> 
> Je tam nejaky standard? Napr. CR/LF, null character, alebo nieco?
> 
> 
> 
> 
> 
> On 20/09/2019 08:19, iko wrote:
>> A telnet na ten port z PC ste skusali? Ci nebude problem v tom matlabe 
>> alebo co to je.
>>
>> Uzival som ethernet, ale s kniznicou UIPEthernet a slo to.
>>
>> On 9/19/19 10:08 PM, balu wrote:
>>> zdravim osadenstvo,
>>>
>>> asi by som potreboval pomoct s implementaciou komunikacie do arduina, 
>>> teraz naozaj arduina s pouzitim arduino prostredia.
>>>
>>> Rad by som postavil pristroj, ktory bude pocuvat na porte 5025 (ako 
>>> vsetky ostatne pristroje), poslem mu prikaz MEAS:VOLT:DC?\n a on 
>>> odpovie 1.23456.
>>>
>>> Pouzivam uplne najzakladnejsi priklad
>>> https://www.arduino.cc/en/Reference/EthernetServer
>>>
>>> modul pinga a je zivy.
>>> Posielam standardnu spravu z Matlabu (funguje so vsetkymi pristrojmi)
>>>
>>> PowerMeter = tcpip('128.141.157.182', 5025, 'Terminator', 10);
>>> PowerMeter.InputBufferSize = 100;
>>> fopen(PowerMeter);
>>> fprintf(PowerMeter, 'MEAS:VOLT:DC?\n');
>>>
>>> ked scanujem porty tak 5025 je otvoreny. Kod v mikrokontroleri sa ale 
>>> nikdy sa nedostane cez
>>>
>>>   EthernetClient client = server.available();
>>>    if (client == true) {
>>>
>>> Dokumentaciu som si samozrejme pozrel
>>> https://www.arduino.cc/en/Reference/EthernetServer
>>> https://www.arduino.cc/en/Reference/ServerAvailable
>>>
>>> u available v dokumentacii pisu
>>>
>>> available()
>>>
>>> Description
>>>
>>> Gets a client that is connected to the server and has data available 
>>> for reading.
>>>
>>> ale vzdy je to false, takze bud neprijme nic, alebo mozno prijme moj 
>>> packet, ale nevie ze sa uz skoncil a teda asi nie je available.
>>>
>>> mate s tym niekto skusenosti, pripadne funkcny program? Uz mam 
>>> spokoro vyklbeny mozog, ale neviem to stale rozchodit.
>>>
>>> dakujem,
>>>
>>> b. 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list