我有一臺用Python設置的服務器,並且已經成功地建立了一個簡單的通信協議,其中一個客戶端運行在Matlab腳本中。我需要在Simulink模型中運行此函數,以測試我正在開發的一些控制器。由於UDP不支持代碼生成,我已經嘗試設置功能外在如下: 使用Matlab功能塊的Simulink中的UDP
function z = fcn(u)
elevationMatrix = zeros(3,3);
coder.extrinsic('udp', 'fwrite', 'fopen');
% connect to the server
t = udp('localhost', 2002);
fopen(t);
% write a message
fwrite(t, 'This is a test message.');
% read the echo
bytes = fread(t, [t.BytesAvailable, 1], 'char');
%fit the data into a matrix
temp = reshape(bytes, [8 9]);
z = zeros(1,9);
for col = 1:9
bytepack=uint64(0);
for row = 1:8
temp(9-row, col)
bytepack = bitshift(temp(9 - row, col),8*(8-row));
z(col) = bitor(bytepack,z(col));
temp(row, col);
end;
end;
z = reshape(z, [3,3])';
% close the connection
fclose(t);
我得到了一些錯誤,我無法解決;即「嘗試從」mxArray「中提取字段」BytesAvailable「,我猜測是因爲我需要以某種方式預先定義t的大小。我對「字節」,「temp」和「bytepack」都有同樣的看法。
除非您可以指出我可以通過內置Simulink UDP模塊發送不同字符串的方式,否則我寧願不要沿着該路線走,因爲我將按名稱調用在python服務器上調用函數。
好的,謝謝你的提示。我正在使用UDPSender對象成功發送字節。我現在遇到的問題是,由於所有內容都以字節爲單位進行編寫,因此我發現恢復服務器端的所有內容會稍微複雜一些。有任何想法嗎? – RYS
無視我最後的評論。我正在迭代我的字節數組,並使用步驟發送它。看起來像步驟也適用,如果你只是傳遞一個數組。這解決了我的問題。問候。 – RYS