- 博客(409)
- 资源 (3)
- 收藏
- 关注
原创 Capl中的运算符
Capl中的运算符类似于C语言。由于capl中没有指针的概念,所以没有指针取值,取地址等运算符。Capl中的运算符优先级同C语言一样,同样小括号可以 提升优先级。例如10/4 结果为2 10/3结果为3例如10+1.2结果是11.210.00+1.2结果是11.2只要参与运算的数据有浮点数,就不能使用整形%d的占位符。例如10/4 可以写成 float(10)/4 结果为2.5例如10/6 结果为4。
2024-05-10 16:26:47 174
原创 Capl复合数据类型:枚举
定义的枚举类型变量,里面的成员如果没有赋值,默认从左到右,依次为012345...。如果有赋值就该成员就代表它所赋的值。用于定义一组有穷的、命名的常量。常量有了命名更容易理解和记忆,枚举中常量的命名,必须在整个capl程序中唯一。
2024-05-10 16:23:31 213
原创 Capl复合数据类型:结构
结构是由一系列的相同或不同的数据类型构成的整体。结构中的每一项数据成为一个成员。每个成员可以有各自的数据类型。所有成员一起表示一个整体结构。省略结构体类型后,后面就无法在使用该结构体继续声明变量了,只有当时定义的结构体变量还可以使用。
2024-05-10 16:22:11 131
原创 Capl复合数据类型:数组
数组声明赋值时,如果赋值的元素超过数组设置的大小,就会报错,触发数组索引越界。如果赋值的元素没有超过数组设置的大小,没有赋值的元素默认赋值为0.数组中的元素,可以读可以写,赋值的元素可以重新赋值以达到修改元素值的目的。如果想要得知数组的长度,可以使用capl语言内置的函数elCount来获取。创建一个字符串类型的变量,本质上就是声明一个char类型的数组。数组声明时,如果不赋值,默认所有元素都赋值为0.字符数组的长度=中文字符串中字符的个数*2+1;字符型数组,赋值时需要为数组元素加上单引号。
2024-05-09 17:16:47 198
原创 Capl简单数据类型
其中255是一个常量,系统已经自动为其分配了四个字节的存储空间;变量a是一个byte类型的变量,系统为其分配一个字节的存储空间。现在把255常量赋值给变量a,由于常量255有四个存储空间,而变量a只有一个存储空间,所以赋值时会截断常量的存储空间,使其符合变量的存储空间。常量系统默认分配4个字节,如果常量超过4个字节,就需要在数字后面加上LL,表示 是一个8字节数据。在数据保存到变量中的时候,如果超过了变量存储的范围,会被截断。浮点型输出时,用%f。在capl语言中,系统会默认给常量分配四个字节的空间。
2024-05-09 17:14:27 152
原创 CAN报文中的信号解析
ECU发送的一帧CAN报文中是有多个信号的。信号在报文的数据域中,数据域中可以有多个信号。协议规范一帧CAN报文数据域最多有8个字节,企业中一般都设计为所有的CAN报文都是8字节。8个字节(B)换算成比特(bit)就是64个比特。从起始位40开始,从右向左开始填充数据,当本行填充完成,继续向上填充。把填充的数据转变成原始的二进制,msb代表最高位,lsb代表最低位。主机厂制定信号在CAN报文数据域中的分布、信号值得换算等。每个字节有8bit:从右向左,由低到高。CAN报文数据域8字节的二维布局。
2024-05-08 09:38:51 122
原创 CAN报文的用途
CAN报文主要有四个用途,分别是应用报文,诊断报文,网络管理报文,标定报文。网络管理报文:让整个CAN总线上的ECU能够更省电的进入休眠或者唤醒状态。应用报文:ECU发送各自应用场景的报文。诊断报文:查看ECU的故障信息。标定报文:校准调整参数系数。
2024-05-08 09:36:19 200
原创 CAN报文总线仲裁机制
多个节点同时发送报文,可以同时发送,但是在发的过程中,每个节点在发送每一个比特的同时也在回读总线上的每一个比特的实际电平。这种巧妙的设计,不需要在仲裁过程中,额外的再发送一些别的报文,即不浪费时间,也不破坏报文的这种数据。其中非常根本的底层机制,就是显性的电平一旦某一个节点发出去,那么总线的电平就呈现显性低电平,因此显性低电平0的优先级就更高。如果有两个以上的ECU同时发送CAN报文,ID值小的报文可以发送成功。每个ECU在发送报文的同时,它也在不断的回读总线上的电平,发送报文就是传输发送电平。
2024-05-08 09:34:35 305
原创 ECU和CAN总线
CAN控制器和CPU集成在一起形成一个单独的电子元件MCU。MCU和CAN收发器进行连接,MCU根据应用的逻辑信号0、 1转变成普通的低电平、高电平。CAN收发器把普通的电平变成两根导线的差分电平,通过CAN H和CAN L发送出去。汽车内部有大量的ECU(电控单元),ECU和ECU是要通信的,这就需要用到CAN总线。一旦受到影响CAN高和CAN低的电压就都发生同样的变化,电压差还是保持不变的,因此不影响CAN信号的解析。使用CAN高和CAN低两根线来发送信号,不易受外界电磁等原因的干扰,
2024-05-08 09:31:19 206
原创 传统汽车空调系统工作原理
1.首先讲一个概念液体变成气体:吸热4.工作过程蓝色为蒸发箱的气态氟红色为高温高压的蒸汽氟压缩机负责对气体进行压缩,由汽车发动机曲轴带动。工作时,蒸发箱的气态氟流入压缩机,经过压缩后变成高压蒸汽。加压过程气体变成液体:放热 2.在汽车空调系统中热量的传递的介质不是水,而是氟利昂,简称:“氟”。3.传统式汽车空调结构如下该三个部件位于车头进气口位置该部位位于汽车驾驶车厢前方,常规上介于发动机与汽车驾驶车厢之间,有铁板与驾驶车厢阻隔。高温高压的蒸汽氟通过冷凝器左下方管道流向
2024-05-07 21:36:12 304
原创 UDS的0x19服务
诊断响应报文中的第3个字节,DTC状态可用掩码,表示ECU支持那些种状态的故障码。第4个字节DTC及状态*N,表示响应出所有符合诊断请求条件的DTC.DTC FID(DTC的格式标识符),如下所示。DTC Count存储故障码格式的标识符。DTC FID所支持的故障码状态的情况。19 01 用于读取故障码的数量。19 02 用于读取故障码列表。DTC SM故障码的状态掩码。DTC SM:DTC状态掩码。0x19读取故障码信息。
2024-04-24 10:08:27 146
原创 UDS故障码的状态
在使用UDS19 02 服务读取故障码信息时,读取到的故障码信息占四个字节,其中 04 20就代表 P0 04 20(动力系统故障),第三个字节00就代表发生故障的原因。这个故障码状态字节有8个bit,每一个bit上面的0或者1来指示故障码,当前是否具有某种状态,0就代表不具有,1就代表具有。Bit7 :故障是否上报仪表,该故障如果和仪表上的故障灯有关联,就需要上报仪表。在ECU的一个操作周期之内,从ECU的唤醒到休眠。Bit3:故障码在一个或多个检测周期都出现,表示已确认的故障,bit位置为1;
2024-04-24 10:06:44 241
原创 UDS的3字节故障码
在UDS的规范下面,使用19服务去读取故障码,会发现读到市面上各种车企的各种ECU中的所有的故障码读出来都是3个字节。这与前面的五位故障码占2个字节不符,其实读出来是3个字节就是UDS中制定的规范。如今车企中主要采用的是三个字节的故障码。现在市面上主要的ECU存储的故障码都是三个字节的,符合UDS规范的这个。前两个字节就是OBD诊断故障码(五位故障码)。UDS故障码包含OBD故障码(五位故障码)Root DTC就是诊断故障码中所谓的五位故障码,FTB代表故障具体的原因。
2024-04-23 16:52:06 152
原创 UDS诊断故障码DTC
这五位故障码,具体每一位代表什么等规定。参照上下图,橙色部分00代表0即ISO/SAE控制,如果橙色部分为01代表1即制造商自定义,10代表2即ISO/SAE控制,11代表3即ISO/SAE控制。参照上下图,紫色部分代表故障所属的子系统,紫色部分的4位数字组成一个16进制数字,该16进制的值代表不同故障所属的子系统。参照上下图,浅蓝色和浅绿色部分组合起来形成两个16进制数字,比如17、22,它们代表发生故障的具体部件及类型。参照上下图,绿色部分00代表P,如果绿色部分是01代表C,10代表B,11代表U。
2024-04-23 16:50:27 316
原创 UDS的0x27服务
诊断仪(Tester)需要先向ECU发送请求种子,种子就是ECU通过自己内部的随机算法,生成的一个随机的数值,常见的有两个字节,四个字节。然后ECU就会把生成的这个种子作为本次诊断的响应,返回种子给诊断仪(Tester)。诊断仪也会用同样的安全算法,根据ECU返回的种子去计算一个钥匙(key)。对不不同,则返回否定响应。第二:子功能是成对出现的,01/02, 03/04 ,05/06,奇数01 03 05都代表发送请求一个种子,偶数 02 04 06都代表发送一个key让ECU去验证。
2024-04-23 16:47:27 149
原创 Uds的0x10服务
红色01 F4代表扩展超时时间,英文叫做P2*ServerMax,01 F4是16进制,转换成十进制就是500,协议上规定扩展超时时间转换成十进制的数还需要乘以10才是它实际的扩展超时时间,也就是500 * 10 = 5000毫秒。如果长时间在非默认会话下,没有用诊断仪跟ECU通讯,那么ECU会调回或者是返回到默认会话下。如果在默认会话下,想进入扩展会话,直接进入即可,想进入编程会话必须先进入扩展会话,才可以进入编程会话。0x10为诊断会话控制,该服务下有三种子功能,分别为默认会话,扩展会话,编程会话。
2024-04-23 16:45:48 104
原创 UDS报文传输的四种帧
是在CAN总线传输的情况下, 具体规定如何传输UDS诊断的请求和响应报文的。四种帧就是定义在这个标准中。流控帧(FC)负责根据接收方和发送方的实际需要,来实时的调节下次发送连续帧(CF)时如何发送。一个UDS的请求或者响应的发送方,发出一个单帧(SF)即可,接收方接收到就可以了。因为单帧的时候,这一帧CAN报文是能够装得下所有的uds报文。一帧CAN报文中有8个字节,流控帧的控制信息一定是3个字节,还有5个字节用00填充,称为“补白”。如下图所示,是一个接收方发送给发送方的流控帧(FC)示例。
2024-04-23 16:44:11 320
原创 Uds诊断协议的请求和响应的寻址
通过功能寻址的方式发送请求报文的时候,总线上的所有ECU都需要回复响应的报文。基于CAN总线的诊断通信来说,由于每个ECU可以根据事先设定只处理总线上,指定CAN报文ID的这个报文,因此UDS协议中的诊断请求响应的地址信息,本质上就是CAN报文的ID。Uds诊断通信的报文是通过CAN协议传输的,UDS诊断的报文就是CAN报文,请求和响应的地址信息就是CAN报文的ID。在车企中其实会为总线上的每个ECU都设定一个唯一的UDS诊断请求的CAN报文ID,以及一个唯一的UDS诊断响应的CAN报文ID。
2024-04-22 18:39:16 432
原创 Uds诊断协议请求与响应
否定响应:该响应报文一共三个字节。首字节为7F,第二个字节为请求的SID,第三个字节为否定响应吗NRC(表示响应失败的原因)请求报文格式:请求报文的首字节必须是SID,第二个和第三个字节代表该SID下的某个子服务的ID。响应:ECU处理完成,就会返回一个处理的结果给回诊断仪。这个响应也是报文形式的。肯定响应:首字节为请求的SID+40。请求:报文通过诊断仪发送给ECU。响应报文格式:肯定响应、否定响应。
2024-04-22 18:37:27 142
原创 Uds诊断简介
uds规定在ISO14229-1,一共有26个服务。每个服务都有一个唯一的ID,也称为SID,是一个两位的16进制数,也就是一个字节。这26个服务分为六大类。分别为诊断和通信管理功能单元、故障码传输功能单元、数据传输类、输入输出控制功能单元、例行程序功能单元、上传和下载功能单元。
2024-04-22 17:07:54 198
原创 CANdb++数据库
打开candb++软件,点击文件,选择创建数据库,并选择数据库模版,本次测试选择CanTemplate.dbc模版,选择保存在本机中的位置,并自定义命名该数据库文件。根据矩阵表中信号量的名称,备注,字节等信息,在创建信号量时要确保一一对应。此时可以双击EMS_0x196报文,弹出设置页面,选择layout界面,就可以查看这两个信号在报文中的实际分布。双击EMS_0x196报文下的信号,弹出设置页面,在Startbit处设置信号起始位。根据信号矩阵表创建报文ID为0x196的报文信息。
2024-04-22 15:37:32 200 1
原创 CAPL编程基础
两个事件sysvar,sysvar_update都可以实时更新。on stopMeasurement{} //工程停止。只有后面的事件signal_update可以实时更新数据。4.int myFunction{} //自定义函数。2.variables{} //全局变量声明。3. on preStart{} //初始化。on preStop{} //工程预停止。on start{} //工程运行。1.includes{} //头文件。2.报文事件 报文变量。
2024-04-22 11:10:15 223
原创 CANoe创建一个完整的工程
创建一个文件夹,文件夹为工程名字LightControll(自定义)。在该工程文件夹目录下继续创建3个文件夹,分别为CANdb,Panels,Nodes。在首页,点击file,选择new,找到CAN500kBaud 1ch(代表波特率),选择右边的Create Configuration。步骤2创建工程后不着急操作,先搭建好工程层级和目录文件。包含一条报文SwitchState和一个信号sSwitch4.1打开CANdb++ Editor,创建数据库。
2024-04-19 10:16:03 294
原创 软考——程序设计语言
计算机硬件只能识别由0、1组成的机器指令序列,即机器指令程序,因此机器指令是最基本的计算机语言。由于机器指令是特定的计算机系统所固有的、面向机器的语言,所以用机器语言进行程序设计时效率很低,程序的可读性很差,也难以修改和维护。因此,人们就用容易记忆的符号代替0、1序列来表示机器指令,例如,用ADD 表示加法、用SUB 表示减法等。用符号表示的指令称为汇编指令,汇编指令的集合被称为汇编语言。汇编语言与机器语言十分接近,其书写格式在很大程度上取决于特定计算机的机器指令,因此它仍然是一种面向机器的。
2024-04-17 19:41:02 693
原创 软考-计算机组成系统
当遇到转移指令时,后继指令的地址根据当前指令的地址加上一个向前或向后转移的位移量得到,或者根据转移指令给出的直接转移的地址得到。PSW保存由算术指令和逻辑指令运行或测试的结果建立的各种条件码内容,主要分为状态标志和控制标志,例如运算结果进位标志(C)、运算结果溢出标志(V)、运算结果为0标志(Z)、运算结果为负标志(N)、中断标志(D)、方向标志(D)和单步标志等。指令译码器就是对指令中的操作码字段进行分析解释,识别该指令规定的操作,向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能。
2024-03-18 17:59:28 813
原创 C语言-结构体
/定义了三个struct stu类型的变量,注意不要把struct省略,每个变量都有三个成员,分别是num name sex。2、共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖。4字节对齐,即存放double型变量的起始地址,必须是4的倍数,double变量占8字节。8字节对齐,即存放double型变量的起始地址,必须是8的倍数,double变量占8字节。初始化共用体为第一个成员。4字节对齐 ,即存放float 型的变量,起始内存单元的编号是4的倍数即可。
2024-02-01 08:42:16 790
原创 C语言-字符串处理函数
既修饰指针变量的类型,又修饰指针变量,则只能通过原本变量修改值。函数一个字符一个字符比较,只要出现不一样的,就会立即返回。修饰指针变量的类型,无法通过指针变量修改地址里面的值。返回切割下来的字符串的首地址,如果都切割完毕,则返回。第一次切割,就传入指定的字符串,后面所有次的切割传。如果使用全局变量的地址修改值,运行时程序异常结束。修饰指针变量,无法修改指针变量保存的地址。查找的时候,查找的是第二个参数的第一个。既修饰指针变量的类型,又修饰指针变量。指向的字符串中,找最后一次出现的。
2024-01-31 09:58:18 928
原创 C语言-动态内存申请
3、使用malloc开辟空间需要保存开辟好的空间的首地址,但是由于不确定空间用于做什么,所以本身返回值类型为void *,所以在调用函数时根据接收者的类型对其进行强制类型转换。int a [10]申请的内存,首地址丢了,找不了,再也没法使用了,也没法释放了,这块内存就被泄露了。功能:在原本申请好的堆区空间的基础上重新申请内存,新的空间大小为函数的第二个参数。置开辟指定的空间,然后将原本空间中的数据拷贝过来,然后释放原本的空间。3) malloc申请的内存,内存中存放的内容是随机的,不确定的,
2024-01-30 11:07:58 788
原创 C语言指针与函数的关系
将数组作为参数传递给函数,不存在复制传参和地址传参,本质都是地址传参,所以在函数内部对数组进行改变,则函数执行完毕后,原本的数组也会改变,因为传递给函数的都是数组的地址。c语言规定:函数的名字就是函数的首地址,即函数的入口地址 咱们就可以定义一个指针变量,来存放函数的地址,这个指针变量就是函数指针变量。定义了一个函数指针数组,有10个元素p[0] ~p[9],每个元素都是函数指针变量,指向的函数,必须有整型的返回值,两个整型参数。分析:q是指针数组的名字,是指针数组的首地址,是q[0]的地址。
2024-01-30 09:36:05 479
原创 C语言-数组指针
/定义了一个数组指针变量p,p指向的是整型的有5个元素的数组。二维数组,有行,有列。二维数组可以看成有多个一维数组构成的,是多个一维数组的集合,可以认为二维数组的每一个元素是个一维数组。a是数组的名字,是a[0]的地址,p=a即p也保存了a[0]的地址,即a和p都指向a[0],所。数组的名字是数组的首地址,是第0个元素的地址,是个常量,数组名字加1指向下个元素。P是个指针,p是个数组指针,p加1指向下个数组,跳10个整形。本身是个指针,指向一个数组,加1跳一个数组,即指向下个数组。
2024-01-28 10:47:27 2077 1
原创 C语言-指针的基本知识(下)
变量存放在内存中,有地址编号,咱们定义的数组,是多个相同类型的变量的集合,每个变量都占内存空间,都有地址编号。注:多字节变量,占多个存储单元,每个存储单元都有地址编号, c语言规定,存储单元编号最小的那个编号,是多字节变量的地址编号。总结:无论什么类型的指针变量,在32位系统下,都是4个字节,只能存放对应类型的变量的地址编号。所以可以用等号给p赋值,但不能给a赋值。//在定义的时候,*不是取值的意思,而是修饰的意思,修饰p是个指针变量。//在调用的时候*是取值的意思,*指针变量 等价于指针指向的变量。
2024-01-28 10:45:08 598
原创 CAN相关HAL库驱动
HAL_RCC_CANx_CLK_ENABLE(…Uint32 t SlaveStartFilterBank /*从CAN选择启动过过滤器,单CAN没有意义*/uint32_t FilterFIFOAssignment /*过滤器关联FIFO*/uint32_t TransmitGlobalTime /*发送时间标记(时间戳)*/uint32_t AutoRetransmission /*自动重传*/uint32_t TimeSegl /*时间段1(BS1)长度*/
2024-01-28 10:00:00 420
原创 C语言-指针的基本知识(上)
虚拟内存:操作系统虚拟出来的内存,当一个进程被创建的时候,或者程序运行的时候都会分配虚拟内存,虚拟内存和物理内存之间存在映射关系。因为不管地址内的空间多大,但是地址编号的长度是一样的,所以在32位操作系统中,地址都是四个字节。内存以字节为单位来存储数据的,咱们可以将程序中的虚拟寻址空间,看成一个很大的一维的字符数组。在32位平台下,地址总线是32位的,所以地址是32位编号,所以指针变量是32位的即4个字节。在 定义指针变量的时候 * 是用来修饰变量的,说明变量p是个指针变量。int *p,*q;
2024-01-27 16:51:07 1500
原创 C语言-预处理
1.C语言的编译过程:预处理、编译、汇编、链接gcc -E hello.c -o hello.i 1、预处理gcc -S hello.i –o hello.s 2、编译gcc -c hello.s -o hello.o 3、汇编gcc hello.o -o hello_elf 4、链接1:预编译将.c 中的头文件展开、宏展开生成的文件是.i文件2:编译将预处理之后的.i 文件生成 .s 汇编文件3、汇编。
2024-01-27 14:59:01 948
原创 CAN相关寄存器
CAN_(T/R)DLxR:低位数据寄存器。存放(待发送/接收)报文数据段的Data0-Data3的内容。CAN_(T/R)DHxR:高位数据寄存器。存放(待发送/接收)报文数据段的Data4-Data7的内容。CAN_(T/R)IxR:标识符寄存器。在CAN过滤器激活寄存器中,使用哪个过滤器组,就在对应位置1即可。CAN_F×R(1/2):过滤器组×寄存器。CAN_(T/R)DTxR:数据长度和时间戳寄存器。CAN_ MCR:CAN主控制寄存器。CAN FM1R:过滤器模式寄存器。
2024-01-27 08:30:00 200
原创 CAN控制器介绍
根据过滤器组的工作模式不同,寄存器的作用不尽相同。在使能过滤器情况下,总线上广播的报文ID与过滤器的配置都不匹配,CAN控制器会丢弃该报文,不会进入到接收FIFO中。选择模式可设置屏蔽位模式或标识符列表模式,寄存器内容的功能就有所区别。睡眠模式:复位后进入睡眠模式,can总线处于睡眠状态,可以降低功耗。CAN控制器的测试模式分为三种:静默模式、环回模式、环回静默模式。CAN控制器工作模式分为三种:初始化模式、正常模式、睡眠模式。这三种测试模式的配置,都是在初始化工作模式下进行配置的。
2024-01-26 10:45:47 635
原创 CAN协议层介绍
所以,节点会使用硬件同步方式调整,把自己的SS段平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。注意:节点监测到总线上信号的跳变在SS范围内,表示节点与总线的时序是同步的,此时采样点的电平即该位的电平。间隔帧(Inter Frame Space):用于将数据帧及遥控帧与前面的帧分离开来的帧。遥控帧(Remote Frame):用于接收单元向具有相同ID的发送单元请求数据的帧。
2024-01-26 10:42:34 339
原创 CAN基础知识介绍
CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。1986年,博世公司开发出CAN通信协议,1993年,ISO发布CAN标准,ISO11898(高速CAN)及ISO11519(低速CAN)。综上所述,虽然CAN总线本身并不是严格意义上的差分信号,但它利用了两根信号线(CAN_H和CAN_L)之间电压差的差分信号传输方式来实现其功能。示例:在CAN总线上,差分信号的概念得到了体现,其中CAN_H和CAN_L信号线的电压差称为差分电压,用于表示数据的逻辑状态。
2024-01-26 10:40:27 492
原创 vectorCast基于分类树设计测试用例
14.此时回到vector cast操作页面,选中测试用例,右键点击generate tests。或者直接关闭测试用例编辑器vector classification tree,也会弹出一个提示框,提示是否重新生成编辑器里面的等价类划分,点击yes。上图所示,勾选框中有的显示对号,有的显示正方形。需要设计三个等价类,第一个等价类是0-60,所以设置等价类时,要勾选最大值和最小值。4.此时就可以在右边视图窗口选择那些变量是需要进行分类树划分的,输入的和输出的。性别分为2类,年龄分为3类,工作年数分为3类。
2024-01-22 08:00:00 118
Javaweb《卖淘乐》后台管理系统课程设计.zip
2022-05-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人