- 博客(271)
- 资源 (15)
- 收藏
- 关注
原创 在Java 中 利用Milo通信库,实现OPCUA客户端,并生成证书
程序结构:配置文件resources:opcua.properties西门子PLC端口号为4840,kepserver为49320它对应的实体类调用:opcnode.properties:opcnode.index,西门子PLC为3,kepserver为2它对应的实体类调用:生成证书类:KeyStoreLoaderOPCUA订阅,写入,读取等工具类:ClientRunner:ClientHandler:生成证书,读,写,验证等操作:开启定时器,订阅模式读取变量:
2023-02-16 20:09:03 2164 4
原创 使用Nmodbus4 使用RTU和TCP两种方式读取数据,博途ModbusTCP设置,客户端和服务器端
建立ModbusTCP通讯库using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Modbus.Device;using System.Net.Sockets;using thinger.cn.DataConvertHelper;using System.Net;namespace NModbusHelper
2022-01-06 05:22:13 11660 2
原创 用C# 的System.Threading.Channels 模拟2台PLC, 用消息队列实现异步任务之间的通信
【代码】用C# 的System.Threading.Channels 模拟2台PLC, 用消息队列实现异步任务之间的通信。
2024-05-20 00:19:08 238
原创 在aspNetCore webApi中使用System.Threading.Channels 建立一个高性能的Plc通信库
注入到Ioc中的Class。
2024-05-19 21:07:49 288
原创 在aspNetCore中 使用System.Text.Json的定制功能, 将定制化的json返回给前端
【代码】在aspNetCore中 使用System.Text.Json的定制功能, 将定制化的json返回给前端。
2024-05-19 20:58:55 156
原创 在C# 中 使用 System.Threading.Channels 建立一个高性能的TcpServer
viewModel: public partial class TcpServerChannelViewModel : ObservableObject { private Socket socketServer = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
2024-05-18 01:38:44 1116
原创 .net8 net8webapi中 KeyedService 和Wpf 的 prism 框架 KeyedService 的比较
【代码】.net8 net8webapi中 KeyedService 和Wpf 的 prism 框架 KeyedService 的比较。
2024-05-13 09:24:59 210
原创 C# , .netWebApi, WPF 用特性实现类似Java 的Ioc 自动装配@Component
之前用接口实现了自动注册IOC, 总是觉得美中不足, 毕竟没有真正实现用注解/特性实现自动注入, 这次我们来实现一个用特性注入Ioc的扩展方法.写C# 一直很羡慕Java的@Autowired 自动装配. 因为C# 必须手动在Ioc里注册。
2023-11-11 03:47:51 1599
原创 C# , .netWebApi 用接口实现类似Java 的Ioc 自动装配@Autowired
写C# 一直很羡慕Java的@Autowired 自动装配. 因为C# 必须手动在Ioc里注册,这样, 凡是实现接口IScoped , ISingleton 的类都在Ioc中自动注册了。
2023-10-15 23:35:04 1115
原创 用wpf替代winform 解决PLC数据量过大页面卡顿的问题
winform 由于不是数据驱动, 页面想刷新数据必须刷新控件, wpf则不用. 可以利用wpf 的数据绑定和IOC, 页面中的消息传递, itemscontrol 实现大量数据刷新, 上位机页面不卡顿代码如下:<Window x:Class="NavTest.Views.NewMainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas
2023-10-13 12:28:58 1248
原创 .netCoreWebAPI中, 使用IHttpClientFactory 避免端口号被耗尽
【代码】.netCoreWebAPI中, 使用IHttpClientFactory 避免端口号被耗尽。
2023-10-08 07:27:30 147
原创 .net6 WebApi使用工厂模式+IOC
Impl实现类要显式的调用父类(抽象类的)构造函数, 所以要写base(db). 因为db已经在子类中的构造函数中定义过了, 这时base 就不需要写参数类型了。按照泛型接口-抽象类-Impl实现。Controller中调用。
2023-10-07 00:01:30 560
原创 .netCore用DispatchProxy实现动态代理
然后,通过调用 MyProxy.Create 方法,你可以创建一个代理对象,该对象实现了你指定的接口或类,并且会拦截方法调用并执行你的逻辑。DispatchProxy 允许你在运行时创建一个代理对象,该代理对象可以拦截对其所代理的对象的方法调用,并在方法调用前后执行自定义的逻辑。当你使用动态代理时,你可以创建一个中间对象(代理对象),该对象可以拦截对另一个对象(目标对象)的方法调用,并在方法调用前后执行自定义的逻辑。它的作用是生成一个代理类,该代理类实现了一个接口,并在接口的方法调用时执行自定义的操作。
2023-10-06 00:23:26 502
原创 WPF中, 如何将控件的触发事件绑定到ViewModel
在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做?带闪电符号的触发事件实现viewModel绑定前端触发事件的写法: <DataGrid x:Name="myDataGrid" AlternationCou
2023-10-05 16:26:19 2479
原创 2分钟讲清楚C#的委托, C语言的函数指针,Java的函数式接口
委托的意义在于, 它可以将函数封装成可以像变量 int, string这样的类型传入到另外的函数中, 例如函数int Test(int a, int b, Calculate c)定义一个最简单的委托 delegate int Calculate(int a, int b);换成C语言的 typedef int (*Calculate)(int a, int b)这大大提高了函数的功能和可扩展性, 可以在不改变Test函数的参数的同时,很多人不知道, C# 的委托, 和C语言的函数指针是一个东西。
2023-09-02 14:25:08 866
原创 Kuka机器人设计通用码垛程序
1, 再config中定义层数cengshu , 每层码垛的个数(码垛的次数)cishu , 每层的高度levelHeight , 码垛放置点的集合putPoint[,] ,预放点1集合prePut1[,], 预放点2集合prePut2[,]
2023-08-27 20:44:50 3799 1
原创 .net6中, 用数据属性事件触发 用httpclient向服务器提交Mes工单
MES开发中, 客户往往会要求 工单开始时记录工艺数据, 工单结束时将这些工艺数据回传到更上一级的WES系统中. 因为MES系统和PLC 是多线程读取, 所以加锁, 事件触发是常用手段.
2023-08-26 23:50:32 682
原创 WPF中实现动态导航
主页面<mah:MetroWindow x:Class="Kx.View.MyMainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" x
2023-06-11 23:45:47 1447
原创 WPF中,利用Livechart使用动态图表
ViewModel利用消息机制从MainViewModel读取PLC的动态数值:using CommunityToolkit.Mvvm.ComponentModel;using CommunityToolkit.Mvvm.Messaging;using CommunityToolkit.Mvvm.Messaging.Messages;using Kx.Service.Entry;using Kx.Utils;using LiveCharts;using LiveCharts.Defaults;
2023-06-11 23:40:11 1390 3
原创 WPF上位机,如何在表格中动态更新数据
如果Student 继承了通知接口 ObservableObject。只能通过自身成员的增加和删除通知WPF的DataGrid。但是ObservableCollection。
2023-06-10 21:09:27 654
原创 用NModbus4 实现Modbus服务器端(从站,Slave,有源码地址)
我们做上位机除了读取PLC,单片机的数据,也经常需要转发数据,将数据转发给BS应用等,这时候一个Modbus服务器就非常有必要了,它简单开源稳定,今天我就用C# 实现一个Modbus服务器。GitHub地址:https://gitee.com/helodoger/my-csharp-code.git。
2023-06-10 20:58:54 1760
原创 如何在.NetFramework下使用c#10.0
C# 10.0 提供了很多高级语法糖和很多方便的特性,例如new(), global using, record等。但是.netFrameWork 只支持到C# 7, 对于做工控,需要调用.netFrameWork非托管代码,无法脱离.netFrameWork的小伙伴们很不友好。今天介绍一下如何在.netFrameWork下使用C# 10.0。可以在某个类中加入以下代码,就完美支持了。第二步,看到了xml配置文件,加入。
2023-06-05 17:33:52 503
原创 使用C# 监控工业相机在文件夹新增的照片,并存储到数据库
工业应用大多依赖于Windows平台,Windows上天然集成了.net运行时,封装简化了win32API,使用C# +Sqlsugar+serialPort 就能轻松实现以上需求。最近接到某电子厂一个需求:检测工件。通过工业相机每次对工件拍3张照片,并通过扫码枪的扫码信号将照片和二维码信息一起存储到数据库。这样的事件监控文件新增,同理还有文件改动,删减等。
2023-05-25 20:50:59 242
原创 在winform中,实现数据驱动的MVVM模式,不刷新控件更新控件
【代码】在winform中,实现数据驱动的MVVM模式,不刷新控件更新控件。
2023-05-07 20:16:14 611 1
原创 springboot中,使用mybatisPlus实现分页查询,条件查询
因为前端需要复合条件的数据和数据数量,java不能返回2个以上的参数,所以封装一个返回值类。mybatisPlus的mapper,Service和Impl。Controller(查询对应 /list)建立一个封装的VO,接收前端返回的数据。
2023-04-26 00:53:45 291
KepServer可以将任何工业设备的通信协议转换为opc协议,然后用OPCAutomation进行上位机数据读写。
2022-07-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人