project joee 开发日志(十一)——使用虚拟串口设备进行开发和调试
# 概述
由于先前远程机器没有开机,不能进行调试硬件设备,无法进行灯光功能和警报器功能的开发调试,因此尝试使用本地串口设备模拟来进行协助相应开发调试。
# 报警器控制部分
根据报警器输入输出设备的硬件示意图和相关资料可以得知:
其输入输出模块使用了 Modbus 协议,使用读写寄存器来控制对应功能的信号;
该模块的输入端有三路接入了硬件设备,分别为红灯、绿灯、报警器;
该模块使用 USB 串口设备接入工控机,所以能通过设备管理器找出对应的串口号;
该模块的输出端输出一个信号
# 接入虚拟串口设备
根据以上信息,目前首先使用 Vitual Serial Port Driver 来创建虚拟串口连接
其中 COM2-COM3 COM4-COM5 COM6-COM7 分别为三组虚拟串口组用于模拟设备连接,分别对应两个灯光模组,一个报警器的输入输出模组.
# 虚拟 Modbus 从机设备
使用 Modbus Slave 来创建虚拟 Modbus 从设备,来模拟输入输出模块
# 寄存器定义
经过多次测试得知,该模块的寄存器如下:
保持寄存器 4 个,其地址定义为:
0: 绿灯; 1: 红灯 ...
计算机网络课程作业记录
# 0. 作业要求
课程报告题目自己拟定,选题范围:IPv6、SDN 和 IP 多播。参考选题如下:
(1)在实际互联网环境或在模拟环境下设计并构建网络拓扑结构,访问 IPv6 网络,用 Wireshark 抓包分析,观察 IPv6 网络的访问过程,分析地址解析、无状态地址自动配置、IPv6/IPv4 共存访问等过程中的相关数据包。
(2)在 mininet 平台上构建网络拓扑结构,设计网络场景,抓包并分析控制器与 OF 交换机的交互报文,理解 SDN 技术和 OpenFlow 协议机制。也可以进一步对 RYU 进行 python 编程,结合 REST API 和 OpenFlow 实现一些应用,例如:负载均衡、防火墙功能等。
(3)华为 eNSP、Cisco Packet Tracer 模拟环境下,搭建网络拓扑结构,设计场景,通过抓包,分析 IGMP 和路由协议 PIM-DM/PIM-SIM/MSDP/MBGP 报文,理解 IGMP 和多播路由协议的工作机制。
注意 1:网络拓扑结构中标识节点 IP 地址和 MAC 地址,拓扑图不能与课件中的相同!!!
注意 2:数据包分析时,注意地 ...
project joee 开发日志(十)——串口设备配置
接上回串口识别和保存部分
# 串口配置项
# 可行性验证
先完成串口配置的保存,以便在配置文件中修改串口信息
首先在 Config.cs 中添加相应项
12//硬件串口号public Dictionary<string,string> DEVICE_COM = new Dictionary<string, string>();
1234567public class Settings{ ...; //串口号 public Dictionary<string, string> DEVICE_COM; ...;}
12345678910//读取配置文件 加载各类参数public void load(string file = "./config.toml"){ if (file.Length > 0 && File.Exists(file)) { ...; DEVICE_COM = settings.DEVIC ...
1.SimMatch:基于相似度匹配的半监督学习
# 摘要
在计算机视觉和机器学习研究领域,使用少量标记数据进行学习一直是一个长期存在的问题。本文提出了一种新的半监督学习框架 SimMatch,该框架同时考虑了语义相似度和实例相似度。在 SimMatch 中,一致性正则化将同时应用于语义级和实例级。鼓励同一实例的不同增强视图具有与其他实例相同的类预测和相似关系。接下来,我们实例化一个标记的内存缓冲区,以充分利用实例级的基本事实标签,并弥合语义和实例相似性之间的差距。最后,我们提出了一种可使这两个相似点相互同构变换的展开和聚合运算。通过这种方式,语义伪标签和实例伪标签可以相互传播,从而生成更高质量和更可靠的匹配目标。大量的实验结果表明,SimMatch 提高了跨不同基准数据集和不同设置的半监督学习任务的性能。值得注意的是,在 400 轮次的训练中,SimMatch 在 ImageNet 上 1% 和 10% 的标记示例中获得了 67.2% 和 74.4% 的 Top-1 准确性,显著优于基线方法,优于以前的半监督学习框架。代码和预先训练的模型可在 https://github.com/KyleZheng1997/simmatch 获得。 ...
project joee 开发日志(九)——相机增益和灯光控制插件
在 SerialDevice 插件中添加相机增益和光照自动控制功能
以下为实现方式
首先定义串口设备抽象类,为该类设置基本属性和构造函数
12345678910111213141516171819202122232425262728293031323334353637class SerialDevice{ //串口设备 public SerialPort serialPort; public ModbusSerialMaster master; //串口参数 public string portname; public int baunrate; public int databits = 8; public Parity parity = Parity.None; public StopBits stopbits = StopBits.One; //设备参数 public string DeviceName; public SerialDevice() { serialP ...
project joee 开发日志(八)——换卷截断绘图实现
在开发日志(七)中实现了换卷绘图的前置功能,
接下来实现具体绘图。
首先实现接口
12345678910//定义事件和处理函数public EvtHanlder hanlder{ get { EvtHanlder h = new EvtHanlder(); //添加相应处理事件 h.ReelChangeEvent += ReelChangeHandler; return h; } }
定义换卷处理事件
1234567public void ReelChangeHandler(object sender, CustomEventArgs Args) { //换卷事件处理 Console.WriteLine("Chart: Event ReelChange"); double line = (double)Args.msg; AddLineH(line);}
其中绘制横线函数
12345678910111213priva ...
project joee 开发日志(七)——数据相关问题
需求
具体描述
(待)实现方式(/ 思路)
图表添加切割线条
添加横向线条来指示每次换卷的截断位置
换卷事件中添加相应处理,并且使用图表控件的对应方法画出线条
先前添加了插件中的换卷事件处理。
换卷的处理函数中修改了数据库,而当该函数被外部插件(监听串口的线程)或者用户按钮事件调用时,如果任务不是处于暂停状态,会与数据处理线程的插入行函数(InsertRow) 产生冲突,两个线程会在相近的时间内访问数据库连接对象,相应的打开和关闭数据库过程会产生异常。
因为涉及到委托调用数据库更新操作,在主程序对数据库进行操作时,可能会出现冲突的情况,因此需要加上数据库的访问锁
12//数据库访问互斥readonly static object _locker_db = new object();
在创建数据库之后的所有对数据库操作添加如下互斥访问方式
12345//互斥访问数据库对象lock (_locker_db){ do();}
在主程序进行数据库插入时进行检测是否换卷
以上操作无效。
经过大量 debug 跟踪发现,出现异常的原因为数据库连接 Dbcn ...
Novel AI元素法典
https://docs.qq.com/pdf/DZWdGeWtTdkhVYnVr
project joee 开发日志(六)——自定义事件
之后开发日志不再按照日期命名
某个功能需求要求插件实现在主程序满足特定条件时触发函数调用,因此需要在框架和接口中添加自定义事件处理,通过事件触发的方式来在主程序中插入插件的功能函数。
# 自定义事件处理 定义
添加定义事件类 EvtHanlder
在插件接口类中添加属性 EvtHanlder: handler
1public EvtHanlder hanlder{get;}
添加事件处理机制,添加 CustomEvent 枚举类,用来描述主窗体的自定义事件,并将相应设置相应触发器,使得插件可以执行对应的事件 handler。
123456789101112131415//事件委托public delegate void DefaultEventHanlder(object sender, CustomEventArgs Args);public delegate void ReelChangeHandler(object sender, CustomEventArgs Args);public delegate void ...;//事件枚举类型public enu ...
project joee 开发日志 10.17
需求
具体描述
(待)实现方式(/ 思路)
图表添加指示线条
添加竖向可移动的线条来指出瑕疵落点位置
使用对应的控件方法处理
实现方案:
(插件实现)对图表控件添加事件控制逻辑
使用如下变量来存储状态信息和选中的线条对象
123456789//鼠标状态bool MouseDown = false;//命中状态bool StripSelected = false;bool AxisXSelected = false;bool AxisYSelected = false;//当前被选中的线条StripLine SelectedLine;
在 MouseMove 事件中的逻辑:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586MainWnd.ActiveControl = chart;HitTes ...






