- 博客(123)
- 资源 (24)
- 收藏
- 关注
原创 Unity3d数字化看板-多关节机器人运动控制
机械手运动控制主要是关节的旋转,通过控制多个关节的角度,实现对机械手的同步控制机械手运动控制,可以分解为多个关节的运动,下一关节是跟随在上一关节运动,在处理模型的时候将下一关节作为子物体挂在上一关节下,通过控制多个关节的角度,达到机械手的运动同步。模型示例如下(模型是从网上下载)
2023-04-24 22:51:28 5619 17
原创 ModbusTCP协议报文解析
报文格式交互(通信)标识:2个字节 为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文。协议标识:2个字节 表示该条指令遵循ModbusTCP协议,一般都为00 00报文长度:2个字节 表示后面数据的长度,有几个字节,高字节在前(前六位Modbus/TCP协议不同功能码通用)设备标识 :1个字节 设备地址,这个可以用于局域网里面的具体的地址,如果目标机器有固定ip,这个就不起作用,直接上写成 00功能码:1个字节 功能码在modbus协议用于表示信息帧的功能....
2022-11-23 20:46:12 30597 5
原创 C#实现数据采集系统-数据反写(3)ModbusTcp写入数据模块开发
线圈基本都是单个写入,这里就使用05功能码寄存器写入可能多个同时写入,如int32,float等,需要四个字节,则需要2个寄存器,并且数据的两个寄存器是连续的,,其他的如Int64,double,则需要4个寄存器,我们可以一起写入调高效率。跟读报文一样,定义一个写入报文的头,前10个报文,再接收到写入数据是再在后面接上对应的数据字段然后再初始化的时候修改从站地址。
2024-08-23 11:02:44 1190
原创 C#实现数据采集系统-数据反写(2)消息内容处理和写入通信类队列
在ModbusTcp通信类中,添加一个写入队列和写入方法,写入点位先添加在队列中,然后再读数据间隙中,实现写入。处理消息,将消息转换成对应点位和值,然后调用modbustcp的写入方法。然后在启动的时候,订阅各个设备ID的写入主题,添加控制方法。用于存储每个设备的通信类,使用键值对。存储设备ID和通信类,用于快速查找。实现消息订阅方法-设备控制。
2024-08-22 23:04:57 448
原创 C#实现数据采集系统-数据反写(1)MQTT订阅接收消息
订阅方法实现:订阅主题,添加到_topicActions,如果已经连接,则直接订阅,没有连接,则等待连上的时候自动订阅,增加锁来确保订阅成功。然后需要一个键值对用于存储这个关系。在连接方法中,添加订阅。
2024-08-22 22:51:37 812
原创 C#实现数据采集系统-多设备采集
数据采集系统在网络环境下,性能足够,可以实现1对多采集,需要支持多个设备进行同时采集功能,现在就开发多设备采集功能。
2024-08-21 17:46:00 659
原创 C#实现数据采集系统-周期配置、功能配置
之前采集、推送周期都是写死的现在就是新增一个需求,需要能够配置采集时间,比如我想1s采集一次,5s采集一次或者1分钟采集一次,然后定时推送也是,如此,我想设置推送的时间;还有定时推送和变化推送功能我可以配置是否开启关闭,有时候我只需要一种推送功能即可这样我们就可以在配置中增加这几个个参数。
2024-08-20 08:47:04 687
原创 visual studio使用技巧:快速生成Json、XML对应类
在项目中经常用到json或者xml作为配置文件,进行序列化和反序列化就需要有对应的类,重新写一遍类就比较麻烦,这里就讲一下通过visual studio快速生成json或者xml对应类型的方法。
2024-08-19 10:39:39 743
原创 C#实现数据采集系统-系统优化服务封装
现在我们调用modbustcp和mqtt都直接在Program,所有加载和功能都混合在一起,比较难以维护类似asp.net core项目的Program.cs代码如下,构建服务配置和启动要实现的效果,Main方法中就是一个服务启动,只需要几行代码。
2024-08-02 10:14:58 221
原创 C#实现数据采集系统-配置文件化
配置信息ip端口,还有点位信息,什么的都是直接在代码里直接写死,添加点位,修改配置,比较麻烦,每次修改都需要重新生成打包。所以将这些配置都改成配置文件,这样只需要修改配置文件,程序无须修改,即可更新。配置代码:如果我们有100个采集,一个个去添加就很累,或者ip地址改了,都要重新改了打包发布再部署所以将这些属性和信息都改成配置文件。
2024-08-02 09:43:48 427
原创 C#实现数据采集系统-modbustcp数据通知
在ModbusTcp模块中已经能够获取到正确的plc值,接下来做的就是如何让外部调用的程序获取到相关的数据,主要就是两种方法:通过对象属性进行共享;通过事件进行推送。
2024-07-26 23:29:30 353
原创 C#实现数据采集系统-Tcp粘包处理
Tcp通信中会出现粘包的情况,Tcp数据不是完全一收一发,而是会将接收到数据存在一个接收缓冲区,等到调用接收的把数据从缓冲区取出来大部分时候,我们收发消息频率不高,看上去就是发一条,收一条,完整数据;理论上,接收一次,是会出现各种情况,粘包的几种情况示例:比如 modbustcp响应报文,我们查询三次,正常是收到三条下面这样报文123。
2024-07-26 23:19:06 221
原创 C#实现数据采集系统-字节序处理和代码优化
C# 小端模式modbustcp中,寄存器都是两个字节,寄存器内部两个字节都是大端存储,如果需要存储int32,float,double等数据,则需要2个或者更多寄存器,目前大部分plc在处理时,寄存器之间都是采用小端存储,寄存器里是大端,形成了小大端模式,就是CD AB,GHEFCDAB大端 ABCD小端DCBA小大端模式CD ABC#中,都是小端模式存储,所以处理就是CDAB→DCBA,GHEFCDAB→HGFEDCBA。
2024-07-17 18:40:35 229
原创 C#实现数据采集系统-查询报文处理和响应报文分析处理
线圈:一个字节可以表示8个地址,1-8个线圈只需要1个字节,9-16个两个字节,以此类推。循环所有点位信息,然后修改发送报文的功能码,起始地址,读寄存器数量发送报文。从格式看,前9位格式和长度是一样的,从第十位数据位开始长度不一样。数据总长可以根据查询报文中,查询数量来计算出。FF-1111 1111 一个字节表示八位。可以看到读寄存器跟线圈报文长度是不一样的。寄存器:需要2个字节来表示一个寄存器。计算公式:查询数量/8的整数+1;计算公式:查询数量x2。
2024-07-17 18:37:41 290
原创 C#实现数据采集系统-ModbusTCP查询报文分析和实现、通信实现、测试项目
Modbus是工业通信协议中广泛使用的协议,大部分设备都支持。Modbus TCP是一种基于TCP/IP网络的工业通信协议,它是Modbus协议的一种变种,专门设计用于在网络上传输数据。先定义一个设备链路类DeviceLink,用于配置设备的信息,ip、端口然后根据上面读的发送报文,可以得出,设备配置还需要一个从站地址set;set;/// 从站地址set;} = 1;然后定义一个寄存器点位类RegisterPoint,用于定义数据对象,对应PLC中的寄存器
2024-07-17 18:36:24 423
原创 C#实现数据采集系统-实现功能介绍
我们这里主要使用C#( .Net 6)来实现一个数据采集系统,从0到1搭建数据采集系统,从系统分析,功能拆解,到一一实现,然后还有C#进阶的技术讲解。
2024-07-17 18:34:56 1550
原创 VS code设置默认终端为cmd
将default profile设置为cmd(Command Prompt)终端+号右侧下拉菜单,“配置终端设置。终端默认添加的就是cmd。
2024-07-15 22:16:47 400
原创 在C#/Net中使用Mqtt
Nuget包安装-MQTTnet添加命名空间创建一个MqttClient创建连接发送消息先创建一个mqtt消息,填入主题(Topic),消息内容(PayloadSegment),然后使用方法发送在mqttx中订阅对应主题,就能收到订阅主题中,表示通配符,说明该分类下testtpoic/的主题都会订阅。订阅一个主题。
2024-07-01 16:52:30 836
原创 mqtt介绍和环境安装
MQTT是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、高延迟或不可靠的网络而设计。下载一个开源的emqx服务器和mqttx客户端工具。
2024-07-01 16:40:38 364
原创 ModbusRTU协议报文解析
ModbusRTU协议报文解析:1个字节 指定目标设备地址(从站地址):1个字节 功能码在modbus协议用于表示信息帧的功能,例如读取线圈状态、读取寄存器等。N个字节 后面数据根据不同功能码不同。:循环冗余校验码,用于检测报文完整性和数据错误
2024-06-24 23:39:16 3681
原创 工业数字孪生:智能制造的新引擎
数字孪生技术作为智能制造的重要支撑技术,正在全球范围内快速发展并得到广泛应用。随着技术的不断成熟和创新,数字孪生将在推动制造业数字化转型、提升生产效率、降低运营成本等方面发挥越来越重要的作用。未来,数字孪生技术有望成为制造业不可或缺的一部分,引领制造业进入一个全新的智能化时代。
2024-06-23 12:12:42 1008
原创 WPF文本绑定显示格式StringFormat设置-特殊格式时间日期和多数据绑定
在Textblock等文本控件中,我们经常要显示一些日期和时间,默认显示的日期,不是我们想要的,所以需要自定义格式,还有多个数据可能需要绑定到一个文本中,都可以通过设置`StringFormat`来实现
2024-06-21 16:32:40 938
原创 WPF文本绑定显示格式StringFormat设置-数值类型处理
在Textblock等文本控件中,我们经常要绑定一些数据类型,但是我们希望显示的时候能够按照我们想要的格式去显示,比如增加文本前缀,后面加单位,显示百分号等等,这种就需要对绑定格式进行处理本文主要介绍一些数值类型的格式处理。
2024-06-21 15:52:05 1973
原创 Net开源项目推荐-WPF控件样式篇
WPF控件库,比较常用的WPF开源控件库,对WPF原有控件样式都进行了重写和扩展,也增加了许多特别的控件,非常好用。wpf-uidesign使用WPF创建的一些UI设计案例,包含了8套设计UI可供选择,直接可用。VS编辑器风格的WPF 文档和工具窗口布局容器,标签页可自由拖动,停靠的布局容器,非常好用。WPFDevelopers控件库,包括各类特殊的控件,并且持续更新中。WPF中的曲线库,有各种曲线的控件。
2024-06-20 10:03:39 656 1
原创 IIS代理配置-反向代理
前后端分离项目,前端在开发中使用proxy代理解决跨域问题,打包之后无效。未配置前无法访问部署环境为windows +IIS,要在iis设置反向代理。
2024-06-20 08:29:56 2802
原创 C#开发-集合使用和技巧(八)集合中的排序Sort、OrderBy、OrderByDescending
在C#中,List类提供了多种方法来进行排序,最常用的是Sort方法和中提供的扩展方法OrderBy/OrderByDescending`方法。这些方法可以按照特定的顺序重新排列列表中的元素。
2024-06-19 23:53:24 848
原创 C#开发-集合使用和技巧(七)分组方法GroupBy的使用
GroupBy是 C# 中的一个 LINQ 扩展方法,用于根据指定的键将序列中的元素分组。它可以根据提供的键函数将数据分割成多个组,每组包含具有相同键的元素。`GroupBy`也是一个在集合用比较常用的方法,也是比较好用的,适用于对序列中的元素进行分组,他有多种重载,可以实现不同的功能
2024-06-19 23:26:41 2592 1
原创 C#开发-集合使用和技巧(六)特殊转换方法SelectMany的介绍和用法
SelectMany方法在C#中用于将集合中的元素转换为其他类型的集合,并将这些集合扁平化为一个单一的序列。它是LINQ的一部分,允许你在一个序列上进行投影和过滤操作,然后将结果合并成一个序列。
2024-06-18 15:02:14 858
原创 C#唯一进程的处理Winform/WPF
在C#客户端(Winform/WPF)开发过程中,有的情况需要确保程序的唯一性,如果启动同时启动同一个程序多次,可能导致数据,通信等异常。下面有两种方法来实现唯一进程。1.使用进程(Process)判断;2.使用互斥体(Metux)实现
2024-06-18 14:23:46 444
原创 C#开发-集合使用和技巧(五)集合中的转换方法
在C#中,`Select`, `ToList`, 和 `ToArray` 都是用于集合转换的方法,它们各自有不同的用途和适用场景。Select用于转换集合里面对象的类型,从一个类型转变到另一个类型ToList和ToArray主要用于集合类型转换,一般查询方法返回类型,需要这两个方法转换到对应可操作的集合,这两个方法一般是配合其他方法使用,当然也可以用于List与数组互相转换。
2024-06-17 17:58:46 872
原创 C#特性-CallerMemberName、CallerFilePath和CallerLineNumber的介绍和应用
在csharp中,`CallerMemberName`, `CallerFilePath`, 和 `CallerLineNumber` 是编译时常量,它们是csharp 5.0引入的特性,用于提供有关调用堆栈的信息,通常用于日志记录和调试。这些特性可以自动填充方法的参数,无需显式传递信息。
2024-06-17 15:50:55 725
原创 C#开发-集合使用和技巧(四)集合中常用的查询方法
本篇介绍集合的各种查询方法和使用主要介绍条件查询Where,单个对象查询First/FirstOrDefault、功能查询All、Any、Count等,结合代码说明和应用场景详细介绍
2024-06-15 23:35:38 285
原创 C#开发-集合使用和技巧(三)集合扩展方法介绍
这些方法允许我们以声明式的方式处理集合数据。下面是Enumerable方法描述类别All测试序列中的所有元素是否满足指定的条件。查询方法Any检查序列是否包含任何元素,或者满足指定条件的元素。查询方法Average计算序列中所有元素的平均值。数值聚合Concat连接两个序列。操作方法Contains检查序列中是否包含某个元素。查询方法Count返回序列中元素的数量。查询方法Distinct返回序列中不同的元素。操作方法ElementAt返回序列中指定位置的元素。查询方法Except。
2024-06-15 22:58:29 195
原创 C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用
Lambda 表达式在 csharp 中是一种简洁的方式来表示匿名方法(也称为匿名函数)。Lambda 表达式的语法使用=>操作符,左侧是输入参数,右侧主体是表达式或代码块。Lambda 表达式主要用于简化 LINQ 查询和事件处理代码,在开发过程中,可以很好的简化代码。Lambda 表达式是 C# 中强大的功能特性,用于简化代码、提高可读性,特别是在 LINQ 查询和事件处理方面。它们的语法简单而灵活,能很好地提高代码的简洁性和可维护性。
2024-06-14 23:14:04 778
原创 C#开发-集合使用和技巧(一)常用集合和方法介绍
集合是C#中用于存储和管理一组对象的数据结构。它们提供了比基本数据类型更灵活和强大的功能。集合可以动态调整大小,这意味着您不需要预先知道集合中将要存储多少元素。在C#中,集合通常指的是命名空间下的类,这些类允许您存储强类型的元素集合。基本的集合都在命名空间中,该命名空间下面有几个命名空间,对集合进行分类通用集合,包含用于定义泛型集合的接口和类,可允许用户创建强类型集合。List等线程安全的集合类,提供几个线程安全的集合类,主要用于多个线程访问一个集合的情况,例如等。
2024-06-14 16:02:45 751
C# WPF MVVM的Stylet框架使用示例
2024-07-21
c#操作excel NPOI使用手册
2024-07-09
stylet中文文档翻译
2024-07-09
Everything-1.4.1.1024的32位
2024-07-09
FSCapture抓屏工具-免安装版
2024-07-09
chrome插件 OneTabV1.33
2024-07-09
C# 集合一系列扩展方法使用示例
2024-06-17
WPF的MVVM模式下的命令绑定示例
2023-02-23
WPF的MVVM模式各种基础的绑定的示例
2023-02-22
WPF的MVVM简单使用-绑定和命令示例
2023-02-21
Modbustcp通信接口文档模板
2023-02-15
net framework从4.6到4.8.1不同版本的开发者工具包和简体中文语言包
2023-01-24
net framework4.0和4.5开发包(用于visual studio 2022 安装net旧版本)
2023-01-10
自己搭建IOC容器(C#)
2022-12-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人