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