フィルターのクリア

Why do the Arduino Wifi TCP/UDP Send/Receive blocks in Simulink only send/receive 8-Bits of data (uint8)?

6 ビュー (過去 30 日間)
I'm trying to send an AnalogInput signal from my Arduino via wifi to a PC with Simulink. I've created two models, one which runs on an Arduino Due with a Wifi Shield and one that receives the data and plots it onto a scope in Simulink.
The problem is that the Wifi TCP\UDP Send blocks are only able to send 1 Byte of data (uint8) per call. In the Code Generation Report it shows that the uint16 data of the AnalogInput will be explicitly casted to uint8:
uint16_T rtb_AnalogInput_0;
MW_WifiTCPFinalWrite(untitled_P.TCPSend_p1, (uint8_T)rtb_AnalogInput_0, untitled_P.TCPSend_p2);
This will chop off any leading bits which won't fit into the uint8 datatype. The implementation of the MW_WifiTCPFinalWrite method can be found in the io_wrappers.cpp and looks like this:
extern "C" void MW_WifiTCPFinalWrite(uint8_t wifitcpindex, uint8_t data, uint32_t serverport)
{
server[wifitcpindex].write(data);
}
It calls the write method implemented in the class EthernetServer which then passes the address of that parameter and the length of 1 byte:
size_t EthernetServer::write(uint8_t b)
{
return write(&b, 1);
}
This leads to an overloaded write(const uint8*, size_t) method, is then passed to a write method in EthernetClient until it eventually reaches the send method defined in socket.cpp.
These last two methods both use pointers and a length parameter meaning that these are able to process and send more than just 8 bits of data.
Long story short...
I could now just extend the framwork by myself but it raises the question why this has been so poorly implemented. Maybe I missed something and I'm not right about this conclusion?
Is there any good reason that the method MW_WifiTCPFinalWrite used by Simulink only allows 8-Bit of data which it copies instead of passing a pointer and a size?

採用された回答

Subin Kuttappan Stellal Mary
Subin Kuttappan Stellal Mary 2017 年 6 月 16 日
As of Simulink R2017a, the TCP/UDP send/receive blocks in the Simulink Support Package for Arduino Hardware can send or receive only uint8 data per step.
This is mentioned in the documentation of the blocks. Eg : https://in.mathworks.com/help/supportpkg/arduino/ref/wifitcpipsend.html
However, the developers have already working on multi byte enhancements and planned it for a future release.
Stay tuned...
  1 件のコメント
Andreas Nagl
Andreas Nagl 2017 年 10 月 13 日
編集済み: Andreas Nagl 2017 年 10 月 13 日
Hello, did I see it correctly that for 2017b, this limitation has already been removed for Wifi TCP/IP send, but for TCP/IP send it's still there? Thanks a lot!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeModeling についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by