- 博客(98)
- 资源 (19)
- 收藏
- 关注
原创 VS2022相对于VS2019有哪些新功能
64位架构:VS2022是64位应用程序,能使用更多内存,处理大项目时性能更优,而VS2019是32位应用程序,在处理超大型项目时受内存限制。- 调试功能强化:核心调试器通过提供更易读的逐步调试、条件断点和火焰图,简化代码反编译,帮助程序员定位本地和远程代码问题。- .NET支持更新:全面支持.NET 6,带来现代化的应用程序构建方式和多平台支持能力,而VS2019不具备。- C++支持增强:包含C++20的全套工具,有更好的Intellisense功能、更强大的调试和分析能力。容器化与版本控制方面。
2025-04-10 08:32:17
47
原创 Debⅰan12.10有哪些新功能
安全与稳定更新:对内核与关键组件如glibc、Linux内核、curl等进行修复,提高系统稳定性和数据完整性;修复了MariaDB、Python - Django、Nginx等常用软件包的安全漏洞;修补了Vim、OpenSSH、Redis等关键系统工具的漏洞,减少安全隐患。- 安装程序更新:更新了Debian安装程序,包含了所有相关修复,使全新安装体验更加顺畅。- 软件包调整:移除了因安全维护不足或兼容性问题的软件包,如kanboard、libnet - easytcp - perl等。
2025-04-10 08:16:38
45
原创 使用UltraISO制作Debian12安装盘
2. 将U盘插入电脑,选择“启动”->“写入硬盘映像”。在弹出的窗口中,选择要制作成安装盘的U盘,写入方式选择“USB - HDD+”,然后点击“写入”按钮。3. 等待写入完成,制作时长根据U盘读写速度不同,一般为5 - 10分钟。出现刻录成功提示,即制作U盘启动盘成功。选择“文件”->“打开”,找到下载好的Debian 12 ISO文件。可以从国内镜像源下载,如中国科学技术大学开源镜像站。也可以从官方网站下载。从UltraISO官方网站下载并安装该软件。下载并安装UltraISO。
2025-04-09 21:25:17
80
原创 在 Debian 系统中使用 dd 命令复制整个可启动的 Debian 安装盘
确认 U 盘设备名:打开终端,使用 lsblk 或 sudo fdisk -l 命令查看系统中所有存储设备信息,确定源 U 盘和目标 U 盘对应的设备名,如 /dev/sdb 和 /dev/sdc。复制过程:复制过程中,系统可能会变得响应缓慢,这是正常现象,不要中断复制操作,否则可能导致复制的 U 盘无法正常使用。设备名确认:在执行 dd 命令前,务必仔细确认源 U 盘和目标 U 盘的设备名,避免误操作导致数据丢失。插入 U 盘:将源 Debian 安装盘 U 盘和目标 U 盘插入计算机的 USB 接口。
2025-04-09 15:51:02
311
原创 modbus tcp 协议格式介绍
Modbus TCP 是一种基于 TCP/IP 协议的通信协议,用于在工业自动化领域中实现设备之间的通信。// 功能码 + 起始地址 + 数量。// 构建 Modbus 请求。// 构建 Modbus TCP 请求报文。// 解析 Modbus TCP 响应报文。
2025-04-09 09:51:29
700
原创 modbus rtu 协议结构介绍
Modbus RTU 是一种串行通信协议,常用于工业自动化领域,通过主从方式进行通信,主站发起请求,从站响应请求。
2025-04-08 08:44:57
418
原创 基于windows平台vs2010 下libjpeg-turbo3.1.0的编译
通过以上步骤,你就可以在 VS2010 项目中成功编译和使用 libjpeg - turbo 3.1.0 库。此命令会在当前目录下生成一系列的 Visual Studio 项目文件(使用 WinRAR 或者 7 - Zip 等工具将下载的。解压到指定目录,例如。
2025-04-08 08:41:41
327
原创 通libnodave 库访问西门子s7协议设备
/ 等待 5 秒后尝试重新连接。3. 在 while 循环中,不断检查连接状态,若连接丢失则尝试重新连接,连接成功后进行读写操作,然后每隔 5 秒重复此过程。// 这里简单通过尝试一个小操作(如读取一个字节)来判断连接是否有效。// 用于存储读取和写入数据的缓冲区。// 连接到 PLC。
2025-04-07 06:32:30
1477
原创 西门子s7协议包结构,有校验吗
写入值(Write Var 0x05):S7comm的结构在作业请求时,Data的结构包含Return code(返回代码)、Transport size(确定变量的类型和长度)、Length(写入值的数据长度)、Data(写入的值)、Fill byte(填充字节)。- COTP连接包:也就是S7Comm的握手包,其头结构为:PDU typ(1字节),协议数据单元类型,包含Source TSAP(源设备的TSAP)、Destination TSAP(目的设备的TSAP)等信息。
2025-04-07 06:22:04
571
原创 使用 Qt 开发自定义控件
1. CustomWidget 类继承自 QWidget ,通过重写 paintEvent 函数来绘制一个圆形,重写 mousePressEvent 函数来处理鼠标点击事件并改变圆形颜色。下面是一个使用 Qt 自定义控件的简单示例,创建一个继承自 QWidget 的自定义控件,该控件可以在内部绘制一个圆形,并在鼠标点击时改变圆形的颜色。// 重写鼠标点击事件处理函数。// 重写绘制事件处理函数。
2025-04-06 06:59:36
326
原创 使用 C++ 开发 OPC UA 客户端
请注意,以上代码只是一个简单的示例,实际应用中你可能需要根据具体的需求进行更多的错误处理、节点操作(如写入值、订阅数据变化等)。4. 处理读取到的值并打印(这里假设是一个整数类型,实际应用中需要根据节点的数据类型进行处理)。3. 尝试读取一个节点的值(这里使用了一个示例节点 ID,你需要替换为实际的节点 ID)。// 打印读取到的值,这里假设是一个整数类型,你需要根据实际情况处理。// 这里使用一个示例节点 ID(你需要替换为实际的节点 ID)// 示例:读取一个节点的值。
2025-04-06 06:56:46
381
原创 清明怀念父亲:父亲给我上了一课
父亲用满茧的双手,把最朴素的哲理刻进我血液:有些路看似沉重,扛住了,才能走向更远的天地。在稻田里,他弯腰捆扎沉甸甸的草头,我跟着抱谷穗递给他。又想起多年前那次,我从学校放假回家时,垂头丧气地对父亲说考试失利不想读书了,觉得读书太苦,甚至打算外出打工。肩膀火辣辣地疼,好几次想扔下担子,可看着父亲被冲担压弯却始终挺直的脊梁,又咬牙攥紧冲担。后来才懂得,那些没说出的话,都藏在他特意让我挑的草头里:读书的苦,怎比得过一辈子面朝黄土的艰辛?春风拂过新翻的泥土,恍惚又看见他转身换肩时,投向我的那道深沉目光。
2025-04-05 20:59:21
195
原创 使用asio库,创建TCP客户端
在上述代码中, "127.0.0.1" 是服务器的IP地址, "12345" 是端口号,你可以根据实际情况修改为对应的服务器地址和端口。1. 创建 asio::io_context 对象,用于管理异步I/O操作。6. 使用 asio::read_until 接收服务器的响应数据。3. 使用 tcp::resolver 解析服务器的地址和端口。4. 通过 asio::connect 连接到服务器。// 创建io_context对象。// 解析服务器地址和端口。// 创建TCP套接字。// 接收服务器响应。
2025-04-05 04:52:18
301
原创 在windows上使用asio库
1. 安装asio库:asio是头文件库,下载后解压,将包含头文件的目录添加到编译器的包含路径中。也可以使用vcpkg( vcpkg install asio )安装。3. 包含头文件:在代码中包含asio头文件,如 #include <asio.hpp>。2. 创建项目:打开Visual Studio或其他开发工具,创建一个C++项目。5. 编译运行:配置好项目属性,添加asio库路径,编译并运行项目。使用asio库时,注意处理异步操作的错误和资源管理。
2025-04-05 04:48:37
391
原创 QThread 类来实现多线程编程
下面是一个使用 QThread 类实现多线程编程的简单例子,在这个例子中,主线程创建并启动一个子线程,子线程会执行一个耗时的任务(这里简单模拟为延时一段时间并输出信息),并通过信号与槽机制将结果传递回主线程。1. 定义了一个 Worker 类,继承自 QObject ,包含一个 doWork 槽函数用于执行具体任务,以及一个 resultReady 信号用于发送任务完成的结果。// 自定义的工作类,继承自 QObject,用于在子线程中执行任务。// 任务完成后,发送结果信号。
2025-04-04 18:40:58
312
原创 用VC++写MQTT程序客户端
下面是一个使用 VC++(基于 Windows 平台,借助 paho-mqtt-cpp 库)编写的简单 MQTT 客户端示例代码,它实现了连接到 MQTT 代理服务器、订阅主题以及接收消息的功能。// MQTT 代理服务器地址。1. messageArrived 函数是消息回调函数,当客户端接收到消息时会调用此函数,用于处理接收到的消息内容并输出到控制台。// 连接到 MQTT 代理服务器。
2025-04-04 18:33:06
278
原创 使用 paho-mqtt-cpp 库编写C++ MQTT 客户端
/ MQTT 代理服务器地址。2. 在 main 函数中,创建了 MQTT 客户端对象,设置连接选项并连接到 MQTT 代理服务器。以下示例代码实现了连接到 MQTT 代理服务器、订阅主题以及接收消息的功能。// 连接到 MQTT 代理服务器。// 创建 MQTT 客户端对象。// 模拟运行一段时间,接收消息。// 等待并处理消息。
2025-04-04 18:28:09
212
原创 VC十十中如何使用Snαp7开发西门子S7协议程序
std::cerr << "连接失败,错误码: " << connectResult << std::endl;std::cerr << "读取数据块失败,错误码: " << result << std::endl;std::cerr << "写入数据块失败,错误码: " << result << std::endl;3. 成功连接后,调用 ReadDataBlock 函数读取数据块中的数据,并将读取到的数据输出到控制台。std::cout << "写入数据成功" << std::endl;
2025-04-04 05:28:54
485
原创 Qt中开发OPENGL
这只是一个基础的示例,实际开发中你可以进一步扩展,例如使用顶点数组对象(VAO)、顶点缓冲对象(VBO)来更高效地管理数据,以及实现更复杂的图形渲染效果。使用 Qt Creator 创建一个新的 Qt Widgets Application 项目,选择合适的项目名称和路径。这个函数用于初始化 OpenGL 环境,例如初始化 OpenGL 函数指针和设置清除颜色。这个函数负责执行实际的 OpenGL 绘制操作,这里绘制了一个简单的三角形。构建并运行 Qt 项目,你应该能看到一个窗口,其中显示了绘制的三角形。
2025-04-04 05:16:47
390
原创 VC++对话框程序开发OPENGL步骤
例如,在对话框类(假设为 CMyDlg )中添加一个 HGLRC 类型的成员变量用于存储 OpenGL 渲染上下文,以及一个 HDC 类型的成员变量用于存储设备上下文。- 链接 OpenGL 库文件,在项目属性的“链接器”->“输入”->“附加依赖项”中添加 opengl32.lib 、 glu32.lib 、 glaux.lib。- 可以在对话框类中添加一个 OnPaint 函数(处理 WM_PAINT 消息),在其中进行 OpenGL 绘制操作。// 创建渲染上下文。
2025-04-04 05:12:25
384
原创 解决tcp粘包一例
4. receiveData 函数模拟接收方,维护接收缓冲区,检查并处理完整的数据包,将剩余数据保留用于下次解析。2. bigEndianToInt 函数将大端字节序的4字节数组转换回整数,用于解析消息头中的长度字段。1. intToBigEndian 函数将整数转换为大端字节序的4字节数组,用于填充消息头的长度字段。实现方式:在消息头中定义长度字段(如4字节表示数据体长度)。// 将int类型数据转换为大端字节序的4字节数组。// 将大端字节序的4字节数组转换为int类型数据。
2025-04-03 13:32:34
283
原创 std::move功能
容器操作:当向容器中插入元素时,如果元素类型支持移动语义, std::move 可以将元素移动到容器中,避免拷贝。- 函数返回值:在函数返回对象时,可以使用 std::move 将局部对象的资源移动到函数外部,而不是进行拷贝。std::move 是C++ 中的一个函数,其功能是将对象的资源所有权进行转移,以实现移动语义,减少不必要的拷贝,提高程序性能。在上述代码中,通过 std::move 将 str 移动到 vec 中, str 的资源被转移,其内容变为空字符串。// 输出vector中的字符串。
2025-04-03 10:09:22
251
原创 vc++ 基于libzplay库实现的音乐播放器
vc++ 基于libzplay库实现的音乐播放器,实现顺序、随机、单曲循环播放、播放列表导入/导出 歌曲查找、文件信息查看。
2025-04-03 08:19:23
190
原创 什么是预编译?何时需要预编译?
预编译是在正式编译(将源代码转换为目标机器可执行的机器码)之前进行的一个处理阶段,主要负责处理以 # 开头的预处理指令,如 #include (文件包含)、 #define (宏定义)、 #ifdef 、 #ifndef 、 #endif (条件编译)等。1. 使用宏定义时:当代码中大量使用宏来定义常量、函数等,通过预编译的宏展开,可以方便地实现代码的替换和复用,提高代码的可维护性。预编译的文件包含功能可以将头文件内容整合到源文件中,使后续编译能正确处理头文件中声明的函数、类型等。
2025-04-03 06:26:07
514
原创 volatile常见用法
在 C 和 C++ 等编程语言中, volatile 关键字是一个类型修饰符,它告诉编译器,被该关键字修饰的变量的值可能会在编译器无法预测的情况下被改变。也就是说,编译器在优化代码时,不能因为认为变量的值不会改变而将其从内存中缓存,每次使用该变量时都需要从内存中重新读取。在这个例子中, port 指向一个硬件寄存器,硬件可能会随时修改这个寄存器的值,或者程序对这个寄存器的写入操作需要立即生效,所以使用 volatile 修饰,以确保每次读写都是对实际的硬件寄存器进行操作。// 线程修改共享变量。
2025-04-03 06:23:38
472
原创 如何避免头文件被重复包含?
上述代码中, #ifndef 检查 MYHEADER_H 是否未定义,如果未定义则执行后续代码,并使用 #define 定义该宏。#pragma once 相对 #ifndef 等宏定义的方式更简洁,不过在一些较老的编译器上可能不支持,而 #ifndef 这种方式兼容性更好。2. #pragma once :这是一种较新的避免头文件重复包含的方法,它告诉编译器该头文件只被包含一次。通过将声明放在命名空间内,可以更好地组织代码,并且与宏定义等方法结合,能有效避免重复包含带来的问题。
2025-04-02 07:47:36
426
原创 数组和链表的区别
在链表中插入和删除元素,只需要修改指针的指向,时间复杂度为O(1)(不考虑查找插入或删除位置的时间)。链表的内存是动态分配的,每个节点的内存是单独分配的,节点之间通过指针连接,不需要预先指定整体大小。cout << "访问链表元素: " << current->val << endl;cout << "访问数组元素: " << arr[2] << endl;cout << "数组示例:" << endl;cout << "插入元素后链表: ";cout << "删除元素后链表: ";
2025-04-02 07:44:26
613
原创 STL中的stack用法
3. 底层容器限制:指定底层容器时,必须支持 back() 、 push_back() 、 pop_back() 操作( vector 、 deque 、 list 均满足)。// 1. 底层容器为 vector(需满足 back()、push_back()、pop_back())cout << "栈中元素个数:" << s.size() << endl;cout << "弹栈后栈顶:" << s.top() << endl;cout << "栈顶元素:" << s.top() << endl;
2025-04-01 14:53:28
289
原创 Squirrel语言代码的缺少分号检测
控制语句(`return/break/continue`)必须显式分号。- 变量声明(`local/const`)必须显式分号。// 控制结构单行语句。// 类成员函数定义。// 分词模块(支持Squirrel运算符)// 检查组合运算符。// 处理双引号字符串。// 处理单引号字符串。// 跟踪类定义上下文。// 预处理模块(处理注释和字符串)// 检测字符串开始。// 控制流语句检查。// 表达式语句检查。
2025-04-01 11:58:45
573
原创 CString 中的Compare 和CompareNoCase
CString类中的Compare和函数都是用于比较字符串的,但它们在比较方式上有所不同。Compare。
2025-03-31 17:37:54
525
原创 GetTickCount64 用法举例
要统计一次运行超过50天的程序已运行时间,由于 GetTickCount 等32位表示时间的函数存在回绕问题(大约49.71天就会回绕),所以不适合,可采用GetTickCount64函数,请注意, GetTickCount64 函数仅在Windows系统下可用,并且其返回的时间值在系统休眠或睡眠时间调整时可能会产生不连续的情况。std::cout << "经过的时间(毫秒): " << elapsedTime << std::endl;// 模拟执行一些操作,这里简单让程序睡眠3秒。
2025-03-30 17:52:43
222
原创 基于OpenCV的机器人视觉标定一例
一个为9个圆圆心坐标(points_camera),一个为9个圆心对应的机械手坐标(points_robot)。针对机械手的视觉标定,首先,我们使用到的是OpenCv中的estimateRigidTransform 函数。之后我们把检测得到的图像坐标(t_px,t_py)代入,就可以得到与之相对应的机械手坐标(t_rx,t_ry)3、将标定板放到相机下方,位置区域要与机械手工作的区域一样,包括高度必须尽量一致,这是标定准确度的关键。得出来的6个double类型的参数,就是我们此次标定最终得到的标定参数了。
2025-03-30 16:11:28
237
原创 给一个字符串,判断是否为合法标识符
判断一个给定的字符串是否为合法的标识符。1. 由字母(包括大写和小写)、数字和下划线组成。// 检查其余字符是否为字母、数字或下划线。// 检查首字符是否为字母或下划线。// 检查是否为 C++ 关键字。3. 不能是 C++ 中的关键字。2. 必须以字母或下划线开头。// C++ 关键字数组。
2025-03-30 09:35:07
327
原创 实现一个快速排序算法,并分析其时间复杂度
因为每次划分后,问题规模变为原来的一半,总共需要 \log n 次划分,每次划分需要 O(n) 的时间来遍历数组进行比较和交换操作。2. 最坏情况:当数组已经有序(升序或降序)时,每次选择的基准都是数组的最大值或最小值,导致一次划分后,一边没有元素,另一边有 n - 1 个元素。综上所述,快速排序在平均和最好情况下具有较好的性能,时间复杂度为 O(n \log n),但在最坏情况下时间复杂度为 O(n^2)。3. 平均情况:在平均情况下,快速排序的时间复杂度也是 O(n \log n)。
2025-03-30 08:37:30
339
原创 通过 UDP 广播搜索局域网内设备
创建一个 UDP 套接字,设置为广播模式,然后向指定的广播地址发送搜索消息,并等待接收来自局域网内设备的响应。3. 这里只是简单的示例,实际应用中可能需要更复杂的逻辑处理,如多线程处理多个设备的响应等,多网卡。// 自定义的端口号。2. 确保程序运行时具有足够的权限来进行广播操作。// 创建 UDP 套接字。// 设置套接字为广播模式。
2025-03-30 08:31:53
361
原创 qt中调用外部DLL一例
将libzplay.dll 文件复制到D:\qt_project\build-lxxplayer-Desktop_Qt_5_9_1_MinGW_32bit-Release\release。点下一步,这样外部DLL就加入到工程中了。单击播放按钮,播放成功!
2025-03-29 17:03:20
140
原创 clean code编码习惯
如多个地方都有计算税费的逻辑,可将其提取为一个公共的计算税费函数。- 层次清晰:代码的组织结构要有层次,如按照业务逻辑的不同层次进行分层,表现层、业务逻辑层、数据访问层等,各层之间的调用关系要明确。- 明确错误处理:在代码中对可能出现的错误进行明确的处理,如使用 try - catch 块捕获异常,并给出合理的错误提示信息。- 模块划分:将代码按照功能划分为不同的模块或类,每个模块有明确的职责,模块之间的耦合度要低,内聚性要高。- 及时更新:当代码发生修改时,及时更新相应的注释,确保注释与代码的一致性。
2025-03-29 12:25:27
318
原创 在软件开发中常用的版本控制系统是什么?
推送本地分支到远程仓库:先执行 git push origin <本地分支名> ,将本地分支的代码推送到远程仓库。- 回退到上一个版本,使用 git reset --hard HEAD^ ,回退到上上个版本则使用 git reset --hard HEAD^^ ,回退到前100个版本可使用 git reset --hard HEAD~100。- 提交文件到本地仓库:执行 git commit -m "提交说明" ,将暂存区的文件提交到本地仓库, -m 后面的参数是对此次提交的描述。
2025-03-29 07:48:28
339
原创 分享一个工具AStyle3.6.4
AStyle 3.6.4 是一款广泛使用的开源代码格式化工具,专注 C、C++、C# 和 Java 等编程语言。它不仅能大幅提升代码可读性,助力团队开发协作,而且配置灵活,使用方便。参数:--style=allman -n -p -U -S -K $(ItemFileName)$(ItemExt)接下来就可以在VS2022中使用了,针对某个文件直接菜单【工具】->【Astyle】 进行美化。2)在VS2022中菜单【工具】->【外部工具】 新建。命令:D:\AStyle.exe。
2025-03-29 07:10:11
235
qt开发的上位机程序源码。
2022-02-28
上甑机器人在白酒固态蒸馏中的应用现状与探讨.rar
2022-01-10
ABB机器人第六轴与示教旋转角度互补问题.rar
2022-01-10
简单串口调试助手,简单,实用,界面与当前流行的串口调试工具基本相同。使用方便,而且可以自定义串口速率,由状态显示内容。
2021-12-27
智能制造前沿观察与智能工厂规划策略-黄培-光迅会议-2019年5月11日.pdf
2019-05-14
基于MRDS的工业机器人仿真研究
2013-06-27
关节式工业机器人仿真及上位机控制软件研究
2013-06-27
基于D-H法的挖掘机工作装置运动学分析
2013-06-27
Astyle3.6.4 可执行文件
2025-03-29
boost::asio 库源码1.30.2
2025-03-27
C++11 引入的范围基 for 循环(Range-based for loop),测试代码
2025-03-27
基于OpenGL和SolidWorks的机械系统运动仿真原理及实现
2024-12-11
一个有10年工作经验的工程师对modbus协议总结 包括ModbusASCII 、ModbusRTU、ModbusTcp 报文
2024-07-04
qt5.7windows下开发环境搭建和一个例子
2024-06-28
UR5机械臂的TCP/IP控制
2024-04-07
Windows平台上达梦数据库的ODBC驱动包(64位)
2023-11-17
Windows平台上达梦数据库的ODBC驱动包(32位)
2023-11-16
如何让Editplus支持squirrel语言
2022-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人