自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MD650一对多透传场景联动

一个气体探测控制器的485口下面接了两个气体探测仪表。控制器再通过另一485口上传给物联网模块。前两个模块连接的报警控制器485上传的数据。第3个模块,只用本体DO1控制报警器电源开关。上面两个模块采集的数据超过一定数值,就让第三个模块触发报警。

2025-05-28 22:31:29 348

原创 md650一对一场景联动调试记录

此实验以上两篇博文为基础,采集数据(HS1/HS2)大于设定值1(0.4)输出报警Q1,小于设定值2(0.3)复位报警输出Q1。

2025-05-26 19:44:07 187

原创 md650透传

两个物联网模块都装4g上网卡,“...25134(imei)”用本体rs485串口1来采集。左侧个开关是“21414”本体的继电器输出(读写),右侧是透传的两个仪表数据(只读)modbus数据透传给“....21414(imei)”.

2025-05-25 20:44:26 247

原创 md650本体DO输出配置记录

2025-05-24 23:32:37 74

原创 串口调试记录

手动加CRC16校验,成功返回同样数据。仪表地址96(十六进制60H)

2025-05-22 13:36:09 194

原创 PLC的扫描周期有效性记录

只看I11.0, M30.0和M30.1。I11.0初始强制为1,M30.0设1,然后I11.0初始强制为0。上图M30.1并不会置位。下图M30.1可以置位。

2025-05-08 12:41:17 120

原创 自定义eplan端子图表模板下载

自定义eplan端子图表下载,及复制路径

2025-04-21 12:44:20 154

原创 MCGS触摸屏仿真与博途仿真联调

用到3个软件:博图,MCGS, NetToPLCsim小软件。(小软件下载--上篇博文有网盘链接)5.小软件点Start Server,如下图。然后仿真联调,速度设定为33.博图在线监视数值成功。4.博图仿真下载好程序,在现监视程序。MCGS同样模拟运行--工程下载--启动运行。2.添加连接IP地址,与mcgs远端IP地址相同,即电脑IP地址。3.打开博图仿真,再在小软件中添加连接仿真PLC IP地址。1.打开 NetToPLCsim,出现如下画面。

2025-03-09 22:47:06 672

原创 博图v16联合factory io PID仿真

192.168.0.200是电脑虚拟网卡IP地址。192.168.0.12是仿真PLC IP地址。factory io连接IP为电脑虚拟网卡地址。

2024-12-08 17:14:28 265

原创 三菱QJ71MB91自动modbus控制变频器

所以只看 1:启用 下面的参数,2指的是通信对象的站地址。4106h就是本智能模块(U1D)的数据缓存地址,十进制是16646.所以程序是U1D\16646.这个地址是在范围4000h4FFFh内自定义的。4608是十六进制0x1200,是控制变频器的寄存器地址。访问点数是2:指的是用到了两个寄存器0x1200和0x1201。遗憾没有最终的完成程序,只保存了调试程序,所以只有简单的一段测试,D800写入455(十六进制01C7的十进制455).D802写入5000(0x1388).

2024-11-27 14:11:22 706

原创 汇川h3U用modbus配置扩展IO

下图是读取从站4的线圈(只在程序第2行,和读输入点一样,用一行mov指令就OK了,内部是自动循环通信的)和写从站4的线圈(写的程序原理,以从站4的第1个输出点映射M1060为例,当M1060状态改变,并且通信缓存区的地址D160也跟着改变,才触发通信M160)从站1的第1个输出点映射M1000 ,对应通信缓存区是D100,触发为M100。从站1的第2个输出点映射M1001 ,对应通信缓存区是D101,触发为M101。从站4的16点写输出映射M1060-M1075 ,对应通信缓存区是D160。

2024-06-20 11:17:46 2146

原创 C++回调函数

一个是普通函数作为回调函数。另一个使用 lambda 表达式作为回调函数 (匿名函数)

2024-05-31 12:43:17 288

原创 【无标题】

但因为我们只有 23 位来存储尾数的小数部分,而 110011001100....无限循环,所以会有精度误差,有在线转换工具把89.8转换成42B39999也是正确的。id号-01/功能码-03/0C 00 - 表示从寄存器地址/01 00 - 表示地址1数据256(十进制)/00 16--地址2数据22/00 21-地址3数据3300 2C-地址4数据44/99 9A 42 B3按字发送,低字在前,高字在后 ,所以数据是42B3999A,(已验证-89.8是C2B3999A)

2024-05-29 14:50:51 370

原创 【无标题】

CANopen 的创始人在设计CANopen时,对其定 义为小网络、控制信号的实时通讯: 报文传输采用CAN标准帧格式。即11bit的ID域,以尽量减小传输时间; 网络控制报文均采用数据最小字节数。比如心跳报文,只有1个字节数据; 实时更新的过程数据无需接收方报文应答。即采用生产消费模型,降低总线负载; 需要接收方确认的配置参数一般都是采用快速单字传输。即 1 个报文最多传送 1 个32字节的参数变量,避免了分帧引起的实时性降低。以上这些定义都是为了节约时间开销,最大限度保证实时性。

2024-05-20 22:54:02 1039

原创 c++句柄

Windows操作系统采用进一步的间接:在进程的地址空间中设一张表,表里头专门保存一些编号和由这个编号对应一个地址,而由那个地址去引用实际的对象,这个编号跟那个地址在数值上没有任何规律性的联系,纯粹是个映射而已。通过使用句柄和句柄表,系统可以在不改变程序代码的情况下重新定位内存块,并将新的地址映射到句柄上。句柄并不是直接指向内存地址的指针,而是一个由系统生成的、具有特定含义的整数值或其他类型的数据。总之,句柄引用内存块的原理是通过操作系统分配的标识符来间接访问内存块,从而实现对内存资源的有效管理和控制。

2024-05-19 14:55:19 796

原创 线程池 ThreadPool

但过多创建线程和销毁线程,会消耗掉大量的内存和CPU资源, 假如某段时间内突然爆发了100个短小的线程,创建和销毁这些线程就会消耗很多时间, 可能比线程本身运行的时间还长。线程池提供若干个固定线程轮流为大量的任务服务,比如用10个 线程轮流执行100个任务,当一个线程完成任务时,并不马上销毁,而是接手另一个任务, 从而减少创建和销毁线程的消耗。在上面的程序中,我们向线程池中排入了100个工作函数,线程池分别独立的完成了 这100个任务。如果这段时间内没有线程完成任务,就创建一个新线程去执行新任务。

2024-05-15 23:24:51 683

原创 c#多态性的应用

继承和多态性是开发复杂软件的关键技术,特别适合于分层软 件系统。操作系统可以设计一个抽象基类,提供 Read()和 Write()两个抽象函数,各种硬件的驱动程序被编写为该抽象基类的 派生类,具体实现Read()和Write()操作。设计一个电脑游戏,游戏中有猪、牛、兔子、青蛙、鸭子等动物,这些动 物都继承于Vertebrata 类(脊椎动物类),Vertebrata类有一个抽象方法Display(),每个动 物都从Vertebrata 类那里继承并重写了Display()方法,用来把动物本身画在屏幕上。

2024-05-14 21:12:13 369 1

原创 【无标题】

是 WPF 框架中用于构建 Windows 桌面应用程序用户界面的命名空间,是 WPF (Windows Presentation Foundation) 框架中的一个核心命名空间,而System是 .NET 框架中更广泛的命名空间,包含了大量基础类。Window是一个命名空间,它包含了 WPF 中大部分常用的用户界面 (UI) 控件。这些控件用于在 WPF 应用程序中创建丰富的用户界面。以下是一些:表示一个用户可以单击以执行操作的按钮。:允许用户输入和编辑单行文本。:用于在 UI 中显示只读文本。与。

2024-05-13 23:44:45 929

原创 C#泛型委托

在C#中,Action 是一个内置的委托(delegate)类型,用于封装没有返回值(即返回类型为 void)的方法。Action 委托有多个重载版本,可以接受不同数量的参数,每个参数可以有不同的类型。关键字用于声明委托(delegates),委托是一种类型安全的函数指针,允许你传递方法作为参数或从方法返回方法。而result 此时为null.下一句:result =func("我是带返回值的Func委托:");是一个类型参数,意味着这个委托可以用于任何类型的方法,只要那个方法有一个参数并且没有返回值。

2024-05-12 17:15:22 798

原创 C#二维数组(矩阵)求伴随矩阵和逆矩阵

程序框架及winform窗体。

2024-05-11 11:35:58 330

原创 特性(Attribute)

特性也是以类的方式实现的,一个特性就是一个类。现在我们来自定义一个特性类, 该特性用于描述动物的生物学分类信息。在项目中创建一个名为“AnimalInfoAttribute” 的类。//构造函数//属性:名称set;}①//属性:门set;//属性:纲set;//属性:科set;自定义的特性继承于 Attribute 类,我们在 AnimalInfoAttribute 类中定义了一个构造 函数和四个属性,这四个属性用于记录动物的名字和动物所在的门、纲、科等分类信息。

2024-05-06 01:57:20 759

原创 正则表达式_字符匹配/可选字符集

就这样 的正则表达式。这些位置是普通字符 R o o m \d \d \d 20 这 3 个位置各匹配一个数字 其中“Room”是普通字符,而“\d”是通配符,表示该位置上有一个数字。该表达式 共占用了 7 个位置,第一个位置上是字母“R”,第二个位置和第三个位置上都是字母“o”, 第四个位置上是字母“m”,而第五到第七个位置上是三个数字。所以正则表达式 “Room\d\d\d”代表着“比如字符串 “Room101”、“Room415”、“Room888”等都与“Room\d\d\d”匹配①。

2024-05-05 11:36:24 2421

原创 WPF应用程序XAML

当在XAML编辑器中输入Click的时候,按下键盘上的Table键,XAML编辑器上会自动生成代码Click=" ",并在旁边显示一个提示按钮,显示“新建事件处理程序”,双击该按钮之后,系统会自动在MainWindow.xaml.cs文件中生成事件处理函数。XAML语句Button元素中的Content属性对应Button成员的Content属性,表示按钮上显示的内容,同样的对应关系,Background属性表示Button的背景颜色,属性元素语法即用属性元素本身为该属性赋值,表示Button的单击事件,

2024-05-04 15:01:40 993 1

原创 C#&图像:2.图像处理

类库项目ImageProcessingLibrary代码,里面是几种图像处理函数,可以生成DLL文件被其他(下面)项目添加引用。下面是各个独立窗体应用程序,需要添加引用的都是上面的类库(DLL),复制测试这些代码需要自己在。路径下添加命名自己的图片(可参考图像第一章)......项目名\bin\Debug。2.利用中值滤波使图像变得平滑。1.基于差分的边缘检测与提取。4.目标提取与区域标记。

2024-05-04 09:40:08 529

原创 C#简单创建DLL文件并调用

(5)在弹出的“添加引用”窗口中选择“浏览”选项卡,在查找范围下拉列表框中选择ClassLibrary项目所生成的DLL文件ClassLibrary.dll路径,该文件位于...........ClassLibrary\bin\Debug目录下。(2)在ClassLibrary项目创建完成后,系统会自动生成一个名为Class1的类,在“解决方案资源管理器”中的ClassLibrary项目下面的Class1.cs选项上单击鼠标右键,在弹出的菜单中选择“//调用MyClass类的HelloWorld方法。

2024-05-03 11:14:27 1652 1

原创 C#&图像:1.图像区域分割与提取

(5)在SplitImage工程中引用ImageProcessingLibrary工程,并添加ImageProcessingLibrary, System.Drawing命名空间。(2)创建一个名为ImageProcessingLibrary的类库程序,为该工程添加名为ImageProcessing的静态类。(6)在窗体中重写OnPaint事件函数,并在函数中添加绘制原始图像、显示直方图和图像分割与提取后的图像。(3)为ImageProcessing类添加统计直方图的静态函数。

2024-05-02 13:16:34 831 1

原创 c#&Excel:2.写入Excel表 3.读取Excel表

if (indexColumn == 4 && range.Value2 < 60) //标记不合格的学生成绩。string[] fields = new string[]{" 学号 ","姓名","年龄","年级","成绩","性别"};该例首先从数据库aq中读取学生信息表staq,然后将学生信息表中的数据写入Excel表格中。//把学生信息表写入Excel中。//为学生信息表添加列名。

2024-05-02 01:13:13 1294 1

原创 c#&Excel:1.创建并保存Excel表格

(2)在OfficeOperator2项目中添加一个名为ExcelOperator的类,并添加Microsoft.Office.Interop.Excel命名空间。(3)在ExcelOperator类中声明用于操作Excel的对象,并定义其构造函数/定义创建Excel表格函数CreateExcel。(1)创建一个名为OfficeOperator2的类库项目。引用操作Word的.NET类库,如图所示。

2024-05-01 18:01:58 1354

原创 c#&word文档:3.向Word文档中插入表格/4.读取Word文档中表格

(1)在OfficeOperator项目的WordOperator类中定义向Word文档插入换页的函数NewPage。(3)将数据库中的学生信息表添加到Word文档中。(2)在WordOperator类中定义向Word文档插入表格的函数InsertTable。代码中的aq是数据库,staq是数据表格 ,具体参考数据库章节。

2024-05-01 16:11:52 827 1

原创 c#&word文档:1.创建空白Word文档及保存/2.添加页内容...

(1)创建一个名为OfficeOperator的类库项目。引用操作Word的.NET类库(2)定义用于操作Word的类WordOperator1。添加引用Microsoft.Office.Interop.Word命名空间。(3)为WordOperator声明两个操作Word文档的私有对象,在WordOperator的构造函数中创建WordApp, 定义用于创建Word文档的函数CreateWord.代码如下:(4)创建一个名为CreateWord的控制台应用程序。

2024-05-01 14:58:06 482 1

原创 c#&数据库: 11.分组统计学生信息/ 12.视图查询

该例以学生信息表为例,将学生信息按年级和性别分组,统计各年级男生和女生的人数、总成绩和平均成绩,并将查询结果按平均成绩降序排列。(1)创建一个名为StudentGroup的窗体应用程序,为窗体添加一个DataGridView控件(命名为dGVStudent)。

2024-05-01 10:40:47 200

原创 c#&数据库: 10.调用存储过程查询信息,并显示在窗体上

SELECT * from student_info WHERE sexy='女' /*查询语句*/:创建一个windows窗体应用(.NET Framework)程序,为窗体添加一个DataGridView控件。CREATE PROCEDURE dbo.Procedure_GetGirls1 /*存储过程名称*/新建存储过程Procedure_GetGirls1代码。原数据表//右键数据库名,新建查询。

2024-05-01 00:00:40 689 1

原创 c#&数据库: 9.删除和添加新字段/数据更新

首先利用SqlConnection对象连接学生数据库,然后通过SqlCommand对象执行向学生信息表中增加性别字段的SQL语句,接着通过SqlDataAdapter对象查询修改后的学生表记录。此时所有记录的性别字段都为空,先将查询结果填充到数据集,然后通过逐行为数据集表中最后一列赋值,实现为性别字段赋值,接着创建SqlCommandBuilder协调数据集更新与数据库连接,最后调用SqlDataAdapter对象的Update方法实现将数据集的修改更新到数据库中。

2024-04-30 14:46:42 699

原创 c#&数据库: 8.在窗体上显示学生信息

首先通过SqlDataAdapter类实现数据的查询,然后将查询结果填充到DataSet对象中,最后将DataSet对象的Tables[0]绑定到数据表视图控件DataGridView的DataSource属性上。此时查询结果便显示在了窗体的DataGridView控件中。以上一章学生信息表为例,首先将查询的学生信息存储到数据集中,然后将数据集与数据显示控件绑定,从而实现学生信息在窗体上的显示。方法执行了一些必要的初始化操作.注意,你不需要(也不应该)在窗体的构造函数中直接调用。这行代码调用了基类中的。

2024-04-30 01:52:24 517

原创 c#&数据库: 6.查询成绩合格的学生/7.输出全部学生信息

本实例代码主要利用SQL语句实现对数据表的查询。前面的实例中所调用的都是ExecuteNonQuery方法,该方法在SQL语句无返回结果时使用,而本实例中的SQL语句需要返回多条数据表记录,因此,通过调用ExecuteReader方法来返回一个SqlDataReader对象,通过该对象的Read方法可以实现对查询结果中的多条记录进行逐一访问。查询上图成绩合格的学生信息,并将信息从控制台输出。

2024-04-30 01:11:14 285

原创 c#&数据库: 5.删除指定的学生信息

本实例代码主要利用SQL语句来删除满足指定条件的数据表记录。首先通过SqlConnection对象连接数据库,然后通过SqlCommand对象执行删除记录的SQL语句。将成绩为100分的学生信息从学生信息表中删除。

2024-04-30 00:55:00 256

原创 c#&数据库: 4.修改学生成绩

将4年级的学生成绩全部修改为100分,。

2024-04-30 00:39:18 319

原创 c#&数据库:3.插入学生信息

【代码】3.插入学生信息。

2024-04-30 00:18:35 176

原创 c#&数据库:2. 创建学生信息表

【代码】2. 创建学生信息表。

2024-04-30 00:01:10 451

原创 c#&数据库:1.c#创建并连接数据库

安装软件:SQL Server Management Studio Management Studio。

2024-04-29 22:49:38 556

空空如也

空空如也

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

TA关注的人

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