自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 使用PyQt5实现添加工具栏、增加SwitchButton控件

通过在网上找到的“电池电压监控界面”,学习PyQt5中添加工具栏、增加SwitchButton控件,在滑块控件右侧增加文本显示、设置界面背景颜色、修改文本控件字体颜色等。

2024-07-13 21:25:24 792

原创 PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能,从网上下载该功能的上位机界面,学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。

2024-07-06 16:16:21 502

原创 asyncua监控节点数据变化的原理是什么?发现节点write_value()但是节点前后数值一样情况下,还是会产生data_change事件,这是为什么

这个订阅用于接收服务器上的节点数据变化通知。这样,当服务器上的节点数据发生变化时,OPC UA服务器就会发送一个数据变化通知给客户端,客户端的订阅就会调用注册的数据变化处理函数来处理这个通知。时间戳或质量戳的变化:即使节点的值没有改变,但与其关联的时间戳或质量戳可能发生了变化。实现额外的逻辑来过滤不必要的通知:在客户端实现额外的逻辑来检查接收到的数据变化通知是否真正表示了值的改变,并忽略不必要的通知。网络或传输层问题:有时,网络或传输层的问题可能导致数据包被重传或错误地解释为新的数据变化。

2024-07-04 09:45:55 277

原创 pycharm的usages在哪设置?

在代码编辑器(如PyCharm或IntelliJ IDEA)中,"1 usage"通常表示当前光标所在的代码元素(如变量、函数、类等)在其他地方被使用了一次¹³。这个功能可以帮助开发者了解自己的代码在运行时的使用情况,从而优化代码的性能,减少资源的浪费,提高代码的可维护性和可读性。

2024-07-03 10:19:06 281

原创 opcua报错:asyncua.ua.uaerrors._auto.BadNoMatch: The requested operation has no match to return.

Client端的call_method方法的输入参数methodid有三种样式:ua.NodeId(‘func_name’, 2)或者’2:func_name’表示节点、ua.QualifiedName(‘func_name’, 2)、str(‘func_name’)如

2024-06-28 17:39:11 308

原创 asyncua.client.ua_client.UaClient:opening connection OPCUA为什么Client端连接Server端报错超时

测试发现是由于Server端在执行创建节点任务,创建节点任务花费的时间比较长,此时Client端尝试连接Server,Server会不响应Client的连接通讯请求,在Server开始执行Read request操作时,Client端连接能执行成功。网络延迟是连接速度慢的一个常见原因。如果Client和Server之间的网络质量不佳,或者有较高的延迟,那么连接过程可能会受到影响。调整Client配置:根据网络环境和实际需求,调整asyncua Client的配置参数,如连接超时、重试策略等。

2024-06-21 16:30:05 361

原创 使用asyncua模块的subscribe_data_change监控opcua的Server节点数据变化

上述报错原因在于创建监控句柄SubscriptionHandler类时,节点数据变化的函数名称有问题,不是默认的datachange_notification,我写的是data_change_notification。

2024-06-21 12:43:48 333

原创 asyncua模块中OPC UA的ua.Variant如何表示字典?

然而,OPC UA 标准本身并不直接支持字典作为一种数据类型。但是,你可以通过将字典序列化为一个字符串(如 JSON 格式),然后使用 ua.Variant 来表示这个字符串,从而间接地在 OPC UA 中表示字典。这种方法允许你在 OPC UA 中存储和传输字典数据,但需要注意的是,这种方法依赖于 JSON 序列化和反序列化,因此可能不适合处理非常大的字典或需要高性能的场景。此外,这种方法还假设客户端和服务器都支持 JSON 格式的字符串,并且都使用了相同的编码和解码逻辑。

2024-06-19 21:13:13 251

原创 使用asyncua模块的call_method方法调用OPC UA的Server端方法报错:asyncio.exceptions.TimeoutError

这篇文章中说明了报错:asyncio.exceptions.TimeoutError的原因,是由于call_method调用的方法执行时间太长了,但是Client端同步执行的检查服务是否处于在线状态的背景任务执行超时了,最终导致抛出报错:asyncio.exceptions.TimeoutError,拿不到Server执行调用方法后的结果。

2024-06-19 20:44:34 940

原创 如何使用asyncua模块在opcua的Server端添加值为列表的变量?

同理,考虑将OPCUA不支持的数据类型转成支持的数据类型,Server添加方法,输入数据类型为列表时,可以使用ua.VariantType.Variant数据类型,在Client加载该方法时,使用ua.Variant([1, 2, 16, 19, 216])将列表转换成ua.VariantType.Variant数据类型,实测发现该种方式得到的输入参数数据类型为list,不影响方法的执行。在添加变量时,你提供的初始值(在本例中是空数组[])将作为变量的初始状态。你可以根据需要将其替换为实际的数组值。

2024-06-14 17:37:06 405

原创 使用asyncua模块如何在opcua框架的Server端添加方法及在Client端调用方法

使用call_method()函数调用节点的方法input_Arg,input_Arg有两个输入参数,都是ua.VariantType.UInt32数据类型。

2024-06-14 17:00:04 349

原创 解决PyQt5中柱状图上显示的数值为带e的科学计数法

经过分析QBarSet方法得到解决方法:需要删除掉barSeries.setLabelsPrecision(2)这行代码。barSeries.setLabelsPrecision(2)这行代码的意思是设置柱状图的标签精度为2位小数。

2024-06-09 21:37:33 345

原创 PyQt5中建立柱状图并刷新柱状图数据

使用Qt Designer工具搭建界面时,在适当位置预留一个verticalLayout垂直布局控件,用于放置代码生成的上下两个柱状图。

2024-06-09 17:13:24 224

原创 git commit rule

style: 不影响代码含义的更改(空白、格式设置、缺失 分号等)refactor: 既不修复bug也不添加特性的代码更改。chore: 对构建过程或辅助工具和库(如文档)的更改。test: 添加缺少的测试或更正现有测试。perf: 改进性能的代码更改。docs: 仅文档更改。fix: bug修复。

2024-06-07 19:43:17 208

原创 Qt Designer工具如何修改MainWindow窗口的标题

在MainWindow的属性编辑器中选择“windowTitle”后面一栏修改成期望的窗口标题名称即可。按住“ctrl+R”即可查看可视化界面的窗口标题。

2024-06-01 19:56:24 583

原创 pycharm配置python开发环境—miniconda+black+gitlab

miniconda最新版本的python版本是python3.12.2,下载这个miniconda最新版本后,会导致执行conda create -n py31013 python=3.10.13指令配置python3.10.13版本报错,怎么都下载不了python3.10.13版本。下载python3.10对应的miniconda版本之后,可以成功配置python3.10.13开发环境。创建python3.10.13开发环境conda create -n py31013 python=3.10.13。

2024-05-25 11:32:00 622

原创 使用PyQt5设计订单查询界面—了解界面布局2

在PyQt5中,QTableWidget类提供了removeRow()方法,该方法用于从表格中删除指定的行。但是,实际上并没有直接的removeRow()方法可以使用,可能你是想使用removeRow()方法来描述你的意图,但是这是不正确的。在PyQt5中,删除QTableWidget中的行,你需要使用removeRow()方法,这是QTableWidgetItem的方法,而不是QTableWidget的方法。注意:在使用这些方法时,你需要确保你的row参数是有效的,也就是说它不应该超出表格的行数范围。

2024-05-14 14:43:29 1021

原创 在PyQt5中实现点击按钮打开新窗口功能—窗口的跳转功能实现

百度搜索“pyqt5中如何点击按钮打开新的窗口”,自动生成以下参考代码。在PyQt5中,要实现点击按钮打开新窗口,你需要定义一个新的窗口类,并在按钮的点击信号(clicked)处理函数中创建并显示这个新窗口。以下是一个简单的例子在这个例子中,MainWindow是主窗口类,它有一个按钮用于打开新窗口。当按钮被点击时,open_new_window方法会被调用,创建并显示NewWindow实例,即新窗口。基于上述思路,使用一个主窗口类mainWindow管理多个窗口的跳转(窗口的显示和消失)

2024-05-14 13:49:55 771

原创 使用PyQt5设计系统登录界面—了解界面布局

我喜欢先选择layout再拉需要的控件到layout上面,选择的主窗口是MainWindow,以下是布局和控件的空间位置展示

2024-05-06 17:18:27 1567 1

原创 学习如何使用PyQt5实现notebook功能

使用setWindowTitle()函数修改窗体MainWindow名称,使用setText()函数修改Label名称,使用setTabText()函数修改分页栏Tab名称。发现生成代码中有retranslateUi()函数,是使用QT Designer工具创建界面修改控件及窗口名称时自动生成的函数,函数里面详细记录了有哪些对象名称发生变化。使用addWidget()函数将Label控件布局到垂直布局控件上面,使用addTab()函数将分页的标签页添加到TabWidget控件上面。

2024-05-05 22:18:43 996

原创 PyQt5中重要的概念:信号与槽

不适用内置信号与槽,而使用自定义信号与槽。自定义信号与槽是指在发射信号时,不使用窗口控件的函数,而是使用自定义的函数(简单地说,就是使用pyqtSignal类实例发射信号)。

2024-05-05 13:26:20 1259

原创 在pyqt5中如何实现grid(创建二维表格)功能

使用pyqt5实现生成表格单元数据。

2024-05-04 15:03:35 564

原创 【软件测试】MIL/HIL/PIL/SIL测试

接下来,就可以进行模型评审了,也就是说,评审的模型有两个前提,一是可以编译的,二是符合公司建模规则的。接下来,我们可以使用Simulink Design Verifier进行模型的结构分析,借助于Simulink Design Verifier自动生成测试用例的功能,去检查结构上是否存在问题,比如是否有不合理的逻辑设计,是否有运行不到的分支等。代码生成最大的好处是,算法的早期验证,之前NASA有研究表明,开发初期引入的bug,如果到了晚期才发现出来,那么修复这一的bug,会产生非常大的费用。

2024-04-17 14:15:58 1373

原创 【软件测试】单元测试+集成测试+系统测试

在软件开发过程中,各个单元经过单元测试后会被组合在一起,通过集成测试来检查它们之间的接口和交互是否正确,确保整个系统的功能和性能符合预期。系统测试通常由独立的测试团队执行,旨在从用户的角度对整个系统进行全面的测试,以确保系统能够符合用户需求并达到预期的质量标准。系统测试通常是在单元测试和集成测试之后进行的,旨在确保整个软件系统在不同功能、模块和组件之间的集成后能够正常工作。通过集成测试,开发团队可以及早发现各个组件之间的交互问题和集成错误,确保整个系统能够协同工作,有助于提高系统的稳定性和质量。

2024-04-17 10:22:50 1599 2

原创 嵌入式基础知识学习:DA/AD—数模/模数转换

通常,ADC使用一种称为逐次逼近法(successive approximation)的转换技术,通过逐步比较模拟输入信号和一个内部参考电压来逼近原始模拟信号的值,并将其转换为对应的数字值。数字电路只能处理二进制数字信号,而声音、温度、速度和光线等都是模拟量,利用相应的传感器(如声音用话筒)可以将它们转换成模拟信号,然后由A/D转换器将它们转换成二进制数字信号,再让数字电路对它们进行各种处理,最后由D/A转换电路将数字信号还原成模拟信号。转换精度:2的多少次方,转换精度越大,转换得到的数字量精度越好。

2024-04-13 17:27:48 745

原创 【C/C++】基本数据类型—数组、指针和引用

数组是一种完全静态的数据结构,在初始化的时候我们就需要给数组指定大小,并且不能修改。指定数组的大小,也称为数组的维度。数组的维度必须像switch的case后面的表达式那样,是一个在编译的时候就能确定的整型常量表达式。不能使用变量作为数组大小。数值的创建示例如下:定义空数组,但没有给出数组的元素初始值,因此数组的初始值将会是编译器默认的初始值或者无法预计的随机数值。数组的初始化列表示例如下:如果初始化列表中元素个数超出了数组大小,那么编译器会报错。

2024-02-05 16:12:29 826

原创 【C++】面向对象编程—类

面向对象的核心是类,它是C++在C语言原有结构的基础上扩展出来的概念,不仅增加了附属于类的成员函数,也增加了继承和虚函数等面向对象编程所需要的重要功能。从类创建出来的具体变量则叫作对象。对象可以看作是类的实例,每个对象占有着独立的内存空间,而类只是一个描述对象的抽象概念。

2024-02-04 16:40:13 911

原创 【C++】标准模板库STL—泛型编程

容器是一种数据结构,存储具有相同类型的对象。不同类型的容器在其内部以不同的方式组织对象。STL中的容器分为顺序容器和关联容器两种。顺序容器通过元素的位置顺序存储访问,而这个顺序一般是由元素进入容器的顺序决定的。关联容器则通过键来查找键对应的元素。STL包括的容器有:deque、list、map、multimap、set、multiset、stack、queue、priority_queue和vector。

2024-02-03 17:08:49 1040

原创 嵌入式基础知识学习:I2C通信协议

I2C(Inter-Integrated Circuit)总线是两线式串行通信总线,是微电子通信控制领域广泛采用的一种总线标准。在介绍I2C总线工作原理之前,首先必须明确几个基本概念:发送器(Transmitter):发送数据到总线的器件;接收器(Receiver):从总线接收数据的器件;主机(Master):初始化发送、产生时钟信号和终止信号发送的器件;从机(Slave):被主机寻址的器件。I2C总线可以将单片机与其他具有I2C总线通信接口的外围设备连接起来。

2023-11-24 16:17:20 274

原创 嵌入式基础知识学习:Flash、EEPROM、RAM、ROM

FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM) 的性能,还不会断电丢失数据同时可以快速读取数据 (NVRAM 的优势),U 盘和MP3 里用的就 是这种存储器。在过去的20 年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备, 然而近年来 Flash 全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader 以 及操作系统或者程序代码或者直接当硬盘使用(U 盘)。

2023-11-22 15:47:49 363

原创 【学习篇】Linux中grep、sed、awk

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

2023-11-22 10:32:12 288

原创 【shell】shell指令学习

awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。

2023-11-22 10:27:12 128

原创 脉宽调制(PWM)开关驱动

对于某些依赖于输入的有效驱动电压来控制执行效果的执行器,广泛地使用PWM开关驱动。PWM(Pulse Width Modulation)是脉宽调制的英文缩写。它使用一个固定幅值且频率保持一定的脉冲输出,通过调节脉宽的方式调节高电位时段在整个时间区段中的比例(称为占空比),使输出电压的有效值得到改变。这种驱动控制在硬件实现上非常简单,最适于数字电路的输出驱动。实际应用这种驱动方式时,必须注意选取的工作频率应与被驱动元件的惯性大小相适应。基本的原则是:惯性较小的元件,应选取较高的工作频率。

2023-10-24 10:21:39 369

原创 python实现客户成套订单配送策略混合遗传算法编码

以如下的论文文献为学习对象:2008年发表在《控制工程》的文献《客户成套订单配送策略混合遗传算法研究》

2023-10-22 12:14:55 968

原创 如何写代码实现VRP问题中车辆容量限制及时间窗要求(python)

卸货点1-10的时间限制理解如下:卸货点1要求在下午1点至下午4点配送,卸货点1要求的服务时间是半个小时;卸货点2要求在下午4点至下午6点配送,卸货点2要求的服务时间是1个小时,以此类推其他的卸货点的配送及服务时间限制。当首次配送的需求点为卸货点10时,最早到达时间要求是下午5点,配送中心开门是上午七点,关门是下午七点,两点之间的路径长度是160公里,车辆每小时的车速是40公里/小时,所以最佳的方案是不考虑先去卸货点10完成配送任务,因为车辆返回时赶不上配送中心的关门时间。从配送中心出发立即回到配送中心。

2023-10-20 17:07:17 469 1

原创 【纠错】遗传算法求解VRP计算车辆容量限制的代码有bug

满足第二种场景,vehicle_capacity_max = 1 # 车辆的最大载重量,车辆的运输能力极小时,函数vehicle_capacity_restraint()也能正确的工作,得到极大值,也就是派10辆车完成运输任务,如下结果total_path_list [[0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0], [0, 6, 0], [0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 1, 0]]

2023-10-19 16:39:12 226

原创 模拟退火算法求解TSP问题(python)

模拟退火算法求解TSP的步骤参考书籍《Matlab智能算法30个案例分析》。

2023-10-18 10:19:39 485

原创 【学习篇】CCP协议

CCP的全称是CAN Calibration Protocol(CAN标定协议),是ASAP标准的有机组成部分,属于ASAP1a规范标准,是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0B通信规范,支持11位标准与29位扩展标识符。

2023-10-09 21:13:25 528

原创 【Excel】记录Match和Index函数的用法

上面Index函数的用法链接已经详细介绍了一般Index函数是需要配合Match函数使用才能做到动态查找表格索引数据作用的,我一般也是先使用Match函数跨sheet页签找到Value所在的行号,再使用Index函数跨sheet查找目标区域所在行的值。

2023-08-01 13:34:30 802

原创 simulink与遗传算法结合求解TSP问题

前言:刚开始入门学习simulink,了解了基本的模块功能后想尝试从自己熟悉的领域入手,自己出题使用simulink搭建模型。选择的是VRP问题的遗传算法,考虑如何用simulink建模思想来实现一个简单VRP问题的遗传算法。

2023-07-28 15:37:08 816

论文《不确定机会约束规划模型的研究及应用》

论文《不确定机会约束规划模型的研究及应用》

2024-05-25

配送中心选择及路径选择采用遗传算法求解的Matlab程序

配送中心选择及路径选择采用遗传算法求解的Matlab程序

2024-05-25

PPT文件:多方法系统仿真软件AnyLogic

PPT文件:多方法系统仿真软件AnyLogic

2024-05-25

python实现车辆路径轨迹移动的上位机程序

详细描述见博客:https://blog.csdn.net/Logintern09/article/details/122256617

2024-05-25

开源框架openTCS用户指导手册

开源框架openTCS用户指导手册

2023-11-28

开源框架openTCS开发者指导手册

开源框架openTCS开发者指导手册

2023-11-28

有关集装箱空箱调运的文献综述整理版

有关集装箱空箱调运的文献综述(查阅的文献资料比较老)

2023-07-13

有关复杂网络的文献综述整理版

有关复杂网络的文献综述整理版(文献都比较老)

2023-07-13

PETRI网建模理论基础PPT学习资料

PETRI网建模理论基础PPT学习资料

2023-07-13

AnyLogic软件学习PPT资料

AnyLogic软件学习PPT资料

2023-07-13

Flexsim初中高级学习PPT资料

Flexsim初中高级学习PPT资料

2023-07-13

python实现九宫格的车辆路径轨迹上位机程序

实验环境:wxFormBuilder v3.5 + python3.7.5 + MC9S12G128开发板 基本功能:控制开发板上的按键,模拟车辆移动的上下左右四个方位,通过can通信告诉上位机界面,车辆轨迹的移动方位。

2023-05-19

基于合作博弈的收益分配策略-合作博弈理论的几种收益分配方法

以前研究合作博弈问题,收集整理的一些资料,供有需要的同学免费下载,希望有用。

2023-05-17

The coopetition game in international liner shipping

本人以前研究航线规划方面的合作博弈问题,现在不做这方面的研究了,以前收集整理的一些资料分享一下,供有相同研究背景的同学参考下。

2023-05-14

文献研读:Stable Cooperation in Dynamic Vehicle Routing Problems

做论文研究时候研读的一篇外文文献《Stable Cooperation in Dynamic Vehicle Routing Problems》,上传文档是自己对这篇文献的一些理解,希望帮助到有相同研究方向的同学。

2023-02-07

文献研读:在集装箱班轮航运网络中逆转港口循环方向

做论文研究时候研读的一篇外文文献《Reversing port rotation directions in a container liner shipping network》,上传文档是自己对这篇文献的一些理解,希望帮助到有相同研究方向的同学。

2023-02-06

航线网络设计问题+合作博弈收益分配问题

本人以前研究航线规划方面的合作博弈问题,现在不做这方面的研究了,以前收集整理的一些资料分享一下,供有相同研究背景的同学参考下。

2023-02-05

python调用32位的ControlCan.dll实现can报文的收发

can_interface.py是已二次封装好的报文收发函数,可直接调用实现不同的上位机开发需求。 请前往本博主的个人主页搜索本资源的说明文档:《python调用32位的ControlCan.dll实现can报文的收发》 有出错不当之处欢迎本资源下方评论!!!

2022-11-05

用于求解单配送中心带硬时间窗约束VRP的多智能体进化算法

多智能体进化算法的详细编程思路请移步至本博主的专栏《智能优化算法》中的文章《多智能体进化算法求解带硬时间窗约束的VRP问题(附完整python程序代码+思路详解)》

2022-10-21

32位ControlCan.dll 供实现周立功can设备报文收发调用

将ControlCan.dll和kerneldlls文件夹放置在.py文件的同级目录下,通过python的ctypes模块调用ControlCan.dll接口函数实现can报文的收发操作。

2022-09-29

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除