自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 资源 (1)
  • 收藏
  • 关注

原创 PLC数据类型介绍

需要注意的是,虽然 PLC 和 C# 中的数据类型可能有一定的对应关系,但在进行数据交换时仍需要考虑数据的编码、大小端格式、数据范围等因素,以确保数据能够正确地传输和解释。在 PLC(可编程逻辑控制器)中,数据块是一种用于存储数据的结构,它可以包含不同类型的数据,例如整数、浮点数、布尔值等。整数类型:在 PLC 中常见的整数类型有 Int、DInt、SInt 等,对应到 C# 中可以使用 int、short、byte 等整数类型。字符串类型:在 PLC 中也有字符串类型,但与 C# 中的字符串类型不同。

2024-04-01 16:35:08 407

原创 TCP服务端主动向客户端发送数据

在此基础上,要修改服务端代码,使其能够每秒向客户端发送当前时间,你需要添加一个循环,每次循环发送当前时间给客户端。同时,你需要在客户端代码中添加接收服务端发送的数据的逻辑。这样修改后,服务端每秒钟向客户端发送当前时间,而客户端接收并打印出来。

2024-04-01 16:09:26 716

原创 tcp服务端,时刻在线

在此基础上,将服务端改为时刻在线。

2024-04-01 16:01:19 515

原创 C++ TCP 服务端和客户端通信的例子

这个例子中,服务器端和客户端之间通过 TCP 进行通信。服务器监听端口8080,并等待客户端连接。一旦有客户端连接进来,服务器端会接收来自客户端的消息,然后向客户端发送一条消息。客户端首先连接到服务器,然后发送一条消息给服务器,然后从服务器接收一条消息。客户端接收来自服务器的响应数据。10. 连接关闭或其他操作。

2024-04-01 15:24:50 545

原创 关于c# 没有显式头文件的优劣分析

在C#中,没有像C或C++中的显式头文件(header files)的概念。在C#中,源代码文件通常包含类、接口、结构和其他类型的定义,这些源文件直接包含在项目中,并且通过命名空间(namespace)来组织代码。总的来说,虽然C#没有显式的头文件概念使得代码更加简洁和易于维护,但是在大型项目中,C++的显式头文件机制有助于提高编译效率和代码的模块化。当涉及到C#中没有显式头文件的概念,而C++中有头文件时,两种语言之间存在一些差异,这些差异会影响到代码组织、可读性、编译速度等方面。

2024-04-01 11:31:56 507

原创 C1083: 无法打开包括文件: “pthread.h”: No such file or directory`

中定义的功能,并且你想在Windows平台上进行编译,你可能需要考虑在Windows上使用类似的多线程库,如Windows API 或者 POSIX for Windows。是一个POSIX线程库的头文件,通常用于在Unix/Linux系统上进行多线程编程。中的功能在Windows平台上也有等效的实现,你可以尝试使用Windows平台上的替代头文件。:在代码中使用条件编译,根据操作系统的不同包含不同的头文件。头文件的,因为Windows使用不同的多线程库。解决这个问题的方法取决于你的代码是否真的需要。

2024-03-29 14:19:27 245

原创 error C1083: 无法打开包括文件: “unistd.h”: No such file or directory`

然而,在Windows平台上编译时,编译器通常不会提供此头文件。中的功能在Windows平台上也有等效的实现,你可以尝试使用Windows平台上的替代头文件。:在代码中使用条件编译,根据操作系统的不同包含不同的头文件。中定义的功能,你可能需要在Windows平台上寻找。:如果可能的话,修改代码逻辑,以避免使用需要。解决此问题的方法取决于你的代码是否真的需要。如果不是,可以尝试删除对该头文件的引用。的替代版本,或者修改你的代码以不依赖于。:检查你的代码中是否确实需要。如果你的代码确实需要。

2024-03-29 14:18:39 231

原创 c# modbus 客户端 读modbus 输入寄存器的值

/ Modbus TCP默认端口号。

2024-03-29 10:18:53 178

原创 回调函数例子

回调是一种常见的编程模式,其中一个函数被传递给另一个函数,以便在某个事件发生时执行。函数接受一个整数值和一个回调函数作为参数。在函数内部,它执行一些操作,并在特定条件(这里是值大于10)下调用传递的回调函数。作为回调函数传递进去。当条件满足时,回调函数会被调用,并输出相应的信息。请注意,这只是一个简单的示例,实际应用中可能涉及更复杂的场景和数据传递。

2024-03-29 09:51:54 214

原创 PlcException error code ReadData error msg: Received 12 bytes: ‘32-0 2-00-00-00-00-00-00

如果还是不行,可以考虑重启电脑,重新建项目,也许能解决。博图这个app 的bug太多了。

2024-03-29 09:32:53 204

原创 c#通过s7与plc通信

完成以上步骤后,您的TIA Portal项目应该能够与您的S7 PLC进行通信了。确保配置正确并进行测试,以确保通信正常运行。要配置西门子S7通信,首先确保你有一些必要的信息,比如PLC的IP地址,以及需要访问的数据块。上层软件如何通过s7通信读取数据块。

2024-03-29 09:22:39 459

原创 布局选项卡式文档

在 Qt 中,要实现选项卡式文档,通常使用 QTabWidget 控件。你可以将这两个 QWidget 放置在 QTabWidget 中,并将 QTabWidget 添加到主窗口中,从而实现选项卡式布局。要将这两个 QWidget 设置为 Tabbed Document(选项卡式文档),你需要将它们作为文档窗口添加到主窗口中,并使用适当的布局管理来实现选项卡效果。通过这样的方式,你可以将这两个 QWidget 设置为 Tabbed Document,并在主窗口中以选项卡的形式显示。

2024-03-20 17:29:43 113

原创 c++ 非阻塞休眠一个线程

因此,如果你的项目需要在多个平台上运行,最好使用 C++11 标准引入的。是用于当前线程休眠指定时间的标准方法。然而,如果你正在使用Qt,你可以使用Qt提供的跨平台的睡眠函数。是 C++11 标准引入的线程库的一部分。一种常见的做法是使用系统特定的方法来实现线程的非阻塞休眠。是 C++11 引入的时间库,它提供了与时间相关的类型和函数。在C++11之前,要实现非阻塞的线程休眠比较困难,因为标准C++库没有提供类似于。函数接受的是毫秒为单位的休眠时间。函数接受的是微秒为单位的休眠时间。在C++11标准中,

2024-03-13 11:35:27 616

原创 Qt如何保证控件调用时候的线程安全

Qt 提供了一种方式来确保在正确的线程上执行 Qt 对象的方法,即使用信号槽机制。你可以在新线程中发出信号,然后将这个信号连接到主线程中的槽函数,这样就能在主线程中更新 Qt 组件。)是不安全的,因为 Qt 大部分的类和方法都不是线程安全的。在一个新的线程中被调用,这可能会导致程序崩溃或产生未定义的行为。,这样就确保了在主线程中更新 Qt 组件的安全性。在多线程环境中直接调用 Qt 组件的方法(如。中,当获取到新数据时,它会发出。对象移动到新的线程中,并将信号。,用于更新标题文本。

2024-03-13 11:15:46 581

原创 一个典型的Qt类基础

可以更有效地传递参数给基类的构造函数,确保在对象创建时进行必要的初始化工作。这在Qt框架中是很常见的做法,特别是在派生类中需要调用基类构造函数时。在实际应用中,你可能会在这个类中添加其他成员变量、函数和信号槽等,以满足具体的需求。这样做的好处是,通过初始化列表直接将参数传递给基类构造函数,可以在对象的构造过程中更高效地进行初始化,而不是在构造函数体内使用赋值语句。这个参数通常用于指定新创建的对象的父对象,即新创建的。是所有用户界面对象的基类,表示一个窗口或者一个窗口中的部件。:这是初始化列表的部分。

2024-03-12 17:29:51 335

原创 git切换分支异常,提示fatal:a branch is expected ,got remote branch **

的操作,但是这些命令通常用于本地分支。在 Git 中,远程分支不能直接被检出(checkout)到工作目录,因为它们代表在远程仓库中的状态,不是本地编辑的。为实际的远程分支名和本地分支名。这样你就能在本地创建一个与远程分支相对应的分支,然后在本地分支上工作。在本地分支上进行任何需要的修改,然后提交它们。这个错误表明你试图在一个远程分支上执行类似。分支的内容,并在本地创建一个新的分支。这会将你的本地分支推送到远程仓库。

2024-03-11 17:13:39 661

原创 ImGui::SetWindowFontScale 设置局部字体大小

是一个常用的控件,用于显示文字。它会根据当前的字体设置自动调整文本的大小。如果你想手动控制文本的大小,可以使用。在设置之后,文本将以更大的字体大小显示。在使用完之后,通过再次调用。在局部设置了一个较大的字体缩放比例,用于影响该窗口内的所有。这个方法有一个缺点,就是渲染后的文字边缘锯齿较为严重。函数,该函数允许你在窗口中设置特定的字体缩放比例。以下是一个示例,演示如何使用。在这个例子中,我们使用。恢复默认的字体大小。

2024-03-11 15:30:07 400

原创 一个简单的回调函数

回调是一种常见的编程模式,其中一个函数被传递给另一个函数,以便在某个事件发生时执行。函数接受一个整数值和一个回调函数作为参数。在函数内部,它执行一些操作,并在特定条件(这里是值大于10)下调用传递的回调函数。作为回调函数传递进去。当条件满足时,回调函数会被调用,并输出相应的信息。这只是一个简单的示例,实际应用中可能涉及更复杂的场景和数据传递。

2024-03-08 17:02:18 337

原创 qobject_cast 与 static_cast

和是两个用于进行类型转换的 C++ 操作符,但它们在使用场景和行为上有一些关键的区别。

2024-03-08 15:16:04 483

原创 linux tar.xz 压缩与解压

一、解压解tar.xz文件有两种方法,以php-7.2.0.tar.xz为例。上面两种方法如果不加-C参数,默认解压在当前目录。分两步:先生成tar文件,再生成tar.xz文件。二、生成tar.xz文件。

2024-03-05 15:05:01 738

原创 linux 取消分区的挂载以及挂载到新分区如何操作

完成上述步骤后,sda4 分区将被合并到 sda3 分区,并且 sda4 的空间将成为 / 目录的一部分。请确保在进行任何分区操作之前备份重要数据。接下来,选择 sda3 分区,并选择 “Resize/Move” 选项。将 sda3 分区的大小调整为包含 sda4 分区的空间。文件中,找到与 sda4 分区相关的行,并将其更改为挂载到 / 目录。在进行任何磁盘操作之前,备份是非常重要的,以防止数据丢失。在 GParted 中,选择 sda4 分区,并取消分区的挂载。为 sda4 分区的实际 UUID。

2024-03-05 13:39:04 433

原创 怎么判断需不需要给一段代码新写一个类

如果你发现一组相关的数据和操作被多次使用,而且它们共同形成了一个独立的概念,那么可能值得将其封装成一个类。如果你的代码段涉及到一个抽象的概念,例如“用户”、“订单”等,那么可能是时候创建一个表示这个概念的类。如果你的代码段执行多个不同的责任,可能是时候将其拆分为不同的类了。如果你发现自己在多个地方复制粘贴相似的代码,考虑将这些代码抽象成一个类,以便在整个程序中重用。如果多个人共同开发项目,通过类的使用可以更好地分工合作,每个人负责特定的类或模块。如果你有一组数据和与之相关的操作,这是创建一个类的良好候选。

2024-02-29 14:35:35 376

原创 Qt中信号和槽解决了什么问题

当一个插件中的某个事件发生时,可以通过发射信号来通知其他插件,而其他插件则通过连接到这个信号的槽函数来处理相应的事件。这样,对象之间的通信就变得更加灵活,它们不再需要直接知道对方的实现细节,只需关注信号和槽之间的连接关系。当某个事件发生时,相关对象可以发射一个信号,而其他对象则可以连接到这个信号的槽函数,实现对事件的响应。最令人愉悦的是:qt把信号槽机制推广得极好,大量得三方库同样支持信号槽,使得我在使用得时候极其方便,直到现在,我写软件的时候第一选项依然是qt,其中信号槽的广泛使用非常关键。

2024-02-29 13:43:32 567

原创 什么是虚函数?

虚函数允许在基类中定义一个函数,并在派生类中对该函数进行重写。通过使用虚函数,可以实现运行时多态性,使得程序在运行时能够动态地选择调用哪个版本的函数,而不是在编译时确定。在运行时,程序会根据实际对象的类型来确定调用哪个版本的虚函数。这种动态性允许我们在运行时根据实际对象的类型来决定调用哪个函数,从而实现了多态性。虚函数的动态绑定是实现多态性的关键特性之一。时,实际上调用的是指向对象类型的函数,而不是指针类型的函数。这就是所谓的动态绑定。的指针,但它可以指向派生类的对象。它仍然保持其虚函数的特性。

2024-02-29 13:42:47 367

原创 ImGui显示中文

【代码】ImGui显示中文。

2024-02-02 16:26:19 368

原创 通过截获键盘事件获取扫码枪数据

缺点是焦点必须集中在当前窗口也就是MainWindow上,否则无法截获。更推荐使用串口的方式获取,详见上一篇文章。

2024-02-02 10:47:08 367

原创 通过Qt接口从串口中获取扫码枪数据

cmake 配置serialport。通过Qt接口从串口中获取扫码枪数据。qmake配置serialport。

2024-02-02 10:36:30 445

原创 通过QTcpSocket以Json格式将数据发出

temp temp。

2024-01-31 18:26:16 342

原创 利用windows的接口检测串口

【代码】利用windows的接口检测串口。

2024-01-31 16:51:42 483

原创 QString 转AZStd::string

对象,并希望将其转换为。确保你的项目已经包含了。库,并适当包含了头文件。在Qt中,如果你有一个。

2024-01-24 16:47:40 447 1

原创 C++中,`detach` 和 `join` 区别

是与线程相关的两种不同的操作,用于管理线程的生命周期。如果主线程需要等待子线程完成,选择。如果你不关心子线程的状态,选择。

2024-01-24 16:33:40 526

原创 全局变量跨线程的问题

多线程环境下,由于缺乏适当的同步机制,全局变量的数据可能会处于不一致的状态。一个线程可能正在修改变量的值,而另一个线程同时正在读取该变量,导致读取到不正确的数据。在多线程环境中,为了确保线程安全,可能需要使用锁或其他同步机制,这可能导致线程之间的竞争和性能下降。在多线程环境中,可以使用锁机制来确保对全局变量的访问是互斥的,即一次只能有一个线程访问。通过在对全局变量的访问前后使用互斥量,可以防止多个线程同时访问导致的问题。在支持原子操作的平台上,可以使用原子操作来确保对全局变量的操作是原子的,不会被中断。

2024-01-22 15:04:33 437

原创 ImGui基础概念和简单函数介绍

ImGui(Dear ImGui)是一个用于在C++应用程序中创建图形用户界面(GUI)的轻量级库。它设计用于快速、简便地在应用程序中嵌入调试和工具界面。这是一小部分ImGui函数的介绍。在使用ImGui时,可以根据具体的需求查阅官方文档以了解更多函数和用法。ImGui提供了丰富的功能,可以方便地构建各种类型的用户界面。定义一个可嵌套的区域,开始和结束ImGui的绘图。创建一个子区域,允许在其中放置其他GUI元素。创建一个可输入文本的文本框。在GUI中显示文本。创建一个浮点数滑块。创建一个颜色选择器。

2024-01-19 17:25:32 735

原创 类(Class)和结构体(Struct)的一些主要区别:

类(Class)和结构体(Struct)的一些主要区别:成员的默认访问权限:继承:构造函数和析构函数:内存分配:使用场景:默认继承:下面是一个简单的示例,演示类和结构体的基本区别:

2024-01-18 17:13:24 383

原创 c++ select实现进程/线程阻塞,并设置超时时间。

这个示例中,程序监视标准输入是否有数据可读,如果在 5 秒内有输入,就会读取并打印输入内容;如果发生错误,输出错误信息。是一个系统调用,用于多路复用 I/O 操作。它允许程序监视多个文件描述符,等待其中之一变得可读、可写或发生异常,然后执行相应的操作。的基本原理是将一组文件描述符传递给内核,内核会监视这些文件描述符的状态,并在有事件发生时通知应用程序。用于检查文件描述符是否在集合中。用于将文件描述符添加到集合中,用于将文件描述符从集合中移除,下面是一个简单的使用。在文件描述符集合中,

2024-01-18 09:01:02 493

原创 modbus_reply 函数详解

Modbus定义了不同类型的寄存器,包括线圈(Coils)、离散输入(Discrete Inputs)、保持寄存器(Holding Registers)和输入寄存器(Input Registers)。你可以根据实际需求和PLC的规格,将不同类型的数据存储在相应的寄存器中,并通过Modbus通信进行读取或写入。Modbus映射包含了对应于不同寄存器类型的数据,用于在Modbus通信中读取和写入数据。在这里,假设每个寄存器都是16位(uint16_t),并且要发送3个寄存器的数据(因为在前面的代码中,

2024-01-04 19:26:22 650

原创 c++ 中多线程的使用

但要注意,线程分离后,程序退出时这些线程可能仍在运行。确保在程序退出前适当地等待或结束这些线程。将线程分离,让它们在后台运行。这样,主线程不会等待这些线程的完成,而可以继续执行其他逻辑。将在后台运行,主线程可以继续执行其他逻辑。请注意,一旦线程被分离,你就不能再使用。之后执行,但你又希望这些线程能够同时运行,你可以在主线程中使用。如果你的其他逻辑必须在线程。

2024-01-04 19:17:54 553

原创 .cmd 文件和.bat文件的区别

文件都是批处理文件,用于运行一系列的命令。总体而言,如果你在较新的Windows系统上工作,并且想要利用更多的扩展性特性,推荐使用。如果你需要向后兼容,或者在较老的系统上运行脚本,那么。

2023-12-25 15:12:50 793

原创 问题回复:什么是 Java 中的 Lambda 表达式?有什么应用场景?

函数式接口是一个只有一个抽象方法的接口。Lambda 表达式是 Java 8 引入的一项重要特性,它允许在代码中以更简洁的方式表达匿名函数(也称为闭包)。Lambda 表达式的引入是为了提供一种更简单、更便捷的方式来写匿名内部类。它使得在 Java 中可以更方便地进行函数式编程的实践,如传递函数作为参数、返回函数等。Lambda 表达式的引入使得 Java 编程更加灵活和简洁,尤其在处理函数式编程和简化集合操作等方面发挥了重要作用。在多线程和并发编程中,Lambda 表达式可以用来简化线程的创建和使用。

2023-12-25 09:34:34 386

原创 问题回复:运维需要配置各种存储,CDN服务也是运维必须熟悉的方面么?

总的来说,虽然CDN服务通常由专业的服务提供商管理,但运维人员对于如何配置和使用CDN以满足特定需求仍然是很有价值的。尤其是对于大型网站或应用,CDN服务是确保高性能、高可用性和良好用户体验的重要组成部分。运维人员通常需要处理系统和应用程序的各种方面,包括存储、网络、安全等。CDN(内容分发网络)服务通常也是运维团队需要关注的一部分,特别是对于那些有大量用户访问的网站或应用。运维人员需要了解如何配置这些安全功能,以确保网络的安全性。运维人员需要了解如何配置CDN以实现带宽的有效使用。

2023-12-25 09:28:27 519

热键管理应用(pc)端

新建/管理 热键

2019-01-24

空空如也

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

TA关注的人

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