- 博客(111)
- 收藏
- 关注
原创 如何安装cantest驱动
先在周立功官网上搜索“CANTEST”,在“下载资料”选择如下的应用软件进行安装,安装成功后能打开cantest软件界面,但是插入can盒后无法读取can报文,因为还没有安装正确的can盒驱动程序。周立功官网搜索“can驱动”,在“CAN驱动合集”找到CAN盒对应的设备类型,例如我买的CAN盒是USBCANII,相应的我选择windows的CAN驱动下载。下载驱动后直接点击默认安装,安装完成后,在电脑的“设备管理器”出现“ZLG USBCAN”字样表示驱动安装成功,可以设别电脑上插入的CAN盒设备。
2024-08-21 10:45:07 215
原创 PyQt5中如何只使用一个dateEdit控件实现自动选择日期区间功能
wxPython设计界面转PyQt5设计界面,相同的界面功能,通过移植wxPython源代码实现PyQt5相同界面功能,在实现上述链接提到的自动选择日期区间功能时,发现相同逻辑代码实现的事件触发在wxPython中可行,在PyQt5中不可行,wxPython中日期控件是通过鼠标双击事件触发的,而在PyQt5中日期控件是通过日期值改变作为事件触发的。。
2024-08-20 20:04:33 373
原创 学习使用pymodbus模块实现Modbus通讯
Modbus是一种工业领域广泛使用的通信协议,而PyModbus是一个在Python中实现Modbus通信的库。它支持多种Modbus模式,包括RTU(通过串行线路),ASCII和TCP/IP。
2024-08-20 19:37:58 224
原创 asyncua模块实现OPC UA通讯
asyncua是OPCUA的python实现,使用起来非常方便。UaExpert是OPC UA Client的GUI工具,当编写好server代码后并运行,我们可以使用UaExpert去和server进行通信。
2024-08-20 17:08:48 952
原创 asyncio模块学习
Python中的异步编程的核心语法就是async/await两个关键字,主要涉及的概念就是协程(coroutine)。关于协程的解释,简单来说,协程就是在一个线程(thread)里通过事件循环(event loop)模拟出多个线程并发的效果。
2024-08-19 12:39:55 182
原创 使用PyQt5实现添加工具栏、增加SwitchButton控件
通过在网上找到的“电池电压监控界面”,学习PyQt5中添加工具栏、增加SwitchButton控件,在滑块控件右侧增加文本显示、设置界面背景颜色、修改文本控件字体颜色等。
2024-07-13 21:25:24 920 3
原创 PyQt5中如何实现指示灯点亮和指示灯熄灭功能
一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能,从网上下载该功能的上位机界面,学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。
2024-07-06 16:16:21 714
原创 asyncua监控节点数据变化的原理是什么?发现节点write_value()但是节点前后数值一样情况下,还是会产生data_change事件,这是为什么
这个订阅用于接收服务器上的节点数据变化通知。这样,当服务器上的节点数据发生变化时,OPC UA服务器就会发送一个数据变化通知给客户端,客户端的订阅就会调用注册的数据变化处理函数来处理这个通知。时间戳或质量戳的变化:即使节点的值没有改变,但与其关联的时间戳或质量戳可能发生了变化。实现额外的逻辑来过滤不必要的通知:在客户端实现额外的逻辑来检查接收到的数据变化通知是否真正表示了值的改变,并忽略不必要的通知。网络或传输层问题:有时,网络或传输层的问题可能导致数据包被重传或错误地解释为新的数据变化。
2024-07-04 09:45:55 331
原创 pycharm的usages在哪设置?
在代码编辑器(如PyCharm或IntelliJ IDEA)中,"1 usage"通常表示当前光标所在的代码元素(如变量、函数、类等)在其他地方被使用了一次¹³。这个功能可以帮助开发者了解自己的代码在运行时的使用情况,从而优化代码的性能,减少资源的浪费,提高代码的可维护性和可读性。
2024-07-03 10:19:06 450
原创 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 369
原创 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 405
原创 使用asyncua模块的subscribe_data_change监控opcua的Server节点数据变化
上述报错原因在于创建监控句柄SubscriptionHandler类时,节点数据变化的函数名称有问题,不是默认的datachange_notification,我写的是data_change_notification。
2024-06-21 12:43:48 362
原创 asyncua模块中OPC UA的ua.Variant如何表示字典?
然而,OPC UA 标准本身并不直接支持字典作为一种数据类型。但是,你可以通过将字典序列化为一个字符串(如 JSON 格式),然后使用 ua.Variant 来表示这个字符串,从而间接地在 OPC UA 中表示字典。这种方法允许你在 OPC UA 中存储和传输字典数据,但需要注意的是,这种方法依赖于 JSON 序列化和反序列化,因此可能不适合处理非常大的字典或需要高性能的场景。此外,这种方法还假设客户端和服务器都支持 JSON 格式的字符串,并且都使用了相同的编码和解码逻辑。
2024-06-19 21:13:13 291
原创 使用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 996
原创 如何使用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 458
原创 使用asyncua模块如何在opcua框架的Server端添加方法及在Client端调用方法
使用call_method()函数调用节点的方法input_Arg,input_Arg有两个输入参数,都是ua.VariantType.UInt32数据类型。
2024-06-14 17:00:04 386
原创 解决PyQt5中柱状图上显示的数值为带e的科学计数法
经过分析QBarSet方法得到解决方法:需要删除掉barSeries.setLabelsPrecision(2)这行代码。barSeries.setLabelsPrecision(2)这行代码的意思是设置柱状图的标签精度为2位小数。
2024-06-09 21:37:33 364
原创 PyQt5中建立柱状图并刷新柱状图数据
使用Qt Designer工具搭建界面时,在适当位置预留一个verticalLayout垂直布局控件,用于放置代码生成的上下两个柱状图。
2024-06-09 17:13:24 306
原创 git commit rule
style: 不影响代码含义的更改(空白、格式设置、缺失 分号等)refactor: 既不修复bug也不添加特性的代码更改。chore: 对构建过程或辅助工具和库(如文档)的更改。test: 添加缺少的测试或更正现有测试。perf: 改进性能的代码更改。docs: 仅文档更改。fix: bug修复。
2024-06-07 19:43:17 220
原创 Qt Designer工具如何修改MainWindow窗口的标题
在MainWindow的属性编辑器中选择“windowTitle”后面一栏修改成期望的窗口标题名称即可。按住“ctrl+R”即可查看可视化界面的窗口标题。
2024-06-01 19:56:24 831
原创 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 660
原创 使用PyQt5设计订单查询界面—了解界面布局2
在PyQt5中,QTableWidget类提供了removeRow()方法,该方法用于从表格中删除指定的行。但是,实际上并没有直接的removeRow()方法可以使用,可能你是想使用removeRow()方法来描述你的意图,但是这是不正确的。在PyQt5中,删除QTableWidget中的行,你需要使用removeRow()方法,这是QTableWidgetItem的方法,而不是QTableWidget的方法。注意:在使用这些方法时,你需要确保你的row参数是有效的,也就是说它不应该超出表格的行数范围。
2024-05-14 14:43:29 1107
原创 在PyQt5中实现点击按钮打开新窗口功能—窗口的跳转功能实现
百度搜索“pyqt5中如何点击按钮打开新的窗口”,自动生成以下参考代码。在PyQt5中,要实现点击按钮打开新窗口,你需要定义一个新的窗口类,并在按钮的点击信号(clicked)处理函数中创建并显示这个新窗口。以下是一个简单的例子在这个例子中,MainWindow是主窗口类,它有一个按钮用于打开新窗口。当按钮被点击时,open_new_window方法会被调用,创建并显示NewWindow实例,即新窗口。基于上述思路,使用一个主窗口类mainWindow管理多个窗口的跳转(窗口的显示和消失)
2024-05-14 13:49:55 1123
原创 使用PyQt5设计系统登录界面—了解界面布局
我喜欢先选择layout再拉需要的控件到layout上面,选择的主窗口是MainWindow,以下是布局和控件的空间位置展示
2024-05-06 17:18:27 2615 1
原创 学习如何使用PyQt5实现notebook功能
使用setWindowTitle()函数修改窗体MainWindow名称,使用setText()函数修改Label名称,使用setTabText()函数修改分页栏Tab名称。发现生成代码中有retranslateUi()函数,是使用QT Designer工具创建界面修改控件及窗口名称时自动生成的函数,函数里面详细记录了有哪些对象名称发生变化。使用addWidget()函数将Label控件布局到垂直布局控件上面,使用addTab()函数将分页的标签页添加到TabWidget控件上面。
2024-05-05 22:18:43 1014
原创 PyQt5中重要的概念:信号与槽
不适用内置信号与槽,而使用自定义信号与槽。自定义信号与槽是指在发射信号时,不使用窗口控件的函数,而是使用自定义的函数(简单地说,就是使用pyqtSignal类实例发射信号)。
2024-05-05 13:26:20 1469
原创 【软件测试】MIL/HIL/PIL/SIL测试
接下来,就可以进行模型评审了,也就是说,评审的模型有两个前提,一是可以编译的,二是符合公司建模规则的。接下来,我们可以使用Simulink Design Verifier进行模型的结构分析,借助于Simulink Design Verifier自动生成测试用例的功能,去检查结构上是否存在问题,比如是否有不合理的逻辑设计,是否有运行不到的分支等。代码生成最大的好处是,算法的早期验证,之前NASA有研究表明,开发初期引入的bug,如果到了晚期才发现出来,那么修复这一的bug,会产生非常大的费用。
2024-04-17 14:15:58 1693
原创 【软件测试】单元测试+集成测试+系统测试
在软件开发过程中,各个单元经过单元测试后会被组合在一起,通过集成测试来检查它们之间的接口和交互是否正确,确保整个系统的功能和性能符合预期。系统测试通常由独立的测试团队执行,旨在从用户的角度对整个系统进行全面的测试,以确保系统能够符合用户需求并达到预期的质量标准。系统测试通常是在单元测试和集成测试之后进行的,旨在确保整个软件系统在不同功能、模块和组件之间的集成后能够正常工作。通过集成测试,开发团队可以及早发现各个组件之间的交互问题和集成错误,确保整个系统能够协同工作,有助于提高系统的稳定性和质量。
2024-04-17 10:22:50 1674 2
原创 嵌入式基础知识学习:DA/AD—数模/模数转换
通常,ADC使用一种称为逐次逼近法(successive approximation)的转换技术,通过逐步比较模拟输入信号和一个内部参考电压来逼近原始模拟信号的值,并将其转换为对应的数字值。数字电路只能处理二进制数字信号,而声音、温度、速度和光线等都是模拟量,利用相应的传感器(如声音用话筒)可以将它们转换成模拟信号,然后由A/D转换器将它们转换成二进制数字信号,再让数字电路对它们进行各种处理,最后由D/A转换电路将数字信号还原成模拟信号。转换精度:2的多少次方,转换精度越大,转换得到的数字量精度越好。
2024-04-13 17:27:48 822
原创 【C/C++】基本数据类型—数组、指针和引用
数组是一种完全静态的数据结构,在初始化的时候我们就需要给数组指定大小,并且不能修改。指定数组的大小,也称为数组的维度。数组的维度必须像switch的case后面的表达式那样,是一个在编译的时候就能确定的整型常量表达式。不能使用变量作为数组大小。数值的创建示例如下:定义空数组,但没有给出数组的元素初始值,因此数组的初始值将会是编译器默认的初始值或者无法预计的随机数值。数组的初始化列表示例如下:如果初始化列表中元素个数超出了数组大小,那么编译器会报错。
2024-02-05 16:12:29 839
原创 【C++】面向对象编程—类
面向对象的核心是类,它是C++在C语言原有结构的基础上扩展出来的概念,不仅增加了附属于类的成员函数,也增加了继承和虚函数等面向对象编程所需要的重要功能。从类创建出来的具体变量则叫作对象。对象可以看作是类的实例,每个对象占有着独立的内存空间,而类只是一个描述对象的抽象概念。
2024-02-04 16:40:13 926
原创 【C++】标准模板库STL—泛型编程
容器是一种数据结构,存储具有相同类型的对象。不同类型的容器在其内部以不同的方式组织对象。STL中的容器分为顺序容器和关联容器两种。顺序容器通过元素的位置顺序存储访问,而这个顺序一般是由元素进入容器的顺序决定的。关联容器则通过键来查找键对应的元素。STL包括的容器有:deque、list、map、multimap、set、multiset、stack、queue、priority_queue和vector。
2024-02-03 17:08:49 1067
原创 嵌入式基础知识学习:I2C通信协议
I2C(Inter-Integrated Circuit)总线是两线式串行通信总线,是微电子通信控制领域广泛采用的一种总线标准。在介绍I2C总线工作原理之前,首先必须明确几个基本概念:发送器(Transmitter):发送数据到总线的器件;接收器(Receiver):从总线接收数据的器件;主机(Master):初始化发送、产生时钟信号和终止信号发送的器件;从机(Slave):被主机寻址的器件。I2C总线可以将单片机与其他具有I2C总线通信接口的外围设备连接起来。
2023-11-24 16:17:20 287
原创 嵌入式基础知识学习: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 394
原创 【学习篇】Linux中grep、sed、awk
尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
2023-11-22 10:32:12 299
原创 【shell】shell指令学习
awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。
2023-11-22 10:27:12 138
原创 脉宽调制(PWM)开关驱动
对于某些依赖于输入的有效驱动电压来控制执行效果的执行器,广泛地使用PWM开关驱动。PWM(Pulse Width Modulation)是脉宽调制的英文缩写。它使用一个固定幅值且频率保持一定的脉冲输出,通过调节脉宽的方式调节高电位时段在整个时间区段中的比例(称为占空比),使输出电压的有效值得到改变。这种驱动控制在硬件实现上非常简单,最适于数字电路的输出驱动。实际应用这种驱动方式时,必须注意选取的工作频率应与被驱动元件的惯性大小相适应。基本的原则是:惯性较小的元件,应选取较高的工作频率。
2023-10-24 10:21:39 411
原创 python实现客户成套订单配送策略混合遗传算法编码
以如下的论文文献为学习对象:2008年发表在《控制工程》的文献《客户成套订单配送策略混合遗传算法研究》
2023-10-22 12:14:55 986
原创 如何写代码实现VRP问题中车辆容量限制及时间窗要求(python)
卸货点1-10的时间限制理解如下:卸货点1要求在下午1点至下午4点配送,卸货点1要求的服务时间是半个小时;卸货点2要求在下午4点至下午6点配送,卸货点2要求的服务时间是1个小时,以此类推其他的卸货点的配送及服务时间限制。当首次配送的需求点为卸货点10时,最早到达时间要求是下午5点,配送中心开门是上午七点,关门是下午七点,两点之间的路径长度是160公里,车辆每小时的车速是40公里/小时,所以最佳的方案是不考虑先去卸货点10完成配送任务,因为车辆返回时赶不上配送中心的关门时间。从配送中心出发立即回到配送中心。
2023-10-20 17:07:17 520 1
智能电池信息界面的.ui文件-博客《使用PyQt5实现添加工具栏、增加SwitchButton控件》的.ui
2024-08-08
python实现车辆路径轨迹移动的上位机程序
2024-05-25
python实现九宫格的车辆路径轨迹上位机程序
2023-05-19
The coopetition game in international liner shipping
2023-05-14
文献研读:Stable Cooperation in Dynamic Vehicle Routing Problems
2023-02-07
文献研读:在集装箱班轮航运网络中逆转港口循环方向
2023-02-06
python调用32位的ControlCan.dll实现can报文的收发
2022-11-05
用于求解单配送中心带硬时间窗约束VRP的多智能体进化算法
2022-10-21
32位ControlCan.dll 供实现周立功can设备报文收发调用
2022-09-29
DBC文件可以解析J1939 DM1多包故障报文吗?
2023-07-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人