C#实现数据采集系统-配置文件化

系统优化-配置

配置信息ip端口,还有点位信息,什么的都是直接在代码里直接写死,添加点位,修改配置,比较麻烦,每次修改都需要重新生成打包。
所以将这些配置都改成配置文件,这样只需要修改配置文件,程序无须修改,即可更新。
配置代码:
在这里插入图片描述

如果我们有100个采集,一个个去添加就很累,或者ip地址改了,都要重新改了打包发布再部署

所以将这些属性和信息都改成配置文件

主要的配置信息

设备信息:

设备信息:设备ID

网络信息:IP、端口

协议配置信息:从站地址

Mqtt配置

服务器Ip、端口

用户名、密码

点位表

点ID
寄存器类型
地址
长度(寄存器数量)
数据类型

配置文件创建和编辑

由此我们添加两个文件

json信息配置

一个json文件,用于配置参数等信息,主要是配置设备信息和Mqtt服务器配置

{
  "DeviceLink": {
    "UID": "device01",
    "Ip": "127.0.0.1",
    "Port": 502,
    "SlaveId": 1
  },
  "MqttConfig": {
    "Ip": "127.0.0.1",
    "Port": 1883,
    "Username": "admin",
    "Password": "12345"
  }
}

点位配置表csv

另一个csv表格文件,用于加载数据点位信息,然后编写一些点位信息

示例数据如下:

UIDNameTypeRegisterTypeAddressLength
0011号数据点Int16HoldingRegister01
0022号数据点Int16HoldingRegister11
0033号数据点Int16HoldingRegister21
0044号数据点Int16HoldingRegister31
0055号数据点Int16HoldingRegister41
0066号数据点Int16HoldingRegister51
IO11号开关状态boolCoil01
IO22号开关状态boolCoil11
IO33号开关状态boolCoil21
IO44号开关状态boolCoil31
IO55号开关状态boolCoil41
IO66号开关状态boolCoil51
IO77号开关状态boolCoil61
IO88号开关状态boolCoil71
IO99号开关状态boolCoil81
IO1010号开关状态boolCoil91

配置文件导入

复制到主程序中Config文件夹
在这里插入图片描述

然后设置为复制到输出目录
在这里插入图片描述

MqttControllr参数优化

后续还要加入用户名Username 和密码Password 等一系列参数,一个个传入就导致参数传入过多,搞一个专门的配置类用于存储和加载配置信息

 public class MqttConfig
 {
     public string Ip { get; set; }

     public int Port { get; set; } = 1883;

     public string Username { get; set; } = "admin";

     public string Password { get; set; } = "12345";

     public string ClientId { get; set; }
 }

创建主配置类

添加一个跟配置文件一样的配置类

需注意字段名称和大小写要跟json文件对上

 public class DAqOption
 {
     public DeviceLink DeviceLink { get; set; }

     public MqttConfig MqttConfig { get; set; }
 }

配置文件加载

主配置文件反序列化

使用System.Text.Json进行反序列化操作
先将json文件读入到

 var str = File.ReadAllText("Config\\Config.json");
 var config = JsonSerializer.Deserialize<DAqOption>(str);

测试结果:
在这里插入图片描述

数据点位表加载

csv文件以逗号分隔,一行行读入,然后处理,复制给类对象。
这里需要注意,中文的编码问题

 var lines = File.ReadAllLines("Config\\AllPoint.csv", Encoding.UTF8).ToList();
 lines.RemoveAt(0);
 List<RegisterPoint> points = new List<RegisterPoint>();
 foreach (var line in lines)
 {
     var values = line.Split(',');
     var point = new RegisterPoint()
     {
         UID = values[0],
         Name = values[1],
         Type = Type.GetType("System." + values[2]),
         RegisterType = values[3],
         Address = int.Parse(values[4]),
         Length = int.Parse(values[5]),
     };
     points.Add(point);
 }

后面再加上正常启动的代码

     MqttControllor = new MqttControllor(config.MqttConfig);

     ModbusTcp modbusTcp = new ModbusTcp(deviceLink, points);
     modbusTcp.DoMonitor();
     modbusTcp.ValueUpdated += ModbusTcp_ValueUpdated;
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Soukey采摘网站数据采集软件是一款基于.Net平台的开源软件,也是网站数据采集软件类型中唯一一款开源软件。尽管Soukey采摘开源,但并不会影响软件功能的提供,甚至要比一些商用软件的功能还要丰富。Soukey采摘当前提供的主要功能如下: 1. 多任务多线程数据采集,支持POST方式; 2. 可采集Ajax页面; 3. 支持Cookie,支持手工登录采集数据; 4. 支持采集事务; 5. 支持数据自动及手工导出,导出格式为:文本、Excel、Access、MSSql、Mysql等; 6. 支持在线发布数据; 7. 支持导航网址的采集,导航深度不限; 8. 支持自动翻页; 9. 支持文件下载,可以采集图片、Flash及其他文件; 10. 支持采集结果数据的加工,包括替换、附前缀后缀、截取等操作,支持正则; 11. 采集网址定义不仅支持基本参数定义,也可外接字典数据作为网址参数,进行数据采集; 12. 支持一个任务多实例运行; 13. 提供计划任务,计划任务支持Soukey采集任务、外部可执行文件任务、数据库存储过程任务; 14. 计划任务执行周期支持每天、每周及自定义运行间隔;最小单位为:半小时; 15. 支持任务触发器,即可在采集任务完成后,自动触发执行其他任务(包括可执行文件或存储过程)。 16. 完善的日志功能:系统日志、任务执行日志、出错日志等等; 17. 系统提供MINI浏览器可用于捕获Cookie或POST数据; Soukey采摘并不限制您是否商用此软件,源码完全开放,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海盗Sharp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值