自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 制造业数字原生的OT数仓建设

在制造企业数字化转型中,如何实现工厂设备数据的联网采集,如何实现OT/IT的融合,是近年来的热门话题。本人在智能制造IT领域工作多年,去年有机会在某家大型制造企业研究院从事IT/OT融合方面工作和进行OT落地建设,结合最近休息时间的思考,给出基于开源技术打造制造业数字原生的OT数仓建设参考思路。关键词:OT数仓 工业物联网 智能工厂 时序库 数据采集 数字化转型IT/OT融合

2021-09-24 17:32:21 4621 1

原创 C#使用NPOI保存DataGridView数据到EXCEL文件

C# DataGridView可以显示各种表格数据,有时需要将结果保存到EXCEL文件中。开源库NPOI支持EXCEL格式文件的读写,可以使用NPOI编写通用的方法,自动将DataGridView控件表格数据保存到EXCEL文件。

2024-03-12 23:57:28 533

原创 基恩士 KV-8000 PLC通讯简单测试

基恩士 KV-8000 PLC支持多种通讯方式,包括:OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置,Modbus需要调用功能块。默认支持的是上位链路命令,实际是一条条以回车换行结束的ASCII命令串。

2024-02-04 23:32:56 1085 1

原创 C# OMRON PLC FINS TCP协议简单测试

FINS/UDP运用的是一种嵌套格式数据包,即Ethernet报头、IP报头、 UDP报头和FINS帧。一个UDP数据段(FINS 帧)超过1472字节将被分成若干个数据包来传送。分开的UDP数据将在UDP/IP协议层自动组合。通常不须要关注运用 层的数据分段,但是在一个多层 IP网络中1427字节的UDP包可能无法 发送。在这种系统中就须要运用 FINS/TCP方式。ICF为信息控制域,用于标明指令和响应;RSV为系统保留;GCT为网关允许数目;DNA为目的网络号;DA1为目的节点号;

2024-02-04 22:55:39 1199

原创 C# .Net6搭建灵活的RestApi服务器

C# .Net6后支持顶级语句,更简单的RestApi服务支持,可以快速搭建一个极为简洁的Web系统。推荐使用Visual Studio 2022,安装"ASP.NET 和Web开发"组件。

2024-01-23 23:21:03 1229

原创 C#灵活的任务调度组件FluentScheduler

FluentScheduler是一个C#的灵活的任务调度组件,支持各类任务调度。网上有很多演示代码,此处记录下来,方便自己查找。

2024-01-14 22:39:53 610

原创 Access数据库C#读写验证

Access数据库是一个相当古老的文件型数据库,主打一个简单+方便,没有复杂的安装过程,没有庞大的后端管理,整个数据库就是一个文件。可以像普通文件一样复制和修改,可以同时读写。 在小型系统中,还是有较多的存量系统在使用Access数据库,相对简单的文件存储,还是有很大的进步。Access是关系型数据库,数据是结构化存储,数据的关系和格式,相对文件严谨很多。

2024-01-01 17:47:58 753

原创 电表通讯协议DLT645-2007编程

电表有个电力行业推荐标准《DLT645-2007多功能电能表通信协议》,电表都支持,通过该协议读取数据,不同的电表不需要考虑编码格式、数据地址、高低位转换等复杂情况,统一采集。不方便的地方在于这个协议定义得有点小复杂,自己带有各种特殊性定义,编程时一堆的坑。不少电表可以同时支持DLT645-2007和MODBUS RTU协议,但MODBUS协议在不同的电表中,地址都是不同的,需要查阅手册才能搞定。DLT645不同的数据需要发送独立的请求,而Modbus数据地址连接的可以一次读取,各有所长和优势

2023-12-30 23:04:36 876

原创 VC2005 Socket Server封装库

DLL主要通过FishFlyCommServer.def文件暴露接口,形成标准WinAPI。;FishFlyCommServer.def : 声明 DLL 的模块参数。EXPORTS接收部分仅支持少量数据的接收服务端在客户端被关闭和接收到客户端传送的数据时,会产生事件,提供三种处理方式:消息模式(SKTD_MESSAGE)、回调模式(SKTD_CALLBACK)和查询模式(SKTD_QUERY)查询模式用于服务端对客户端的单向传输模式。

2023-12-24 23:16:46 444

原创 指法练习软件TT

这个是90年代后期读书时写的C语言练习软件,模仿当时的打字练习软件。在技能上使用屏幕直接输出,支持彩色,能够在DOS和Windows98的窗口下运行。

2023-12-24 20:22:12 480

原创 c语言的串口封装类和测试模块

C语言基于中断的串口封装类和测试模块

2023-12-24 16:33:05 426

原创 C# Microsoft.ClearScript.V8脚本使用

Microsoft.ClearScript.V8就是一个.NET绑定到Google V8的脚本引擎。它允许.NET应用程序直接从JavaScript代码中调用函数,并返回JavaScript类型。ClearScript.V8可以使用各种JavaScript库(比如jQuery)来提高工作效率,也可以使用它来测试JavaScript代码

2023-05-07 11:23:46 3109

原创 Nginx本地指定网络连接反向代理和netsh机器转发

主机使用两块独立的网卡连接到vlan01和vlan02两个子网,这两个子网均存在一个192.168.31.8的设备,在配置时需要为连接vlan01的网卡配置ip 192.168.31.100,连接vlan02的网卡配置ip 192.168.31.200,这两个IP不要和两个子网内的IP有重复。nginx是一款高性能的Web服务器、反向代理服务器以及电子邮件服务器,采用异步、事件驱动的架构,支持高并发、高吞吐量的请求处理。2. 节省硬件资源:占用内存少,CPU占用率低,可以在低配置的服务器上运行。

2023-05-07 00:03:49 1008

原创 使用Dism++和360安全卫士搞定Windows10离线升级

Windows10有很多版本,常见的由1903、1909、20H1、21H2等,在离线状态下,很难下载到匹配的升级补丁。网上可以找到的版本为WSUSOfflineUpdate_V12.6.1,下载后选择对应的版本,执行总是中途终止,也可能与本人使用的网络有关。我这使用的是默认安装,在C:\360Downloads\Software\漏洞补丁目录下,有这些补丁的安装包,采用的是cab格式。第4步收集的补丁,和Dism++工具一起复制到带更新的不能联网机器上,打开Dism++,选中更新,即可完成离线升级。

2023-03-31 22:33:49 3073

原创 TDengine 3.0 写入测试

开启4线程或8线程时,写入速度约2.5W/S。写入过程中Taos CPU占用较低,客户端CPU占用较高。测试环境:4C8G,Win,TDengine-server-3.0.3.0-Windows-x64,VS2022+.Net6.0。TDengine 3.0发布已经一段时间,最近在资源受限的硬件上,想测试一下是否可以满足需求。使用的连接器是官方提供就的TDengine.Connector。

2023-03-21 22:34:05 315

原创 Windows下使用Inpout库直接读写IO设备端口

Windows2000以后,随着系统安全性的提高和驱动机制的改变,设备的I/O操作需要ring0权限,在应用的ring3已经很难使用。早期有WinIo库流行过一段时间,最近有个特殊的需求要在Win7/Win2019/Win10下操作I/O,发现WinIo已经不好使,即使后面更新的WinIo3.0也有驱动签名的问题,不容易使用。后来网上找到了开源的Inpout库,有32位和64为版本,仅安装时需要管理员权限,使用时普通权限即可,非常方便。

2023-03-18 22:27:37 1085

原创 C#开发OPC DA客户端的服务器状态处理

C#开发OPC DA客户端,最简单的方法是使用OpcRcw.Comn.dll,OpcRcw.Da.dll封装的API进行。如何使用C#开发OPC DA Client程序,网上有很多例子,包括各大自动化厂商和OPC服务器厂商都带有相关的示例,本文仅仅讨论如何处理与OPC服务器的连接状态问题。

2023-03-16 23:53:41 985

原创 C# 使用MQTTnet 4.1 Client通讯异常检测失效处理

C#下的MQTTnet client不能有效检测到网络的异常断开,使用PingAsync() 可以更安全的解决问题

2023-03-15 23:27:21 1246

原创 C# Roslyn编写脚本数据交互示例

Java中的Groovy嵌入式脚本,在C#中类似的实现,找到了Roslyn,入手简单,和原生的C#一样强大,可以快速使用。本文尝试用Demo实现脚本和本体进程之间使用API进行数据交换

2023-02-19 15:47:29 905 1

原创 C# 使用NModbus 多Slave站编程方法

但NModbus4已经7年多没有更新,测试发现读取数据时,如果长度超出Modbus协议约束的长度,会导致异常造成服务退出,而且这个异常是应用层拦截和屏蔽不了。实际应用中,可以读完一个仪表的数据,然后分类(bool和其他,其他包括word、int、float等)写入,同类的一次更新完,使用也比较方便。实际应用中,常常有将各种RS232、RS485等设备联网,供远程服务器读取的需求,这是采用一台边缘的转换网关,连接多台设备,然后转换为Modbus是一个不错的方案。

2022-11-24 22:23:53 3175

原创 GE IFix OPC服务分析

GE iFix3.5/5.5组态软件,仅提供OPC DA服务,不支持OPC UA。本文对如何读取iFix的OPC数据项进行简单介绍。 iFix的OPC DA服务,在安装好之后枚举时可以看到3个,正确的ProgId是“Intellution.OPCiFIX.1”。 OPC接口支持情况如下:从图上可以看出,iFix OPC DA仅支持OPC2.0接口,不支持3.0接口。数据浏览方面,对数据按类型进行了分类,类型下面是具体的点(对象),每个点有几十个数据属性,表现在OPC接口中,就是一个有效点有几十个相关点

2022-10-26 23:22:47 886

原创 艾默生Ovation DCS OPC服务分析

艾默生的OPC DA服务器,使用的ProdId为“Ovation.OPCDAServer.1”,GUID值是{A3ABA03B-6CF7-4b13-A264-FD5AA251CC76}。 OPC DA服务器版本方面,有支持OPC3.0的,也有支持OPC2.0的,影响的主要的OPC3.0支持直接读取变量值。 在OPC的浏览层次方面,采用节点、单元、站、变量、变量属性5层结果,第5层为变量的属性值,不同类型的属性值有所差别,几十到上百不等

2022-10-26 00:02:53 1400

原创 C# 使用NetStandard.Opc.Ua读写OPC UA数据

OPCFoundation.NetStandard.Opc.Ua是OPC基金会发布的开源OPC UA包,提供Client读写库方便读写OPC 服务器数据。使用时有几点需要注意。

2022-09-10 00:26:00 8820 3

原创 WindowsXP Sp3 OPC DA的DCOM配置

WindowsXP上配置DCOM,支持OPC DA的远程访问。支持WindowsXP和Windows10访问WindowsXP的OPC DA服务器。

2022-08-04 00:14:38 1368

原创 C# MQTTnet 3.1升级到MQTTnet 4.0 Client编程变化

MQTTnet的C#版的开源MQTT通讯库,支持MQTTServer和Client,并提供各种类型的连接方法Demo。MQTTnet库3.1升级到4.0,并不完全兼容,在连接方式构建、事件订阅等方面需要修改。

2022-07-17 18:52:15 7700 4

原创 C#使用NModbus4读写Modbus数据

这些数据怎么存放,高低位怎么对齐,就产生了所谓的ABCD、CDAB等转换,这个Master与Slave一致就可以。Int32等类型数据更新时,需要同时对多个存储地址进行更新,而master可能还在高速并发读数据,需要注意使用一个同步锁,避免数据更新一半就被读取,产生数据不一致问题。推进使用Unicode编码,首先是与OPC的默认字符串编码格式一致,其次的每个中英文都占用一个地址2个字节,方便计算长度。Modbus是一个免费的协议,协议设计简单,有很多成熟的库支持。在使用文件中,添加引用。......

2022-07-15 07:58:57 4700

原创 Python使用paho.mqtt.client与Mqtt服务器通信示例

MQTT(Message Queuing Telemetry Transport)是一种轻量级的即时通信协议。Paho 是Eclipse的开源 MQTT 客户端项目,提供多种语言的 MQTT 客户端实现,包括 C、C++、C#、Java、Python、JavaScript 等。在Python环境下,Paho MQTT Python客户端由paho-mqtt模块支撑。...

2022-06-25 22:11:45 5253

原创 设备联网数据上传协议设计

1、前言在设备联网建设中,一般通过边缘网关采集设备或SCADA系统数据,然后上传到服务端进行处理。数据如何上传是承上启下的重要一环。早期的数据传输,一般每个报文的长度有限,内容采用二进制编码。目前在工厂内部,IT条件都比较好,更多的是从通用性、易用性和可维护性等方面进行考虑。这时报文一般采用JSON格式,如何设计上传的JSON,本文给出笔者的个人建议。2、来自OPC软件的参考 工控行业有些大名鼎鼎的软件,如KepServer,支持非常多的设备通讯协议,它采用工程、通道、设备和数据...

2022-05-14 12:27:55 757

原创 Python读写Restful Api,解析JSON示例

最近测试Python调用RestfulApi,解析JSON,使用相应的库后,很简单

2022-05-04 22:26:58 1122

原创 TDengine不同数据模型下的存储对比验证

在制造业数字原生的OT数仓建设的补充章节,提到一个多值的模型,即把IoT数据归集为int,float,bool,string,由4个超级表分开存改为1个超级表统一存。在新版的TDengine下,数据字段允许NULL(较早的版本不支持),多几个空的值字段对存储影响可以忽略不计

2022-03-28 00:37:14 7284

原创 TDengine的tdengine-datasource数据显示不全问题

TDengine有 tdengine-datasource可以配合pull和grafana进行系统监控。在使用TDengine2.4以上版本时,数据显示不全,可以通过对脚本的修改来完善。

2022-03-10 20:54:13 1243

原创 涛思数据TDengine now插值问题记录

TDengine 缺省的时间戳是毫秒精度,但通过在 CREATE DATABASE 时传递的 PRECISION 参数就可以支持微秒和纳秒。(从 2.1.5.0 版本开始支持纳秒精度)。在使用过程中如果没有特殊要求一般采用默认值。TDengine内部函数 now 是客户端的当前时间,插入记录时,如果时间戳为 now,插入数据时使用提交这条记录的客户端的当前时间。在使用“插入多条记录”方式写入数据时,不能把第一列的时间戳取值都设为 NOW,否则会导致语句中的多条记录使用相同的时间戳,于是就可能出现相互覆盖

2022-03-05 22:36:58 1482

原创 Vistual Stdio 2022 C# 11新语法备忘

Vistual Stdio 2022 C# 11新语法备忘

2022-02-18 22:25:30 1191

原创 设备联网工作建设方法和步骤

原计划在“制造业数字原生的OT数仓建设”一文完成后,把关于如何开展设备连接的工作快速整理出来,因为各种原因没有沉下心来准备和完成,这里仅把之前列的大纲补充说明,供参考。 设备联网工作人们经常谈到接口对接的复杂性、行业特性等,不同行业差别很大,虽然联网工作没有标准,但还是有套路,可以按一定的方法来推进,实现项目的可控交付。

2022-02-13 14:37:36 5170

原创 Wonderware Historian Servers 操作

工控软件Wonderware System Platform带有Historian实时归档数据库,采用SQL Server+本地文件形式管理和存储归档数据。数据的元数据(包括标签名、说明、采样频率等)存储在SQL Server的Runtime库中,归档的结果数据存储在本地。

2022-02-13 12:25:56 1586

原创 ThinkPad X220安装Centos问题记录

家里有台闲置的ThinkPad X220,想起可以安装一个Centos做个人开发测试服务器,以前通过VMware安装很容易,没想到直接安装折腾了好久。过程记录下来供备查。X220的硬盘,已经升级为NVMe固态盘,安装时出现问题一直在排查这方面原因,陷入思维误区了。Centos可以直接下载,地址:Centos7/8 Downloadhttps://www.centos.org/download/可以选择国内镜像,下载速度还是挺快的。首先试了以前下载的CentOS-8.3.2011-x86_64

2021-09-11 00:27:32 590

原创 dubbo zookeeper Session 0x0 for server 127.0.0.1/<unresolved>:2181

相关组件版本:dubbo 2.7.12zookeeper 3.6.3使用dubbo zookeeper,之前已经测试完毕,记得当时以为Zookeeper连接问题折腾了好久。这次使用,照搬上次的配置,结果报错Session 0x0 for server 127.0.0.1/<unresolved>:2181, unexpected error,完整信息如下:22:40:08.920 [restartedMain] INFO o.a.z.ZooKeeper - [logE

2021-07-24 23:12:08 3283 1

原创 C# JsonConvert 字段映射处理方法

C# Newtonsoft.Json.JsonConvert可以进行序列化处理,有时序列化存在特殊字段,可以通过JsonProperty来处理。Json格式:{ "appName":"PascalMingService", "Timestamp":"2021-07-12 18:47:55.156", "os.name":"Linux", "os.arch":"amd64"}数据类定义如下:class InfoData{ public String appNa

2021-07-12 19:06:29 1313

原创 bootstrap表格传递复杂文本参数问题

在Html前端页面使用bootstrap展示数据,对单元格进行函数调用传递参数时,如果参数串包涵特殊字符,往往会导致调用失败。这时可以考虑用base64编码进行转义。关键部分代码如下:<script th:inline="javascript"> $(function() { var options = { url: xxx, modalName: xxx, columns: [...

2021-07-09 08:36:06 498

原创 centos下dotnet服务启停脚本

以服务PascalMing.RestService.dll服务为例创建dotnet启动脚本vim start.shnohup dotnet PascalMing.RestService.dll --urls "http://10.10.10.11:10086">>log.txt&tail -f log.txt创建停止脚本vim stop.shecho "PascalMing.RestService 进程信息"ps -ef | grep Pasc

2021-07-06 18:18:01 1082 1

VC2005 Socket Server封装库

VC2005 Socket Server封装库

2023-12-24

空空如也

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

TA关注的人

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