CAN 2.0规格详解:实现兼容与高效实时控制的通信协议

需积分: 35 25 下载量 18 浏览量 更新于2024-07-16 收藏 150KB PDF 举报
CAN 2.0 是一种专为实时控制设计的串行通信协议,其目标是实现不同CAN实现之间的兼容性。它适用于高速网络到低成本多路复用布线的各种应用,尤其在汽车电子领域,如发动机控制单元、传感器和防抱死制动系统等,其比特率可达1 Mbit/s。 CAN协议分为三个主要层:对象层、传输层和物理层。对象层负责确定哪些消息需要发送,决定接收的消息是否被实际使用,并为应用程序层硬件提供接口,允许设计者根据需求自由定义对象处理。传输层的核心功能包括帧结构控制、仲裁、错误检测与报告以及故障隔离,确保数据的准确传输。它负责控制总线的使用,决定何时开始新传输或接收数据,同时也涉及比特定时的一般特性,但不允许修改。 物理层则专注于实际在节点间传输比特,确保电气特性的合规,所有节点在同一网络中必须采用相同的物理层标准。然而,在选择物理层时,仍有一定的灵活性。BOSCHCANSpecificationVersion2.0定义了这些层次的细节,强调了扩展格式的重要性,即引入了29位的更大地址范围(原为11位),以减轻系统设计师在功能分配上的妥协,提高通信效率和标准化。 此外,文档还指出,尽管整个文档可以无限制复制和分发,但在其他文档中引用或完整使用时需获得罗伯特·博世公司的许可。该公司保留对文档进行更改的权利,且不承担因文档错误而产生的责任。这份规范由摩托罗拉MCTGMultiplexApplications的Chuck Powers于1995年4月导入FrameMaker 4,最后修订日期为1991年9月30日。

clear;clc parentdir = 'F:\data process\fMRI\fmrioutput'; % 定义储存各被试源文件的上级文件夹 cd(parentdir); % 进入这个上级文件夹 allsubjects = dir('sub*');%查找该文件夹下的所有被试 subinfos = numel(allsubjects); for i=1:numel(allsubjects) % 对每个被试进行循环 cursubject = allsubjects(i).name; % 找到当前被试的名字 matlabbatch=cell(1); curWPAT = fullfile(parentdir,cursubject,'WPAT'); curfucout=fullfile('F:\data process\fMRI\fmrioutput',cursubject,'WPAT') matlabbatch{1}.spm.stats.fmri_spec.dir = {curfucout}; matlabbatch{1}.spm.stats.fmri_spec.sess.scans = cellstr(spm_select('ExtFPList', curWPAT, '^sw*.nii', Inf)) matlabbatch{1}.spm.stats.fmri_spec.timing.units = 'scans'; matlabbatch{1}.spm.stats.fmri_spec.timing.RT = 2; matlabbatch{1}.spm.stats.fmri_spec.timing.fmri_t = 16; matlabbatch{1}.spm.stats.fmri_spec.timing.fmri_t0 = 8; %% matlabbatch{1}.spm.stats.fmri_spec.sess.cond = struct('name', {}, 'onset', {}, 'duration', {}, 'tmod', {}, 'pmod', {}, 'orth', {}); matlabbatch{1}.spm.stats.fmri_spec.sess.multi = {'D:\data process\fMRI\onsets\subject(i)_run1.mat'}; matlabbatch{1}.spm.stats.fmri_spec.sess.regress = struct('name', {}, 'val', {}); matlabbatch{1}.spm.stats.fmri_spec.sess.tempxx=dir(fullfile(curfucout,'rp*.txt')) matlabbatch{1}.spm.stats.fmri_spec.sess.hpf = 128; matlabbatch{1}.spm.stats.fmri_spec.fact = struct('name', {}, 'levels', {}); matlabbatch{1}.spm.stats.fmri_spec.bases.hrf.derivs = [0 0]; matlabbatch{1}.spm.stats.fmri_spec.volt = 1; matlabbatch{1}.spm.stats.fmri_spec.global = 'None'; matlabbatch{1}.spm.stats.fmri_spec.mthresh = 0.8; matlabbatch{1}.spm.stats.fmri_spec.mask = {''}; matlabbatch{1}.spm.stats.fmri_spec.cvi = 'AR(1)'; matlabbatch{2}.spm.stats.fmri_est.spmmat(1) = cfg_dep('fMRI model specification: SPM.mat File', substruct('.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','spmmat')); matlabbatch{2}.spm.stats.fmri_est.write_residuals = 0; matlabbatch{2}.spm.stats.fmri_est.method.Classical = 1; matlabbatch{3}.spm.stats.con.spmmat(1) = cfg_dep('Model estimation: SPM.mat File', substruct('.','val', '{}',{2}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','spmmat')); matlabbatch{3}.spm.stats.con.consess{1}.tcon.name = 'Old'; matlabbatch{3}.spm.stats.con.consess{1}.tcon.weights = 1; matlabbatch{3}.spm.stats.con.consess{1}.tcon.sessrep = 'none'; matlabbatch{3}.spm.stats.con.delete = 0; end;怎么改

2023-05-24 上传