CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
UDS常用功能之访问控制器IO
一.示例说明
-1.1.示例软件开发环境
-1.2.示例使用的控制器
-1.3.示例功能说明
-1.4.示例前置条件
-1.5.示例文件下载
二.示例模型建模过程
三.示例模型的使用
四.访问控制器IO
五.示例小结
回到顶部
UDS常用功能之访问控制器IO
一.示例说明
-1.1.示例软件开发环境
-1.2.示例使用的控制器
-1.3.示例功能说明
-1.4.示例前置条件
-1.5.示例文件下载
二.示例模型建模过程
三.示例模型的使用
四.访问控制器IO
五.示例小结
回到顶部
# UDS常用功能之访问控制器IO ## 一.示例说明
### 1.1.示例软件开发环境
MATLAB版本:MATLAB R2019a VS版本:VS2015 S32DS版本:S32DS for S32 Platform 3.5 ECUCoder版本:ECUCoder for S32K344V1.3D或者ECUCoder for S32K311V1.3D MeCa版本:MeCa2.0 关于以上软件开发环境,请参考本站《[电控开发环境搭建手册](./build.html)》。 ### 1.2.示例使用的控制器
本示例使用的控制器型号为RapidECU-U34,关于RapidECU-U34控制器的具体信息,请参考本站《[U34控制器硬件参考手册](./u34.html)》。 控制器接线:因为本示例只需要使用最基本的控制器功能,因此控制器接线参考了《[U34控制器硬件参考手册](./u34.html)》中的硬件最小系统接线图,如下图所示。因为本示例未使用到控制器的82、83、90、114、115、117、118管脚,因此可以不接主继电器,控制器的99#、116#、121#管脚可以悬空处理。控制器的25#管脚只在需要进入Bootloader修复模式时才短接到地,平时悬空即可。 控制器的标定CAN总线通过DB9连接器连接到ZLG USBCAN卡的CAN1接口,其中50#管脚为CAN低,69#管脚为CAN高,CAN低与CAN高不可接反,否则无法建立通信。标定CAN总线必须使用双绞线,双绞线靠近CAN卡处需要并联一个120欧姆左右的终端电阻以保证标定CAN通信稳定可靠。 U34控制器的标定CAN内部已经并联了一个120欧姆左右的终端电阻,因此,在标定CAN总线正确连接之后,标定CAN总线的CAN低与CAN高之间的电阻值应为60~70欧姆,此电阻值需要使用万用表测量确认,如果电阻值不在此范围内,请检查并修复线束。 ![](images4demo/U34_demo31-1.png) 推荐使用带电压电流显示功能与限流保护功能的小型可调直流电源,电源电压可调节为12V或者24V左右,电流限制值可调节为1A左右,这样即使线路存在短路故障也不会产生很大冲击电流。如果使用的是车载电瓶或者大功率直流电源的话,上图中的10A保险是必须接的,否则一旦线路存在短路故障将导致线路烧毁甚至起火爆炸。 按照以上接线(不接主继电器,99#、116#、121#管脚悬空),当点火开关未闭合时,电源电流应小于1mA(大多数电源显示0)。当点火开关闭合时,12V电源的电流大约为90mA左右(70mA-110mA),24V电源的电流大约为45mA左右(35mA-55mA)。如果点火开关闭合时12V电源的电流小于50mA或者24V电源的电流小于30mA,表明控制器供电存在异常,控制器未正常启动。如果点火开关闭合时12V电源的电流大于200mA或者24V电源的电流大于100mA,表明电源线路存在异常,可能存在短路故障。不管电流过小或者过大,都应该立即切断电源,重新检修线束并使用万用表测量确认无短路故障之后再重新上电。 ### 1.3.示例功能说明
本示例在[第一个可在控制器中运行的模型](./demo01.html)DEMO01_FirstModel的基础上,添加了UDS使能模块、UDS IO控制模块、EEPROM使能模块和低端功率驱动开关模块。 示例模型中包含两个软件计数器,分别是100ms软件计数器与1s软件计数器,可以使用标定软件观察到这两个软件计数器的值。模型中包含一个标记模型软件版本的常量,可以使用标定软件观察到这个软件版本常量的值。 模型100ms任务中包含了UDS IO控制模块和低端功率驱动开关模块块。 ### 1.4.示例前置条件
本示例要求用户提前搭建好基于模型设计的软件开发环境,请参考本站《[电控开发环境搭建手册](./build.html)》。 本示例操作实践要求有一台RapidECU-U34控制器并且正确接线,请参考本文章节1.2《示例使用的控制器》。 本示例属于基础示例,要求用户具备Simulink/ECUCoder建模技能。如果用户还没有Simulink/ECUCoder的使用经验,建议首先学习并操作《[UDS常用功能之通过ID读写数据](./demo29.html)》。 ### 1.5.示例文件下载
用户可以参考本文自行建模而不需要下载示例文件,用户也可以下载示例文件以获取更多参考信息,示例文件下载地址:[示例文件](./download.html)。 ## 二.示例模型建模过程
示例模型建模过程如下: 1. 新建一个文件夹,名称为DEMO31_UDSIOID。 2. 切换MATLAB工作路径到上述新建文件夹的路径,新建一个名为DEMO31_UDSIOID模型。 3. 点击进入Simulink的ECUCoder for S32K344模块库(或者ECUCoder for S32K311模块库), 点击RapidECU_U34子库, 选择RapidECUSetting模块,将RapidECUSetting模块拖入到新建的模型中。 4. 在模型中创建一个1s的任务,任务中添加一个名为MyCounter_1s的软件计数器。此步骤与《[第一个可在控制器中运行的模型](./demo01.html)》的建模步骤相同。为了管理模型的软件版本,在1s的任务中添加一个Constant模块,将模块的值设置为23121615(年月日小时设置法)。此步骤与《[为模型添加测量变量与标定变量](./demo02.html)》的建模步骤相同。 5. 点击MemoryManagement子库,将EEPROMEnable模块拖入模型顶层,双击该模块,勾选EEPROM Enable,使能EEPROM功能。此步骤与《[读写控制器的EEPROM存储器或者FRAM存储器](./demo20.html)》的建模步骤相同。点击UDS子库,将UDSEnable模块拖入模型顶层,双击该模块,勾选UDS Enable,使能UDS功能。此步骤与《[UDS常用功能之通过ID读写控制器内部数据](./demo29.html)》的建模步骤相同。 6. 将IOControl模块拖入100ms任务中,双击该模块,选择IOID0: F200,添加一个Constant模块,将值设为0(采样时间设置为-1),与IOControl模块连接,UDS上位机未获取控制权的状态下,IOControl模块的输出=输入,即IOControl默认输出0。 7. 添加一个MeaModule测量模块,命名为Out_IOID0_F200,添加一个PowerDriverSwitch(LS)模块,选择58:O_SW01_LS0A4通道,将它们与IOControl模块连接。UDS上位机获取控制权时,IOControl模块的输出值取决于UDS命令,通过标定软件可以观测Out_IOID0_F200的变化。 建模完成的100ms任务模型如下图所示: ![](images4demo/U34_demo31-2.png) ## 三.示例模型的使用
示例模型使用过程如下: 1. 在配置好的软件开发环境中,切换MATLAB工作路径到DEMO31_UDSIOID文件夹,打开模型DEMO31_UDSIOID。 2. 点击“Build Model”按钮或者使用快捷键Ctrl+B编译模型。模型编译完成之后,生成DEMO31_UDSIOID.s19文件与DEMO31_UDSIOID.a2l文件,其中.s19文件用于刷写到控制器内部,.a2l文件用于测量标定。 3. 使用一台RapidECU-U34控制器,控制器接线请参考本文章节1.2《示例使用的控制器》。利用MeCa-UDS Program软件将DEMO31_UDSIOID.s19文件刷写到RapidECU-U34控制器中。 4. 使用MeCa软件新建一个名为DEMO31_UDSIOID的项目,导入数据库文件时使用DEMO31_UDSIOID.a2l文件。项目面板中添加“多数字显示”控件,控件关联A2L文件中所有测量变量。 5. 依次点击MeCa软件工具栏中的“建立连接”与“开始同步”按钮,可以观察到模型中测量变量的值正在变化,其中变量MyCounter_1s每秒钟加一。 6. 通过UDS获取或放弃控制器的IO控制权。 DEMO31_UDSIOID模型正在U34控制器中运行的MeCa软件如下图所示: ![](images4demo/U34_demo31-3.png) Out_IOID0_F200的值随着UDS命令的变化而变化,模型运行符合设计预期。 ## 四.访问控制器IO
访问控制器IO需要首先切换诊断会话模式(SID0x10)到扩展模式并保持(SID0x3E),然后解锁控制器(SID0x27),控制器解锁之后才能访问控制器IO(SID0x2F)。具体操作步骤如下: 1. 打开MeCa软件点击UDSTool按键,打开UDSTool界面,点击打开设备,与控制器建立连接。 2. 点击UDS服务,打开UDS服务界面,点击“UDS 配置/Config”,在弹出的 Form_UDSConfig 窗体“保持会话 / Tester Present”项目中勾选“启动/Start”,然后点击“确定”按钮,即可启动0x3E服务,UDSTool默认设定每2s向ECU发起一次握手,保持ECU当前会话。UDSTool每2s通过0x22服务请求DID 0xF186,获取ECU当前的会话状态,更新上位机界面。 3. 在左侧点击“(0x10)诊断会话控制/Diagnosticsession control”,展开0x10服务,选择“03 - 扩展会话/Extended session”,然后点击右侧“Send”按钮,ECU正响应,完成诊断会话切换。 4. 在左侧点击“(0x27)安全访问/Secure access”展开0x27服务,选择“01 - 请求Seed/Request Seed”,然后点击右侧“Send”按钮,ECU正响应,UDSTool获得种子并解析钥匙,上位机默认的解析方式为“钥匙=种子”,与U34/F23控制器的解析方法对应。 5. 在左侧选择“02 - 发送 Key/Send Key”,自动填入钥匙,然后点击右侧“Send”按钮,ECU 正响应,解锁安全模式。 6. 在左侧点击“(0x2F)按标识符的输入输出控制/Input output control by identifier”,展开0x2F服务,选中“03 - 控制ECU相应的输入输出/shortTermAdjustment”,在IOID下拉框中选择“0xF200”,点击“Parse”按钮解析至“Data”文本框,修改字节4控制状态,此处将控制状态设置为1,点击“Send”按钮,ECU正响应,上位机获取该IO控制权,0xF200的IOControl模块输出1(Out_IOID0_F200的值变为1)。 ![](images4demo/U34_demo31-4.png) 7. 在左侧选中“00 - 放弃控制权/returnControlToECU”,然后在 IOID 下拉框中选择“0xF200”,点击“Parse”按钮,再点击“Send”按钮,ECU正响应,放弃该IO控制权。 ![](images4demo/U34_demo31-5.png) UDSTool详细操作方法请查看ECUCoder软件自带《UDS使用说明书》(说明书文件位于Documentation文件夹中)。 ## 五.示例小结
示例模型DEMO31_UDSIOID演示了UDS常用功能之访问控制器IO,通过学习本示例并操作实践,用户可以学习到: 1. IOControl模块的基本功能。 2. 如何在模型中添加IOControl模块并关联到ECU的某个特定IO。 3. 如何使用诊断软件或者诊断仪访问控制器IO。