下位机

与下位机或设备的通信解析优化的一点功能(续补):动态编译

若如初见. 提交于 2020-02-22 14:47:11
原文: 与下位机或设备的通信解析优化的一点功能(续补):动态编译 继上一篇 《与下位机或设备的通信解析优化的一点功能:T4+动态编译》 ,现在已经生成出解析用的类的C#源码了,接下来,就轮到动态编译生成Type了。 在实现上,。net framework和。net core上,有些不同: .Net Framework的: 1 var transfer = ""; //解析后的C#源码字符串 2 3 ICodeCompiler comp = new CSharpCodeProvider().CreateCompiler(); 4 5 //编译器的传入参数 6 CompilerParameters cp = new CompilerParameters(); 7 8 //引入对应的dll 9 cp.ReferencedAssemblies.Add("system.dll"); //添加程序集 system.dll 的引用 10 cp.ReferencedAssemblies.Add("system.data.dll"); //添加程序集 system.data.dll 的引用 11 cp.ReferencedAssemblies.Add("system.xml.dll"); //添加程序集 system.xml.dll 的引用 12 cp.ReferencedAssemblies

记录一次给下位机串口发包不回的bug

本秂侑毒 提交于 2020-01-15 02:11:36
前言 采购了第三方的传感器。开始只知道是2400bps/8位数据位/1位停止位。 用PC端的串口助手发包,传感器不回包。 实验 先问第三方的研发部,说是偶校验,用串口助手发包有回包。但是用我们自己的上位机(C#)和下位机(STM32)均没有回包。 因为我们上位机采用的是无校验的方式,这个选项没法设置,只能采用无校验。 先请第三方将他们的协议改成无校验。 再用串口助手试一下。手头有2个版本的串口助手。 ComMonitor(串口助手4.5), 用这个工具按照2400/N/8/1发包,是有正确回包的。 用星翼的XCOM V2.0发包,收到的包不对,前面有很多3F,然后才是约定的包,而且包的CRC16-modbus校验过不了。 用我们自己的上位机发包,收到的包头尾是对的,中间有2~4个字节不对,导致CRC16-modbus校验无法通过。 调试 先自查上位机 我们C#上位机程序是以前写好的,手头没有可参考的代码。 无源码动态调试主程序,在system.io中的最底层串口打开处下断点,程序跑起来,断住后,看到串口通讯参数,确实是2400/N/8/1. 发包也没错。但是收包的内容确实不对。 去下载了串口监视工具,看用ComMonitor发包和用我们自己软件发包,在打开串口的参数上有啥不同。 发现确实有不同。 又去比较XCOM V2.0的发包和ComMonitor,我们自己上位机的区别