汽车通信指令程序编译开发
⑴ 汽车如何编程
Define Class 环奇小大脚 As 舵机控制
Name = "环奇小大脚"
Procere Init()
This.COM口 = 9
This.速率 = 115200
Return DoDefault()
Endproc
Procere 定义油门曲线()
If Not DoDefault() Then
Return .F.
Endif
*-- 油门
Insert Into 油门曲线 (通道, 位置, 脉冲宽度) Values (0, -1, 1700) && 油门 - 倒车最大
Insert Into 油门曲线 (通道, 位置, 脉冲宽度) Values (0, 0, 1500) && 油门 - 中点
Insert Into 油门曲线 (通道, 位置, 脉冲宽度) Values (0, 0.05, 1450) && 油门 - 不动的
Insert Into 油门曲线 (通道, 位置, 脉冲宽度) Values (0, 1, 1350) && 油门 - 最大
*-- 方向舵
Insert Into 油门曲线 (通道, 位置, 脉冲宽度) Values (1, -1, 1450) && 方向舵 - 最左
Insert Into 油门曲线 (通道, 位置, 脉冲宽度) Values (1, 0, 1370) && 方向舵 - 中点
Insert Into 油门曲线 (通道, 位置, 脉冲宽度) Values (1, 1, 1250) && 方向舵 - 最右
Return .T.
Endproc
Enddefine
Define Class 舵机控制 As Form
Name = "舵机控制"
COM口 = 0
速率 = 115200
Procere Init()
This.定义油门曲线()
Return This.连接舵机控制板()
Endproc
Procere Destory()
*-- 释放串口。
If Type("This.舵机控制板") = "O" Then
If This.舵机控制板.PortOpen Then
This.舵机控制板.PortOpen = .F.
Endif
Endif
Return .T.
Endproc
Procere 定义油门曲线()
*-- 创建油门曲线临时表
Create Cursor 油门曲线 (通道 Integer, 位置 N(6, 4), 脉冲宽度 N(4))
Return .T.
Endproc
Procere 连接舵机控制板()
*-- 没有“舵机控制板”就创建一个。
If Type("This.舵机控制板") <> "O" Then
This.AddObject("舵机控制板", "Olecontrol", "MSCommlib.MSComm")
Endif
*-- 打开串口。
If This.舵机控制板.PortOpen Then
This.舵机控制板.PortOpen = .F.
Endif
This.舵机控制板.CommPort = This.COM口
This.舵机控制板.Settings = Textmerge("<<This.速率>>,n,8,1")
If Not This.舵机控制板.PortOpen Then
This.舵机控制板.PortOpen = .T.
Endif
Return This.舵机控制板.PortOpen
Endproc
Procere 发送指令(通道, 位置)
Local 下限位置, 下限脉冲宽度, 上限位置, 上限脉冲宽度, 当前脉冲宽度, 串口指令代码
m.下限位置 = -1
m.下限脉冲宽度 = 500
m.上限位置 = 1
m.上限脉冲宽度 = 2500
m.当前脉冲宽度 = 1500
m.串口指令代码 = ""
*-- 1 找到当前位置最近的2个曲线值,如果找不到就取默认值 -1, 500 及 1, 2500。
*-- 2 生成指令。
*-- 3 发送给串口。
*-- 1
Select Top 1 * From 油门曲线 Where 通道 = m.通道 And 位置 = m.位置 Order By 位置 Desc Into Cursor curTemp
If Reccount("curTemp") > 0 Then
m.当前脉冲宽度 = curTemp.脉冲宽度
Else
Select Top 1 * From 油门曲线 Where 通道 = m.通道 And 位置 < m.位置 Order By 位置 Desc Into Cursor curTemp
If Reccount("curTemp") > 0 Then
m.下限位置 = curTemp.位置
m.下限脉冲宽度 = curTemp.脉冲宽度
Endif
Select Top 1 * From 油门曲线 Where 通道 = m.通道 And 位置 > m.位置 Order By 位置 Into Cursor curTemp
If Reccount("curTemp") > 0 Then
m.上限位置 = curTemp.位置
m.上限脉冲宽度 = curTemp.脉冲宽度
Endif
m.当前脉冲宽度 = Int((m.上限脉冲宽度 - m.下限脉冲宽度) / (m.上限位置 - m.下限位置) * (m.位置 - m.下限位置) + m.下限脉冲宽度)
Endif
*-- 2
m.串口指令代码 = Textmerge("#<<m.通道>>P<<m.当前脉冲宽度>>")
Debugout m.串口指令代码
*-- 3
This.舵机控制板.OutBufferCount = 0
This.舵机控制板.Output = 串口指令代码 + Chr(13)
Endproc
Enddefine
⑵ 学习汽车模块之间的编程与通讯
汽车电子技术的发展和进步,一般的家用轿车上有数十个电子控制单元,豪华轿车更是达到数百个电子控制单元。汽车生产制造的过程中,同一种电子控制单元用在不同配置的汽车上,需要使用不同的软件参数。并且出厂之前,需要使用检测设备与电子控制单元进行通讯(读取、写入、控制),以确保电子控制单元内软件的正确性。
汽车生产厂家需要根据不同汽车、不同的电子控制单元的产品规范进行编程,目前的编程方式为敲代码,每一个语句由多个代码组成,编程工作难度大、非专业编程人员无法进行编程工作,且此种方式的编程效率低。
本发明的目的是解决上述的编程难度大、编程效率低的问题。应用可视化编程系统,编程工作简化成了“填空题”、“选择题”,即使非专业编程人员也能轻易掌握完成编程工作,且编程效率大幅度提高。
本发明包括以下步骤:
1)在个人电脑的可视化编程系统的后台设置中,将汽车电子控制单元的通讯程序分段切割,每发送或者接受一条指令的语句成为一个块;传统编程以语句为最小单位,一个完整的程序语句数万行;可视化编程以块为最小单位,一个完整的程序由数十到数百个块组成;
2)每个块中,针对不同汽车电子控制单元需要有参数或者指令变化的部分,不赋具体值,以地址名代替;
3)将地址名链接至前台界面的单元格,前台界面单元格与后台地址名相互唯一对应;
4)依据汽车电子控制单元的产品规范文件,绘制程序流程图,将指令与参数变化点整理出来;
5)在可视化编程系统的界面,以填空提、选择题方式完成参数及指令变化点的输入;
6)在可视化编程系统的界面,依据整理好的程序流程图,通过对块的组合,设置块与块之间的运行与跳转信息,并设置通讯参数;所述的通讯参数为通讯等待时间、通讯波特率等;
7)在可视化编程系统的界面,点击编程按钮,系统自动将前台界面的数据通过地址名传送至后台,在后台完成计算,组合成可执行程序;
8)一个完整的汽车电子控制单元通讯程序编程工作完成,重复上述步骤,完成下一个电子控制单元的通讯程序编程。
附图说明
图1为可视化编程系统应用流程图。
图2为使用本发明进行某车型制动防抱死电子控制模块通讯程序流程图。
图3为某车型制动防抱死电子控制模块通讯程序的整理通讯参数及指令变化点电脑界面。
图4为某车型制动防抱死电子控制模块通讯程序的可视化编程系统的界面以填空、选择的方式完成参数与指令变化点的输入电脑界面。
图5为某车型制动防抱死电子控制模块通讯程序的系统自动完成后台程序运行、生成可执行程序、编程工作完成电脑界面。
具体实施方式
如图1所示,本发明包括以下步骤:
1)在个人电脑的可视化编程系统的后台设置中,将汽车电子控制单元的通讯程序分段切割,每发送或者接受一条指令的语句成为一个块;传统编程以语句为最小单位,一个完整的程序语句数万行;可视化编程以块为最小单位,一个完整的程序由数十到数百个块组成;
2)每个块中,针对不同汽车电子控制单元需要有参数或者指令变化的部分,不赋具体值,以地址名代替;
3)将地址名链接至前台界面的单元格,前台界面单元格与后台地址名相互唯一对应;
4)依据汽车电子控制单元的产品规范文件,绘制程序流程图,将指令与参数变化点整理出来;
5)在可视化编程系统的界面,以填空提、选择题方式完成参数及指令变化点的输入;
6)在可视化编程系统的界面,依据整理好的程序流程图,通过对块的组合,设置块与块之间的运行与跳转信息,并设置通讯参数;所述的通讯参数为通讯等待时间、通讯波特率等;
7)在可视化编程系统的界面,点击编程按钮,系统自动将前台界面的数据通过地址名传送至后台,在后台完成计算,组合成可执行程序;
8)一个完整的汽车电子控制单元通讯程序编程工作完成,重复上述步骤,完成下一个电子控制单元的通讯程序编程。
使用可视化编程系统进行某车型制动防抱死电子控制模块通讯程序开发,实施步骤:
1)依据产品文件,绘制程序流程图,见图2;
2)依据产品文件,整理通讯参数及指令变化点,见图3;
3)在可视化编程系统的界面以填空、选择的方式完成参数与指令变化点的输入,见图4;
4)依据流程图,对前台指令(对应后台程序块)进行组合、设置通讯参数,见图4;
5)点击编程按钮,系统自动完成后台程序运行,生成可执行程序,编程工作完成。见图5。
以上为编程全过程,相比传统的敲代码编程,编程难度大幅度降低,技术不是专业的软件技术人员,也能轻松完成编程工作。同时,此种编程方式,大幅节省了编程时间,提高了编程效率。
本发明公开了一种汽车电子控制单元通讯程序的可视化编程方法。该编程方法,包括一台个人电脑、可视化编程系统。其中,个人电脑用于运行可视化编程系统、存储数据。可视化编程系统用于实现参数的输入、程序指令的生成及组合、并自动生成可执行的程序文件。通过可视化编程系统,将传统编程的敲代码工作变成了填空及选择题,极大简化了编程的难度,并显着提升了编程效率。
⑶ 如何进行汽车 CAN 总线开发
首先,请看这份恒润工程师写的论文《CAN总线系统测试技术》。
里面基本描述了CAN总线开发的流程,但主要侧重于CAN总线的测试,不过也能让你有所了解。
根据你的描述,假设你的要求是:能够基于某嵌入式平台(最好该平台在汽车ECU开发中被广泛使用),根据给定的通信协议(一般由通信矩阵描述),编写CAN接口代码,并能通过相关设备进行简单测试。
推荐的学习步骤为:
1. 了解CAN基本知识
可以通过这个ppt,恒润的东西还是不错的。
CAN基础_网络文库
2. 直观的了解CAN
这需要你购买或借用CAN总线检测设备,档次差很多。如果是你自己想玩,可以买个周立功的USB转CAN,淘宝也就几百块钱。如果是课题组采购,可以买个Kvaser的USBCAN,几千块吧。大致这个样子。
要是土豪的话,可以买Vector的VN1600,这个就好几万了。以上三种我都用过。一定要买双通道,然后一个口发,一个口接,可以自己接延长线通过示波器看信号了。尝试修改报文ID,数据,波特率等等,看示波器的变化,对理解第一部分的内容很有帮助
3. 选择嵌入式平台,学习CAN接口的编程
飞思卡尔MC9S08DZ60MLH 8位汽车级CAN总线 开发板 学习板超
可以选择这个小板子练习一下,程序的写法都是差不多的。然后和第二部分的总线检测设备连在一起进行测试。
这一步需要详细了解信号转换的知识,特别是Big Endian和Little Endian的区别,factor和offset的作用,如何置1或置0,可以参考DBC_File_Format_DocumentaTIon_网络文库,很详细,看完就懂了。
4. 如果有兴趣,可以看看J1939协议(用于商用车)或者CANOpen协议(用于现场控制,很多电机控制器使用)或者ISO 15031-5(用于OBD诊断)。
最后,希望你在了解CAN以后,不要花过多的精力在底层上,基本都是体力劳动。体现价值的还得是上层。请看看一汽技术中心的相关招聘要求:
工作职责
1.设计新能源汽车网络拓扑和制定网络技术需求;
2.制定新能源汽车网络通信需求、网络通信矩阵和网络数据库;
3.设计和开发新能源汽车网络通信协议仿真试验、网络通信规范、网络线束规范;
4.设计新能源汽车网关控制器及具有相同网络通信功能的接口控制器产品定义与技术规范;
5.负责新能源汽车电子电气开发过程中的问题解决,配合生产和售后服务。来源:知乎 作者:Wang Yu