Convert 4 bytes to single in Matlab Simulink blocks
14 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello Friends,
- I have a tcpip object (t) that has been created as shown below.
- The code used to create the object and further process is shown below where in line #2, the port is server is opened.
- From the controller, I sent a value of 0.8146 to MATLAB.
- From my observation, the value of 0.8146 that was sent from the controller was actually received as 4 bytes in Matlab. This was also mentioned in the video and the conversion process was done in the command line.
- I sent several bytes form the controller then I was able to read data using the command in line #4 below, I read the data in cyclic manner using the function myF( ) created and passing object "t" . The function has a while loop as shown.
- I was able to read each data from Matlab as soon as it is sent from the controller.
Now my problem begins:
- I want to implement reading a similar approach used in the command line with Simulink to read bytes from the controller but and i get various errors.
- Shown below is the blocks created in simulink project and details of the function used:
- The matlab function block, has the following lines of code
- When i try to run the code, I get the following 6 errors.
- I try to reduce the error by "commenting out" the while-loop and the error reduced to 4. See the modified function in simulink:
The remaining 4 error i received are as follow:
- out1 is inferred as a variable-size matrix, but its size is specified as inherited or fixed. Verify 'out1' is defined in terms of non-tunable parameters, or select the 'Variable Size' check box and specify the upper bounds in the Size box.
- Simulink cannot determine sizes and/or types of the outputs for block 'simulnk_Read_Bytes_from_PLC_controller/MATLAB Function' due to errors in the block body, or limitations of the underlying analysis. The errors might be inaccurate. Fix the indicated errors, or explicitly specify sizes and/or types for all block outputs.
- Simulink cannot determine sizes and/or types of the outputs for block 'simulnk_Read_Bytes_from_PLC_controller/MATLAB Function' due to errors in the block body, or limitations of the underlying analysis. The errors might be inaccurate. Fix the indicated errors, or explicitly specify sizes and/or types for all block outputs.
- Error in port widths or dimensions. 'Output Port 1' of 'simulnk_Read_Bytes_from_PLC_controller/MATLAB Function/in1' is a one dimensional vector with 1 elements.
The parameters of the various blocks are as follows:
I need someone to help me in resolving these errors.
Or how else can i implement what i have done in the command line in Matlab simulink? The error has to do with dimension of output port size that was inherited from the blocks.
Thanks
Abiodun
1 commentaire
Walter Roberson
le 21 Jan 2024
Try initializing
A = zeros(1,4,'uint8');
This will force a size on A, and so (in theory) should eliminate the errors about not being able to deduce a size.
Réponses (1)
Benjamin Thompson
le 21 Jan 2024
If you have the Embedded Coder toolbox there is the Byte Pack, Byte Reversal, and Byte Unpack blocks. If not, you could try implementing that behavior with a C S-Function that takes a single as an input and outputs an array of uint8. Its output function would be:
unsigned char * p_temp_pointer = (unsigned char *)&u0;
y0[0] = p_temp_pointer[0];
y0[1] = p_temp_pointer[1];
y0[2] = p_temp_pointer[2];
y0[3] = p_temp_pointer[3];
Try using S-Function Builder to create this block.
Voir également
Catégories
En savoir plus sur Computer Vision with Simulink dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!