- 博客(78)
- 收藏
- 关注
原创 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
379
原创 博图v16联合factory io PID仿真
192.168.0.200是电脑虚拟网卡IP地址。192.168.0.12是仿真PLC IP地址。factory io连接IP为电脑虚拟网卡地址。
2024-12-08 17:14:28
221
原创 三菱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
580
原创 汇川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
1875
原创 【无标题】
但因为我们只有 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
365
原创 【无标题】
CANopen 的创始人在设计CANopen时,对其定 义为小网络、控制信号的实时通讯: 报文传输采用CAN标准帧格式。即11bit的ID域,以尽量减小传输时间; 网络控制报文均采用数据最小字节数。比如心跳报文,只有1个字节数据; 实时更新的过程数据无需接收方报文应答。即采用生产消费模型,降低总线负载; 需要接收方确认的配置参数一般都是采用快速单字传输。即 1 个报文最多传送 1 个32字节的参数变量,避免了分帧引起的实时性降低。以上这些定义都是为了节约时间开销,最大限度保证实时性。
2024-05-20 22:54:02
1028
原创 c++句柄
Windows操作系统采用进一步的间接:在进程的地址空间中设一张表,表里头专门保存一些编号和由这个编号对应一个地址,而由那个地址去引用实际的对象,这个编号跟那个地址在数值上没有任何规律性的联系,纯粹是个映射而已。通过使用句柄和句柄表,系统可以在不改变程序代码的情况下重新定位内存块,并将新的地址映射到句柄上。句柄并不是直接指向内存地址的指针,而是一个由系统生成的、具有特定含义的整数值或其他类型的数据。总之,句柄引用内存块的原理是通过操作系统分配的标识符来间接访问内存块,从而实现对内存资源的有效管理和控制。
2024-05-19 14:55:19
790
原创 线程池 ThreadPool
但过多创建线程和销毁线程,会消耗掉大量的内存和CPU资源, 假如某段时间内突然爆发了100个短小的线程,创建和销毁这些线程就会消耗很多时间, 可能比线程本身运行的时间还长。线程池提供若干个固定线程轮流为大量的任务服务,比如用10个 线程轮流执行100个任务,当一个线程完成任务时,并不马上销毁,而是接手另一个任务, 从而减少创建和销毁线程的消耗。在上面的程序中,我们向线程池中排入了100个工作函数,线程池分别独立的完成了 这100个任务。如果这段时间内没有线程完成任务,就创建一个新线程去执行新任务。
2024-05-15 23:24:51
677
原创 c#多态性的应用
继承和多态性是开发复杂软件的关键技术,特别适合于分层软 件系统。操作系统可以设计一个抽象基类,提供 Read()和 Write()两个抽象函数,各种硬件的驱动程序被编写为该抽象基类的 派生类,具体实现Read()和Write()操作。设计一个电脑游戏,游戏中有猪、牛、兔子、青蛙、鸭子等动物,这些动 物都继承于Vertebrata 类(脊椎动物类),Vertebrata类有一个抽象方法Display(),每个动 物都从Vertebrata 类那里继承并重写了Display()方法,用来把动物本身画在屏幕上。
2024-05-14 21:12:13
363
1
原创 【无标题】
是 WPF 框架中用于构建 Windows 桌面应用程序用户界面的命名空间,是 WPF (Windows Presentation Foundation) 框架中的一个核心命名空间,而System是 .NET 框架中更广泛的命名空间,包含了大量基础类。Window是一个命名空间,它包含了 WPF 中大部分常用的用户界面 (UI) 控件。这些控件用于在 WPF 应用程序中创建丰富的用户界面。以下是一些:表示一个用户可以单击以执行操作的按钮。:允许用户输入和编辑单行文本。:用于在 UI 中显示只读文本。与。
2024-05-13 23:44:45
924
原创 C#泛型委托
在C#中,Action 是一个内置的委托(delegate)类型,用于封装没有返回值(即返回类型为 void)的方法。Action 委托有多个重载版本,可以接受不同数量的参数,每个参数可以有不同的类型。关键字用于声明委托(delegates),委托是一种类型安全的函数指针,允许你传递方法作为参数或从方法返回方法。而result 此时为null.下一句:result =func("我是带返回值的Func委托:");是一个类型参数,意味着这个委托可以用于任何类型的方法,只要那个方法有一个参数并且没有返回值。
2024-05-12 17:15:22
768
原创 特性(Attribute)
特性也是以类的方式实现的,一个特性就是一个类。现在我们来自定义一个特性类, 该特性用于描述动物的生物学分类信息。在项目中创建一个名为“AnimalInfoAttribute” 的类。//构造函数//属性:名称set;}①//属性:门set;//属性:纲set;//属性:科set;自定义的特性继承于 Attribute 类,我们在 AnimalInfoAttribute 类中定义了一个构造 函数和四个属性,这四个属性用于记录动物的名字和动物所在的门、纲、科等分类信息。
2024-05-06 01:57:20
752
原创 正则表达式_字符匹配/可选字符集
就这样 的正则表达式。这些位置是普通字符 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
2338
原创 WPF应用程序XAML
当在XAML编辑器中输入Click的时候,按下键盘上的Table键,XAML编辑器上会自动生成代码Click=" ",并在旁边显示一个提示按钮,显示“新建事件处理程序”,双击该按钮之后,系统会自动在MainWindow.xaml.cs文件中生成事件处理函数。XAML语句Button元素中的Content属性对应Button成员的Content属性,表示按钮上显示的内容,同样的对应关系,Background属性表示Button的背景颜色,属性元素语法即用属性元素本身为该属性赋值,表示Button的单击事件,
2024-05-04 15:01:40
969
1
原创 C#&图像:2.图像处理
类库项目ImageProcessingLibrary代码,里面是几种图像处理函数,可以生成DLL文件被其他(下面)项目添加引用。下面是各个独立窗体应用程序,需要添加引用的都是上面的类库(DLL),复制测试这些代码需要自己在。路径下添加命名自己的图片(可参考图像第一章)......项目名\bin\Debug。2.利用中值滤波使图像变得平滑。1.基于差分的边缘检测与提取。4.目标提取与区域标记。
2024-05-04 09:40:08
518
原创 C#简单创建DLL文件并调用
(5)在弹出的“添加引用”窗口中选择“浏览”选项卡,在查找范围下拉列表框中选择ClassLibrary项目所生成的DLL文件ClassLibrary.dll路径,该文件位于...........ClassLibrary\bin\Debug目录下。(2)在ClassLibrary项目创建完成后,系统会自动生成一个名为Class1的类,在“解决方案资源管理器”中的ClassLibrary项目下面的Class1.cs选项上单击鼠标右键,在弹出的菜单中选择“//调用MyClass类的HelloWorld方法。
2024-05-03 11:14:27
1582
1
原创 C#&图像:1.图像区域分割与提取
(5)在SplitImage工程中引用ImageProcessingLibrary工程,并添加ImageProcessingLibrary, System.Drawing命名空间。(2)创建一个名为ImageProcessingLibrary的类库程序,为该工程添加名为ImageProcessing的静态类。(6)在窗体中重写OnPaint事件函数,并在函数中添加绘制原始图像、显示直方图和图像分割与提取后的图像。(3)为ImageProcessing类添加统计直方图的静态函数。
2024-05-02 13:16:34
803
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
1280
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
1330
原创 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
817
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
470
1
原创 c#&数据库: 11.分组统计学生信息/ 12.视图查询
该例以学生信息表为例,将学生信息按年级和性别分组,统计各年级男生和女生的人数、总成绩和平均成绩,并将查询结果按平均成绩降序排列。(1)创建一个名为StudentGroup的窗体应用程序,为窗体添加一个DataGridView控件(命名为dGVStudent)。
2024-05-01 10:40:47
179
原创 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
682
1
原创 c#&数据库: 9.删除和添加新字段/数据更新
首先利用SqlConnection对象连接学生数据库,然后通过SqlCommand对象执行向学生信息表中增加性别字段的SQL语句,接着通过SqlDataAdapter对象查询修改后的学生表记录。此时所有记录的性别字段都为空,先将查询结果填充到数据集,然后通过逐行为数据集表中最后一列赋值,实现为性别字段赋值,接着创建SqlCommandBuilder协调数据集更新与数据库连接,最后调用SqlDataAdapter对象的Update方法实现将数据集的修改更新到数据库中。
2024-04-30 14:46:42
677
原创 c#&数据库: 8.在窗体上显示学生信息
首先通过SqlDataAdapter类实现数据的查询,然后将查询结果填充到DataSet对象中,最后将DataSet对象的Tables[0]绑定到数据表视图控件DataGridView的DataSource属性上。此时查询结果便显示在了窗体的DataGridView控件中。以上一章学生信息表为例,首先将查询的学生信息存储到数据集中,然后将数据集与数据显示控件绑定,从而实现学生信息在窗体上的显示。方法执行了一些必要的初始化操作.注意,你不需要(也不应该)在窗体的构造函数中直接调用。这行代码调用了基类中的。
2024-04-30 01:52:24
498
原创 c#&数据库: 6.查询成绩合格的学生/7.输出全部学生信息
本实例代码主要利用SQL语句实现对数据表的查询。前面的实例中所调用的都是ExecuteNonQuery方法,该方法在SQL语句无返回结果时使用,而本实例中的SQL语句需要返回多条数据表记录,因此,通过调用ExecuteReader方法来返回一个SqlDataReader对象,通过该对象的Read方法可以实现对查询结果中的多条记录进行逐一访问。查询上图成绩合格的学生信息,并将信息从控制台输出。
2024-04-30 01:11:14
277
原创 c#&数据库: 5.删除指定的学生信息
本实例代码主要利用SQL语句来删除满足指定条件的数据表记录。首先通过SqlConnection对象连接数据库,然后通过SqlCommand对象执行删除记录的SQL语句。将成绩为100分的学生信息从学生信息表中删除。
2024-04-30 00:55:00
243
原创 VS Code开发STM32F4xx jlink接口swd模式
下面的代码(已验证),只作为参考,不同情况的更改参照文章末尾链接。: (需要电脑jink连接STM32)
2024-04-26 00:14:40
640
原创 【无标题】
TARGET:最终生成的目标文件名,这里是。DEBUG:是否开启调试模式,设置为1表示开启。OPT:编译优化选项,这里设置为-Og,表示进行基本的优化。BUILD_DIR:构建目录,所有生成的中间文件和最终文件都放在这个目录下。C_SOURCES:C源文件列表。:汇编源文件列表。PREFIX:交叉编译工具的前缀,这里是。CCASCPSZ:分别对应C编译器、汇编器、对象拷贝器和大小查看器。HEXBIN:将ELF文件转换为HEX和BIN格式的命令。
2024-04-15 15:15:48
1130
原创 STM32 M3内核寄存器概念
这样做是为了在子程序执行期间保存这些寄存器的原始值,防止子程序修改这些值影响到调用它的代码。在汇编语言中,函数或子程序通常有一个标签来标识它们的开始,这样其他代码可以跳转到这个标签来执行该函数的代码。LR 在子程序返回时的唯一用处就是提供返回地址,在 返回后,先前保存的返回地址就没有利用价值了,所以。注意:不管在寄存器列表中,寄存器的序号是以什么顺序给出的,汇编器都将把它们升 序排序。指令压入堆栈的寄存器的值。或写作 SP) 的地址寄存器,会自动被调整, 以避免后续的操作破坏先前的数据。
2024-04-02 23:00:04
926
原创 STM32 can通信部分函数注释
can初始化(寄存器操作):uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)配置CAN接收滤波器:void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct)CAN模式初始化函数:u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
2024-03-31 00:53:47
783
原创 eplan部件清单的生成及自建部件库简介
举例,下图有急停按钮符号,要把急停按钮显示在清单里.第一步,已经有了符号,符号有设备标识符.第二步就是。找到部件库文件夹后,复制粘贴,重命名,然后点击上图的三点菜单(放再上图是同样操作是找路径)找到部件库文件夹,在同路径下复制粘贴部件库文件,重命名(有教程点小太阳,)有教程点小太阳新建数据库,原数据库的内容会丢失,谨慎。.出现了标识符为S2的急停按钮,数量为1。,完成后部件数量自动为1.,如果图纸有改动,点左图。下面是对部件的简易补充,,第三部是在符号属性里。部件添加的宏怎来的?
2024-03-29 00:15:06
2207
原创 eplan(自建)符号库不同路径项目下的转移
首先要知道是在之前哪个项目下自建的符号,打开其项目文件名的.edb文件夹,复制其符号库文件到当前项目.edb文件夹下.之前有个项目自建了符号库和符号,后来想用到其他项目(两个项目不在一个文件路径),插入符号,找不到符号库。将项目文件(elk文件)和与项目同名的edb文件复制到EPLAN项目库地址即可。项目文件需放置于EPLAN项目库内,才不会出现此类报错。点击箭头(向左复制),关闭主数据同步。再插入符号时找到了符号库。
2024-03-26 10:20:40
1318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人