索引超出矩阵纬度维度怎么破

matlab如何解决矩阵维度必须一致_matlab吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:145,452贴子:
matlab如何解决矩阵维度必须一致收藏
*改为.*我试过了没用还是提示矩阵维度必须一致。。。不知道该怎么办。。才接触matlab没多久希望大神帮忙
告别死工资:送150美金,可提取
没人在九自己顶/。。。。快来人啊
顶顶。。。。。。。。。。。。。
大家都来看看阿 啊啊啊啊啊啊啊啊啊啊啊啊啊啊
原因可能有二:其一、你输入的矩阵就不满足矩阵的运算法则;其二、对*与.*
^与.^理解不到位。详解如下:举个例子吧(在另外一个帖子上遇到的)首先代码应该改为:x=0:1:100;y=0.5./sqrt([81./(x.^2)+1].*[1+(x.^2)./36]);plot(x,y,'+-r');最后画图为:要分清*与.*的区别。其中点乘(.*)是指两个矩阵的元素一一对应相乘。而乘(*)是指矩阵AB相乘(A*B要满足矩阵相乘的法则,即A的列数与B的行数相等)。其他 /与./、^与.^也是这样的区别。例图:
如下图,x与y相乘明显是错误的!因为x的列数要与y的行数相等,矩阵x与矩阵y才可以相乘,这就是我说的其一原因(事实上原因而是原因一的特殊情况)。
线性代数要多复习。。。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Simulink里创建SCI通讯模块,错误:索引超出矩阵维度 - C2000(TM) 32位实时 MCU - 德州仪器在线技术支持社区
Simulink里创建SCI通讯模块,错误:索引超出矩阵维度
发表于1月前
<input type="hidden" id="hGroupID" value="38"
求大神指教。&/p>
&p>在MATLAB/Simulink里创建了SCI通讯的transmit和Receive模块,希望在目标板F28035的串口上收到数据后原原本本的再发送回来,在主机的串口调试助手上可以实现发送的内容再接收回来。如下图所示。F28035,SCI transmit,SCI receive都已配置好。&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/2046.RXTX.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/2046.RXTX.png& border=&0& alt=& &>&/a>&/p>
&p>使用串口COM4&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/6471.SCIre.png&>&img src=&/resized-image.ashx/__size/200x0/__key/communityserver-discussions-components-files/56/6471.SCIre.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/2627.SCIte.png&>&img src=&/resized-image.ashx/__size/200x0/__key/communityserver-discussions-components-files/56/2627.SCIte.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/.png&>&img src=&/resized-image.ashx/__size/200x0/__key/communityserver-discussions-components-files/56/.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/sci.png&>&img src=&/resized-image.ashx/__size/200x0/__key/communityserver-discussions-components-files/56/sci.png& border=&0& alt=& &>&/a>&/p>
&p>编译之后出现错误如下:&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/4024.error.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/4024.error.png& border=&0& alt=& &>&/a>&/p>
&p>根据错误信息提示,我打开了c200hostsci_rx.m文件,PostPropagationSetup也找到具体位置,但是不知道该怎么修改。&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/5280.prog.png&>&img src=&/resized-image.ashx/__size/200x0/__key/communityserver-discussions-components-files/56/5280.prog.png& border=&0& alt=& &>&/a>&/p>
&p>c200hostsci_rx.m源码如下:&/p>
&pre class=&brush: fontsize: 100; first-line: 1; &>function c2000hostsci_rx(block)
% S-function for Host side serial receive block
See also C2000HOSTSCI_TX
% Copyright
The MathWorks, Inc.
setup(block);
%endfunction
%% Function: setup ===================================================
%% Abstract:
Set up the S-function block&#39;s basic characteristics such as:
- Input ports
- Output ports
- Dialog parameters
C-Mex counterpart: mdlInitializeSizes
function setup(block)
datatypeID = block.DialogPrm(4).D
dataLenPrm = block.DialogPrm(5);
sampletimes = [block.DialogPrm(9).Data, 0];
outputStatus = block.DialogPrm(10).D
if isequal(dataLenPrm.Dimensions, [ 1 1 ])
outputDims = dataLenPrm.D
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxDataLength&#39;);
% Register number of ports
block.NumInputPorts
if outputStatus == 1 %output receiving status
block.NumOutputPorts = 2;
block.NumOutputPorts = 1;
% Setup port properties to be inherited or dynamic
block.SetPreCompOutPortInfoToD
% Override output port properties
block.OutputPort(1).DatatypeID
= datatypeID;
block.OutputPort(1).Complexity
= &#39;Real&#39;;
block.OutputPort(1).SamplingMode = &#39;Sample&#39;;
block.OutputPort(1).Dimensions
if block.NumOutputPorts == 2
block.OutputPort(2).DatatypeID
block.OutputPort(2).Complexity
= &#39;Real&#39;;
block.OutputPort(2).SamplingMode = &#39;Sample&#39;;
block.OutputPort(2).Dimensions
% Register parameters
block.NumDialogPrms
block.DialogPrmsTunable = {&#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;,&#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;};
% Register sample times
[0 offset]
: Continuous sample time
[positive_num offset] : Discrete sample time
: Port-based sample time
: Variable sample time
block.SampleTimes =
%% -----------------------------------------------------------------
%% Options
%% -----------------------------------------------------------------
% Specify if Accelerator should use TLC or call back into
% MATLAB file
block.SetAccelRunOnTLC(false);
%% -----------------------------------------------------------------
%% Register methods called during update diagram/compilation
%% -----------------------------------------------------------------
%% CheckParameters:
Functionality
: Called in order to allow validation of
block&#39;s dialog parameters. User is
responsible for calling this method
explicitly at the start of the setup method
C-Mex counterpart: mdlCheckParameters
block.RegBlockMethod(&#39;CheckParameters&#39;, @CheckPrms);
%% PostPropagationSetup:
Functionality
: Setup work areas and state variables. Can
also register run-time methods here
C-Mex counterpart: mdlSetWorkWidths
block.RegBlockMethod(&#39;PostPropagationSetup&#39;, @DoPostPropSetup);
%% -----------------------------------------------------------------
%% Register methods called at run-time
%% -----------------------------------------------------------------
%% ProcessParameters:
Functionality
: Called in order to allow update of run-time
parameters
C-Mex counterpart: mdlProcessParameters
block.RegBlockMethod(&#39;ProcessParameters&#39;, @ProcessPrms);
Functionality
: Called in order to initialize state and work
area values
C-Mex counterpart: mdlStart
block.RegBlockMethod(&#39;Start&#39;, @Start);
%endfunction
%% -------------------------------------------------------------------
%% The local functions below are provided for illustrative purposes
%% to show how you may implement the various block methods listed
%% -------------------------------------------------------------------
function CheckPrms(block)
%endfunction
function ProcessPrms(block)
block.AutoUpdateRuntimeP
%endfunction
function DoPostPropSetup(block)
setupBlk = find_system(bdroot, &#39;FollowLinks&#39;, &#39;on&#39;, &#39;MaskType&#39;,&#39;c2000 Host SCI Setup&#39;);
switch block.DialogPrm(1).Data
= get_param(setupBlk, &#39;commModeA&#39;);
= get_param(setupBlk, &#39;commModeB&#39;);
= get_param(setupBlk, &#39;commModeC&#39;);
= get_param(setupBlk, &#39;commModeD&#39;);
%== Register method for Outputs function =========================
switch commMode{1}
case &#39;protocol&#39;
block.RegBlockMethod(&#39;Outputs&#39;, @ProOutputs);
case &#39;raw data&#39;
block.RegBlockMethod(&#39;Outputs&#39;, @RawOutputs);
%== Restore serial port id and error output value to Dwork space ==
block.NumDworks = 2;
block.Dwork(1).Name
= &#39;InstrID&#39;;
block.Dwork(1).Dimensions
block.Dwork(1).DatatypeID
block.Dwork(1).Complexity
= &#39;Real&#39;; % real
block.Dwork(2).Name
= &#39;ErrorValue&#39;;
block.Dwork(2).Dimensions
= block.OutputPort(1).D
block.Dwork(2).DatatypeID
= block.OutputPort(1).DatatypeID;
block.Dwork(2).Complexity
= &#39;Real&#39;; % real
%endfunction
function Start(block)
%== Get Serial port ID and store it in to Dwork(1) ==============
setupBlk = find_system(bdroot, &#39;FollowLinks&#39;, &#39;on&#39;, ...
&#39;MaskType&#39;,&#39;c2000 Host SCI Setup&#39;);
userdata = get_param(setupBlk{1}, &#39;userdata&#39;);
moduleID =
block.DialogPrm(1).D
block.Dwork(1).Data = userdata.serialID(moduleID);
%== Setup initial output value & error output value ==============
= class(block.OutputPort(1).Data);
= block.DialogPrm(6);
errValuePrm = block.DialogPrm(8);
if isequal(initPrm.Dimensions, [1 block.OutputPort(1).Dimensions])
initValue = cast(initPrm.Data, datatype);
elseif isequal(initPrm.Dimensions, [1 1])
initValue = ones(1, block.OutputPort(1).Dimensions) .* initPrm.D
initValue = cast(initValue, datatype);
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxInitDimension&#39;);
block.OutputPort(1).Data = initV
if isequal(errValuePrm.Dimensions, [1 block.OutputPort(1).Dimensions])
errValue = cast(errValuePrm.Data, datatype);
elseif isequal(errValuePrm.Dimensions, [1 1])
errValue = ones(1, block.OutputPort(1).Dimensions) .* errValuePrm.D
errValue = cast(errValue, datatype);
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxTimeoutDimension&#39;);
block.Dwork(2).Data = errV
%endfunction
%% Outputs function for raw data mode
function RawOutputs(block)
com = instrfind(&#39;id&#39;, block.Dwork(1).Data);
head = uint8(block.DialogPrm(2).Data);
tail = uint8(block.DialogPrm(3).Data);
dataDim = block.DialogPrm(5).D
dataType =
block.DialogPrm(4).D
switch dataType
case {1, 6, 7}
%single, int32, uint32
typeDim = 4;
case {2, 3}
%int8, uint8
typeDim = 1;
case {4, 5}
%int16, uint16
typeDim = 2;
dataLen = dataDim*typeD
tmax = com.T
%== check head ================================%
if length(head)
while (cnt &= length(head))
recHead = fread(com, 1, &#39;uint8&#39;);
if recHead == head(cnt)
cnt = cnt+1;
if(etime(clock, t0) & tmax)
if cnt & length(head)
rcvStat = 0;
rcvStat = 1;
rcvStat = 0;
%== get data ==================================%
if rcvStat == 0
while(com.BytesAvailable & dataLen) %wait until data arrived
if(etime(clock, t0) & tmax)
rcvStat = 1; %timeout
if (com.BytesAvailable &= dataLen)
recbuff = uint8(fread(com, dataLen, &#39;uchar&#39;));
outdata = c2char2num(recbuff, dataType, dataDim);
rcvStat = 1;
%== check tail ================================%
if rcvStat == 0 && length(tail)
while(com.BytesAvailable & length(tail))
if(etime(clock, t0) & tmax)
rcvStat = 1;
if(com.BytesAvailable &= length(tail))
rcvTail = uint8(fread(com, length(tail))&#39;);
if (isequal(rcvTail, tail))
rcvStat = 0;
rcvStat = 2;
%== Output received data ======================%
if rcvStat == 0
block.OutputPort(1).Data =
elseif block.DialogPrm(7).Data == 2
block.OutputPort(1).Data = block.Dwork(2).D
if block.NumOutputPorts == 2
block.OutputPort(2).Data = rcvS
fclose(com);
%endfunction
%% Output function for protocol mode
function ProOutputs(block)
dataType =
block.DialogPrm(4).D
switch dataType
case {1, 6, 7}
%single, int32, uint32
typeDim = 4;
case {2, 3}
%int8, uint8
typeDim = 1;
case {4, 5}
%int16, uint16
typeDim = 2;
dataDim = block.DialogPrm(5).D
dataLen = dataDim * typeD
com = instrfind(&#39;id&#39;, block.Dwork(1).Data);
tmax = com.T
if(com.BytesAvailable)
rcvPkg = fread(com, com.BytesAvailable, &#39;uchar&#39;);
rcvPkg = rcvPkg(end);
rcvPkg = fread(com, 1);
if (rcvPkg == &#39;s&#39;)
fwrite(com, &#39;r&#39;);
if isempty(strfind( ME.identifier, &#39;blocks:SCIHostTxWriteTimeout&#39;))
fwrite(com, &#39;r&#39;);
while(1) % get the head of data package
rcvPkg = fread(com, 1);
if(rcvPkg == &#39;d&#39;)
elseif(etime(clock, t0) & tmax)
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxReadTimeout&#39;);
while(com.BytesAvailable & dataLen+1) %wait until all data arrived
if(etime(clock, t0) & tmax)
fread(com, com.BytesAvailable); %clear receive buffer
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxReadTimeout&#39;);
recbuff = uint8(fread(com, dataLen+1, &#39;uchar&#39;));
if(~tchecksum(recbuff))
block.OutputPort(1).Data = c2char2num(recbuff(1:end-1), dataType, dataDim);
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 0;
elseif block.DialogPrm(7).Data == 2
%data error, output error value
block.OutputPort(1).Data = block.Dwork(2).D
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 2;
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 2;
if (etime(clock, t0) & tmax)
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxReadTimeout&#39;);
if(isempty(strfind(ME.message, &#39;sci_rx_timeout&#39;)))
fclose(com);
else %timeout
if block.DialogPrm(7).Data == 2
%output error value
block.OutputPort(1).Data = block.Dwork(2).D
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 1;
%endfunction
&p>这个问题困扰了我好几天,实在不知道怎么解决,谢谢各位大神了!&/p>&div style=&clear:&>&/div>" />
Simulink里创建SCI通讯模块,错误:索引超出矩阵维度
此问题尚无答案
All Replies
求大神指教。
在MATLAB/Simulink里创建了SCI通讯的transmit和Receive模块,希望在目标板F28035的串口上收到数据后原原本本的再发送回来,在主机的串口调试助手上可以实现发送的内容再接收回来。如下图所示。F28035,SCI transmit,SCI receive都已配置好。
使用串口COM4
编译之后出现错误如下:
根据错误信息提示,我打开了c200hostsci_rx.m文件,PostPropagationSetup也找到具体位置,但是不知道该怎么修改。
c200hostsci_rx.m源码如下:
function c2000hostsci_rx(block)
% S-function for Host side serial receive block
See also C2000HOSTSCI_TX
% Copyright
The MathWorks, Inc.
setup(block);
%endfunction
%% Function: setup ===================================================
%% Abstract:
Set up the S-function block&#39;s basic characteristics such as:
- Input ports
- Output ports
- Dialog parameters
C-Mex counterpart: mdlInitializeSizes
function setup(block)
datatypeID = block.DialogPrm(4).D
dataLenPrm = block.DialogPrm(5);
sampletimes = [block.DialogPrm(9).Data, 0];
outputStatus = block.DialogPrm(10).D
if isequal(dataLenPrm.Dimensions, [ 1 1 ])
outputDims = dataLenPrm.D
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxDataLength&#39;);
% Register number of ports
block.NumInputPorts
if outputStatus == 1 %output receiving status
block.NumOutputPorts = 2;
block.NumOutputPorts = 1;
% Setup port properties to be inherited or dynamic
block.SetPreCompOutPortInfoToD
% Override output port properties
block.OutputPort(1).DatatypeID
= datatypeID;
block.OutputPort(1).Complexity
= &#39;Real&#39;;
block.OutputPort(1).SamplingMode = &#39;Sample&#39;;
block.OutputPort(1).Dimensions
if block.NumOutputPorts == 2
block.OutputPort(2).DatatypeID
block.OutputPort(2).Complexity
= &#39;Real&#39;;
block.OutputPort(2).SamplingMode = &#39;Sample&#39;;
block.OutputPort(2).Dimensions
% Register parameters
block.NumDialogPrms
block.DialogPrmsTunable = {&#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;,&#39;Nontunable&#39;, &#39;Nontunable&#39;, &#39;Nontunable&#39;};
% Register sample times
[0 offset]
: Continuous sample time
[positive_num offset] : Discrete sample time
: Port-based sample time
: Variable sample time
block.SampleTimes =
%% -----------------------------------------------------------------
%% Options
%% -----------------------------------------------------------------
% Specify if Accelerator should use TLC or call back into
% MATLAB file
block.SetAccelRunOnTLC(false);
%% -----------------------------------------------------------------
%% Register methods called during update diagram/compilation
%% -----------------------------------------------------------------
%% CheckParameters:
Functionality
: Called in order to allow validation of
block&#39;s dialog parameters. User is
responsible for calling this method
explicitly at the start of the setup method
C-Mex counterpart: mdlCheckParameters
block.RegBlockMethod(&#39;CheckParameters&#39;, @CheckPrms);
%% PostPropagationSetup:
Functionality
: Setup work areas and state variables. Can
also register run-time methods here
C-Mex counterpart: mdlSetWorkWidths
block.RegBlockMethod(&#39;PostPropagationSetup&#39;, @DoPostPropSetup);
%% -----------------------------------------------------------------
%% Register methods called at run-time
%% -----------------------------------------------------------------
%% ProcessParameters:
Functionality
: Called in order to allow update of run-time
parameters
C-Mex counterpart: mdlProcessParameters
block.RegBlockMethod(&#39;ProcessParameters&#39;, @ProcessPrms);
Functionality
: Called in order to initialize state and work
area values
C-Mex counterpart: mdlStart
block.RegBlockMethod(&#39;Start&#39;, @Start);
%endfunction
%% -------------------------------------------------------------------
%% The local functions below are provided for illustrative purposes
%% to show how you may implement the various block methods listed
%% -------------------------------------------------------------------
function CheckPrms(block)
%endfunction
function ProcessPrms(block)
block.AutoUpdateRuntimeP
%endfunction
function DoPostPropSetup(block)
setupBlk = find_system(bdroot, &#39;FollowLinks&#39;, &#39;on&#39;, &#39;MaskType&#39;,&#39;c2000 Host SCI Setup&#39;);
switch block.DialogPrm(1).Data
= get_param(setupBlk, &#39;commModeA&#39;);
= get_param(setupBlk, &#39;commModeB&#39;);
= get_param(setupBlk, &#39;commModeC&#39;);
= get_param(setupBlk, &#39;commModeD&#39;);
%== Register method for Outputs function =========================
switch commMode{1}
case &#39;protocol&#39;
block.RegBlockMethod(&#39;Outputs&#39;, @ProOutputs);
case &#39;raw data&#39;
block.RegBlockMethod(&#39;Outputs&#39;, @RawOutputs);
%== Restore serial port id and error output value to Dwork space ==
block.NumDworks = 2;
block.Dwork(1).Name
= &#39;InstrID&#39;;
block.Dwork(1).Dimensions
block.Dwork(1).DatatypeID
block.Dwork(1).Complexity
= &#39;Real&#39;; % real
block.Dwork(2).Name
= &#39;ErrorValue&#39;;
block.Dwork(2).Dimensions
= block.OutputPort(1).D
block.Dwork(2).DatatypeID
= block.OutputPort(1).DatatypeID;
block.Dwork(2).Complexity
= &#39;Real&#39;; % real
%endfunction
function Start(block)
%== Get Serial port ID and store it in to Dwork(1) ==============
setupBlk = find_system(bdroot, &#39;FollowLinks&#39;, &#39;on&#39;, ...
&#39;MaskType&#39;,&#39;c2000 Host SCI Setup&#39;);
userdata = get_param(setupBlk{1}, &#39;userdata&#39;);
moduleID =
block.DialogPrm(1).D
block.Dwork(1).Data = userdata.serialID(moduleID);
%== Setup initial output value & error output value ==============
= class(block.OutputPort(1).Data);
= block.DialogPrm(6);
errValuePrm = block.DialogPrm(8);
if isequal(initPrm.Dimensions, [1 block.OutputPort(1).Dimensions])
initValue = cast(initPrm.Data, datatype);
elseif isequal(initPrm.Dimensions, [1 1])
initValue = ones(1, block.OutputPort(1).Dimensions) .* initPrm.D
initValue = cast(initValue, datatype);
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxInitDimension&#39;);
block.OutputPort(1).Data = initV
if isequal(errValuePrm.Dimensions, [1 block.OutputPort(1).Dimensions])
errValue = cast(errValuePrm.Data, datatype);
elseif isequal(errValuePrm.Dimensions, [1 1])
errValue = ones(1, block.OutputPort(1).Dimensions) .* errValuePrm.D
errValue = cast(errValue, datatype);
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxTimeoutDimension&#39;);
block.Dwork(2).Data = errV
%endfunction
%% Outputs function for raw data mode
function RawOutputs(block)
com = instrfind(&#39;id&#39;, block.Dwork(1).Data);
head = uint8(block.DialogPrm(2).Data);
tail = uint8(block.DialogPrm(3).Data);
dataDim = block.DialogPrm(5).D
dataType =
block.DialogPrm(4).D
switch dataType
case {1, 6, 7}
%single, int32, uint32
typeDim = 4;
case {2, 3}
%int8, uint8
typeDim = 1;
case {4, 5}
%int16, uint16
typeDim = 2;
dataLen = dataDim*typeD
tmax = com.T
%== check head ================================%
if length(head)
while (cnt &= length(head))
recHead = fread(com, 1, &#39;uint8&#39;);
if recHead == head(cnt)
cnt = cnt+1;
if(etime(clock, t0) & tmax)
if cnt & length(head)
rcvStat = 0;
rcvStat = 1;
rcvStat = 0;
%== get data ==================================%
if rcvStat == 0
while(com.BytesAvailable & dataLen) %wait until data arrived
if(etime(clock, t0) & tmax)
rcvStat = 1; %timeout
if (com.BytesAvailable &= dataLen)
recbuff = uint8(fread(com, dataLen, &#39;uchar&#39;));
outdata = c2char2num(recbuff, dataType, dataDim);
rcvStat = 1;
%== check tail ================================%
if rcvStat == 0 && length(tail)
while(com.BytesAvailable & length(tail))
if(etime(clock, t0) & tmax)
rcvStat = 1;
if(com.BytesAvailable &= length(tail))
rcvTail = uint8(fread(com, length(tail))&#39;);
if (isequal(rcvTail, tail))
rcvStat = 0;
rcvStat = 2;
%== Output received data ======================%
if rcvStat == 0
block.OutputPort(1).Data =
elseif block.DialogPrm(7).Data == 2
block.OutputPort(1).Data = block.Dwork(2).D
if block.NumOutputPorts == 2
block.OutputPort(2).Data = rcvS
fclose(com);
%endfunction
%% Output function for protocol mode
function ProOutputs(block)
dataType =
block.DialogPrm(4).D
switch dataType
case {1, 6, 7}
%single, int32, uint32
typeDim = 4;
case {2, 3}
%int8, uint8
typeDim = 1;
case {4, 5}
%int16, uint16
typeDim = 2;
dataDim = block.DialogPrm(5).D
dataLen = dataDim * typeD
com = instrfind(&#39;id&#39;, block.Dwork(1).Data);
tmax = com.T
if(com.BytesAvailable)
rcvPkg = fread(com, com.BytesAvailable, &#39;uchar&#39;);
rcvPkg = rcvPkg(end);
rcvPkg = fread(com, 1);
if (rcvPkg == &#39;s&#39;)
fwrite(com, &#39;r&#39;);
if isempty(strfind( ME.identifier, &#39;blocks:SCIHostTxWriteTimeout&#39;))
fwrite(com, &#39;r&#39;);
while(1) % get the head of data package
rcvPkg = fread(com, 1);
if(rcvPkg == &#39;d&#39;)
elseif(etime(clock, t0) & tmax)
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxReadTimeout&#39;);
while(com.BytesAvailable & dataLen+1) %wait until all data arrived
if(etime(clock, t0) & tmax)
fread(com, com.BytesAvailable); %clear receive buffer
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxReadTimeout&#39;);
recbuff = uint8(fread(com, dataLen+1, &#39;uchar&#39;));
if(~tchecksum(recbuff))
block.OutputPort(1).Data = c2char2num(recbuff(1:end-1), dataType, dataDim);
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 0;
elseif block.DialogPrm(7).Data == 2
%data error, output error value
block.OutputPort(1).Data = block.Dwork(2).D
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 2;
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 2;
if (etime(clock, t0) & tmax)
DAStudio.error(&#39;TIC2000:blocks:SCIHostRxReadTimeout&#39;);
if(isempty(strfind(ME.message, &#39;sci_rx_timeout&#39;)))
fclose(com);
else %timeout
if block.DialogPrm(7).Data == 2
%output error value
block.OutputPort(1).Data = block.Dwork(2).D
if block.NumOutputPorts == 2
block.OutputPort(2).Data = 1;
%endfunction
这个问题困扰了我好几天,实在不知道怎么解决,谢谢各位大神了!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.

我要回帖

更多关于 索引超出了矩阵维度 的文章

 

随机推荐