project joee 开发日志(十三)——DebugConsole实现插件参数的加载和修改
由于修改了参数配置的实现,Debug Console中加载配置参数会出现问题,因此需要修改相应的逻辑实现。
实现思路
在onload()事件中(执行onload的时候所有插件都已经完成初始化init(),所以会在对应的Attributes中包含需要保存的参数),读取主程序和各个插件的 Attributes,然后找出bool类型的变量,将其加入到开关字典switches<string,object>中,并且根据读取到的变量列表 l_MainWnd、l_cfg、l_plugin 来生成checkbox控件,最后定义其点击事件,在事件中将对应键值与checkbox的 Checked属性进行绑定,最终实现点击选择框修改对应的变量。
该思路的核心部分在于读入插件参数并创建控件的过程,其实现如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243//根据反射获取属性字典 动态添加开关控件private void CreateContorls(Form f) { // ...
project joee 开发日志(十二)——灯光控制器的添加以及插件参数自动保存
1. 存在的问题
当前只能对一个灯光控制模块进行控制,但是由于产线中的灯光有两组,需要对两个灯光控制模块同时控制,因此需要对插件 PluginAlarm 的 Plugin.cs 进行修改。以及目前插件中的参数并不能实现自动保存,只有手动在 config.cs 代码中添加相应项才能实现对应参数的保存和读取。
2. 思路
2.1 灯光部分:
在插件代码中添加灯光控制器的对象,并且在增益算法中添加对新增灯光调整。
2.2参数保存部分:
每个插件都存在Attributes用于存储当前插件下的控制参数,同时在config.cs 中定义Settings类用来辅助存储插件的控制参数和主程序的控制参数。然后由config模块实现运行时Settings装载,Settings实例在保存过程中会被序列化为json字符串,然后保存到本地配置文件中,而在读取时会反序列化本地配置文件生成运行时Settings实例,当配置文件不存在时,会根据生成默认值的配置文件,当本地配置文件中没有对应的配置项时,会使用预先输入的字段作为默认值。
3. 实现
3.1 灯光
在对应控件的Plugins.cs中
12345678910 ...
project joee 开发日志(十一)——使用虚拟串口设备进行开发和调试
概述
由于先前远程机器没有开机,不能进行调试硬件设备,无法进行灯光功能和警报器功能的开发调试,因此尝试使用本地串口设备模拟来进行协助相应开发调试。
报警器控制部分
根据报警器输入输出设备的硬件示意图和相关资料可以得知:
其输入输出模块使用了Modbus协议,使用读写寄存器来控制对应功能的信号;
该模块的输入端有三路接入了硬件设备,分别为红灯、绿灯、报警器;
该模块使用USB串口设备接入工控机,所以能通过设备管理器找出对应的串口号;
该模块的输出端输出一个信号
接入虚拟串口设备
根据以上信息,目前首先使用 Vitual Serial Port Driver来创建虚拟串口连接
其中COM2-COM3 COM4-COM5 COM6-COM7 分别为三组虚拟串口组用于模拟设备连接,分别对应两个灯光模组,一个报警器的输入输出模组.
虚拟Modbus从机设备
使用Modbus Slave 来创建虚拟Modbus从设备,来模拟输入输出模块
寄存器定义
经过多次测试得知,该模块的寄存器如下:
保持寄存器4个,其地址定义为:
0:绿灯; 1:红灯; 2:报警器;
对应的值为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:数据包分析时,注意地址的作用,例如IPv6地址(尤其是特殊地址)、MAC地址、多播地址等!
选题
根据难度 ...
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.DEVICE_COM; ...
1.SimMatch:基于相似度匹配的半监督学习
摘要
在计算机视觉和机器学习研究领域,使用少量标记数据进行学习一直是一个长期存在的问题。本文提出了一种新的半监督学习框架SimMatch,该框架同时考虑了语义相似度和实例相似度。在SimMatch中,一致性正则化将同时应用于语义级和实例级。鼓励同一实例的不同增强视图具有与其他实例相同的类预测和相似关系。接下来,我们实例化一个标记的内存缓冲区,以充分利用实例级的基本事实标签,并弥合语义和实例相似性之间的差距。最后,我们提出了一种可使这两个相似点相互同构变换的展开和聚合运算。通过这种方式,语义伪标签和实例伪标签可以相互传播,从而生成更高质量和更可靠的匹配目标。大量的实验结果表明,SimMatch提高了跨不同基准数据集和不同设置的半监督学习任务的性能。值得注意的是,在400轮次的训练中,SimMatch在ImageNet上1%和10%的标记示例中获得了67.2%和74.4%的Top-1准确性,显著优于基线方法,优于以前的半监督学习框架。代码和预先训练的模型可在https://github.com/KyleZheng1997/simmatch获得。
1.导语
得益于过去几十年大规模标注数据集的 ...
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() { serialPor ...
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





