无锡先导项目eol检测设备
无锡先导项目eol检测设备
mes对接
1优化导出excel(加快导出)
2 北京新增界面嵌入
qyjz@DESKTOP-60TVBCT MINGW32 ~
git clone
http://192.168.1.231:10101/r/SafetyStandardFrame.git
- gitlib代码管理系统搭建
导出检测报告excel优化
手动界面继电器界面优化 (xml)
软件闪退问题优化
新增底层代码逻辑编写
s71500 plc对接
保定继电器问题修改 if (!CheckRelayComStatus()) return null;
你保定电池包检测eol项目 eol 安规静态
先导eol项目 2台
春风动力eol项目 电机/ecu电机控制器检测 2台
昂华中华国际项目现场出差调试
泰州蜂巢安规静态eol项目 1台
陕汽epc项目 电机/整车/高低压eol 3台
北京售后中心项目演示代码合并和优化
一汽解放高压线束项目 1 台
上海君屹安规静态项目调试 1台
11.2 一汽项目远程调试
{
- 19053 通道添加
- bt3523 内阻仪 自动量程配置 AUT ON
- 19572 接地电阻线路问题排查 FAL 是四线制 三个线路通 1个不通
}
陕汽车EPC
19073 模式设置不上 上下限量程配置偏大 设置量程数值偏大 代码--- 校验码方法报错误
11.1
拓斯达的软件设计说明书
利元亨软件设计说明书
拓斯达的模组软件设计开发
拓斯达&利元亨 模组采集检测系统
利元亨的软件设计图
https://www.processon.com/?utm_source=baidu&utm_medium=sem&utm_term=120476031232&utm_content=29214447710&uc_pagenum=1&uc_adposition=cl1&renqun_youhua=2184313&bd_vid=8762512271433439462 思维导图工具
底层框架开发
新增模组数量总数编辑
新增模组手动检测技术功能 设置模组序号 实现漏测 重测数据更新
新增汇总报表功能 (一行6个) 自动排序向下排序罗列功能
{
字典数组结构
赋值数据问题 ---- 对同一对象操作问题修改
生成mes数据结构
提前生成汇总报告功能 -- 生成之后复位 计数从1开始计数
控制模组计数是否计数功能
编辑当前序号功能 双击 编辑序号 从第几个序号开始计数
测试完成后提示漏测 是否生成汇总数据报告
加了一个右击查看显示汇总报告功能
}
11.12模组项目
-===========
10K 电阻 为 25度
1k电阻为2.5度
1欧姆电阻 = 0.0025设施度
遇到问题:ntc 采集器 需要输入0-5V 电压 获取报文
020mA、420mA、0±1A、0±5A可选
0~±75mV 、0~±100mV、 0~±150mV可选
0±5VDC、0±10VDC、0~±500VDC可选
日志优化 在自动列表内右击显示日志
IO继电器板 串口通讯软件优化
zlg底层优化 软件闪退问题 添加防错接收
利元亨:
1, 拓斯达
扫码一个通道 扫码一次 启动弹框一次 18个模组 6个单体 {实时显示电压 电流 温度 画界面 待定}
仪器底层逻辑编写 34980A 底层代码
手动模组检测逻辑计数 {应用数据结构 字典套数组 定制 漏测、重测、生成汇总数据报告}
整车控制器 资料
1.VCU CAN通讯协议 整车CAN报文上报
测试功能及测试项 :例如:VCU休眠唤醒报文、手刹信号报文、油门踏板信号采集报文、制动踏板信号采集报文、空调ac开关信号采集报文、等等通讯信号采集相关报文
文档
- UDS诊断协议相关 (例如 :读取软硬件版本号)
3 DTC信号相关文档
电机控制器 资料
1 .CAN通讯协议报文文档 { 测试功能及测试项 例如 : ECU 唤醒休眠指令报文、}
- UDS 诊断协议相关(例如 :读取软硬件版本号)
3 DTC信号相关文档
光束项目 BMS刷写项目
遇到问题:ntc 采集器 需要输入0-5V 电压 获取报文
020mA、420mA、0±1A、0±5A可选
0~±75mV 、0~±100mV、 0~±150mV可选
0±5VDC、0±10VDC、0~±500VDC可选
日志优化 在自动列表内右击显示日志
IO继电器板 串口通讯软件优化
zlg底层优化 软件闪退问题 添加防错接收遇到问题:ntc 采集器 需要输入0-5V 电压 获取报文
020mA、420mA、0±1A、0±5A可选
0~±75mV 、0~±100mV、 0~±150mV可选
0±5VDC、0±10VDC、0~±500VDC可选
日志优化 在自动列表内右击显示日志
IO继电器板 串口通讯软件优化
zlg底层优化 软件闪退问题 添加防错接收
{
CAN/CANFD 区分
对比传统CAN数据帧,CAN FD共享相同的CAN ID,包括扩展数据帧的ID。
CAN FD用RRS bit(始终为显性位‘0’)代替RTR。
FDF(FD format)表示CAN FD还是传统CAN数据帧:
· FDF – ‘0’ --> 传统CAN数据帧
· FDF – ‘1’--> CAN FD数据帧
BRS(Bit Rate Switch)表示时钟频率的切换:
· BRS – ‘1’-->时钟频率切换
ESI(Error State Indicator)表示CAN总线的错误状态。
- DLC控制域(control Field)
DLC用于表示数据帧的数据长度。并且支持传统CAN 数据帧的编码方式
CAN总线由于位填充规则对CRC的干扰,造成错帧漏检率未达到设计意图。CAN FD对CRC算法做了改变,即CRC以含填充位的位流进行计算。在校验和部分为避免再有连续位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分割,这个填充位的值是上一位的反码。作为格式检查,如果填充位不是上一位的反码,就作出错处理。CAN FD的CRC场扩展到了21位。
对比传统CAN的数据帧,CAN FD在控制场新添加EDL位、BRS位、ESI位,采用了新的DLC编码方式、新的CRC算法(CRC场扩展到21位)。
帧类型,标准帧为0;扩展帧为1
///功能描述:根据帧类型生成CANID CANID
///编写描述:youchao_2020.09.22
/// </summary>
/// <param name="id">ID</param>
/// <param name="eff">帧类型,标准帧为0;扩展帧为1</param>
/// <param name="rtr">远程帧</param>
/// <param name="err">错误帧</param>
====
https://blog.csdn.net/qq_41256212/article/details/95080176 相关资料
========================================================================================
其中CAN ID标识这具体ECU的识别号,长度有11位和29位之分,具体看OEM在诊断需求规范中定义。数据库携带数据长度看是Classical CAN还是CAN FD。前者数据域长度是8 bytes。CAN FD数据域长度看OEM需求,范围在8 bytes---64 bytes,当然长度也不是任意选取,可参看如下表格:
8的字节 进行数据解包 发送 组包 FF FC CF
00前四个 00 后四
can canfd
4种帧
单帧 多帧
首帧 - > 请求 连续帧 - > 流控帧
CAN帧最长是8位
高4 bits为0标志是单帧,低4 bits值定义帧长度
00 00 00 00 是单帧 低4个位 00 00 00 00 是帧长度
对于单帧 数据长度大于8个字节(CANFD)第一个字节为0 第二个字节数值标志着此单帧数据长度
一个CAN-FD帧的数据域中可能存在的字节数量为1-8, 12, 16, 20, 24, 32, 48 ,64。数据长度由帧格式中的DLC字段决定。在DLC从0到8时,DL(数据长度)值也是从0到8逐渐加1增长。但是对于DLC大于8的情况,CAN将所有DL都当作8处理,CAN-FD的DL与DLC的对照关系如下表所示。
https://zhuanlan.zhihu.com/p/265267741 //相关资料
}
======================================================================================== {
11.16
RSA 加密解密过程
加密 - > 字符串明文 -> 通过Encoding指定不哦那个的代码页,把字符串转成不同代码页对应的编程,表现未byte[] - > byte[] 字节流明文->加密操作- >密文byte[]
解密 字符串明文->使用加密时Encoding使用的代码页,把byte[] 形式的明文转换成适当字符串明文->byte[]字节流明文->pfx证书 -加密操作 -密文byte[]
/// RSA加密
/// </summary>
/// <param name="publickey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSAEncrypt(string publickey, string content)
{
publickey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(publickey);
cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
return Convert.ToBase64String(cipherbytes);
}
/// <summary>
/// RSA解密
/// </summary>
/// <param name="privatekey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSADecrypt(string privatekey, string content)
{
privatekey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent><P>/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==</P><Q>6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==</Q><DP>ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==</DP><DQ>MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==</DQ><InverseQ>EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==</InverseQ><D>vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=</D></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(privatekey);
cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
return Encoding.UTF8.GetString(cipherbytes);
}