Compare commits

...

928 Commits

Author SHA1 Message Date
2248356998 qq.com
20a2e3ff8e 示例 2025-08-25 20:39:26 +08:00
Diego
61a973b1b5 !73 10.11.10 2025-08-25 12:21:12 +00:00
2248356998 qq.com
cbd72e2081 添加文本日志配置json文件 2025-08-22 16:17:25 +08:00
2248356998 qq.com
4e0377b20c 添加文本日志配置json文件 2025-08-22 16:15:54 +08:00
2248356998 qq.com
fd318d3cdc 移除警告项 2025-08-22 16:12:14 +08:00
2248356998 qq.com
515bdb9700 10.11.7 2025-08-21 23:35:12 +08:00
2248356998 qq.com
46c1780017 10.11.6 2025-08-21 22:40:53 +08:00
2248356998 qq.com
fe78a4c3ca 更新依赖库 2025-08-21 22:05:30 +08:00
2248356998 qq.com
2d7effadf9 10.11.4 2025-08-21 21:13:18 +08:00
Diego
346c560f8b !72 更新依赖项 2025-08-21 11:46:58 +00:00
Diego
8e3bd89f61 修改编译项 2025-08-18 17:30:34 +08:00
Diego
6da142d080 10.10.23 2025-08-18 17:03:40 +08:00
2248356998 qq.com
ff7d029e6f 更新依赖 2025-08-14 20:25:00 +08:00
2248356998 qq.com
21b4695683 10.10.19 2025-08-14 05:47:54 +08:00
Diego
02ad494a26 !71 适配远程客户端 2025-08-12 16:00:53 +00:00
2248356998 qq.com
280366e1b2 添加写优先选项,默认false 2025-08-09 13:07:08 +08:00
2248356998 qq.com
6660ce3e34 适配远程管理客户端 2025-08-08 18:01:24 +08:00
2248356998 qq.com
7499162c1a 适配远程管理客户端 2025-08-08 02:51:42 +08:00
2248356998 qq.com
40208a5cd6 适配远程网关管理客户端 2025-08-08 02:16:05 +08:00
2248356998 qq.com
fa347f4f68 修改报警事件时间字段,增加变量表报警类 2025-08-07 19:19:36 +08:00
Diego
d7df6fc605 10.10.12 2025-08-07 11:24:57 +08:00
2248356998 qq.com
eb4bb2fd48 10.10.11 2025-08-07 10:19:28 +08:00
2248356998 qq.com
faa9858974 10.10.11 2025-08-07 10:18:22 +08:00
2248356998 qq.com
1b3d2dda49 QuestDbRestAPI 2025-08-07 10:11:37 +08:00
Diego
a8a9453611 !70 fix: questdb restapi多实例 2025-08-07 01:58:32 +00:00
2248356998 qq.com
e84f42ce14 10.10.10 2025-08-06 21:42:46 +08:00
2248356998 qq.com
6f814cf6b8 更新questdb restapi启用字段 2025-08-06 21:42:23 +08:00
2248356998 qq.com
e36432e4e9 10.10.9 2025-08-06 19:33:30 +08:00
Diego
ebd71e807b !69 更新依赖 2025-08-06 11:25:31 +00:00
Diego
34000d8d7d !68 10.10.7 2025-08-05 09:22:11 +00:00
2248356998 qq.com
e785f6660c 10.10.5 2025-08-01 21:53:47 +08:00
Diego
831c611797 10.10.4 2025-08-01 17:30:37 +08:00
Diego
453817ef86 添加IAsyncDisposable 2025-08-01 16:36:27 +08:00
2248356998 qq.com
8ce0b981c1 no message 2025-08-01 12:55:01 +08:00
2248356998 qq.com
4e5c51b54c 2025-08-01 12:47:21 +08:00
2248356998 qq.com
3cc9d31f28 修改可用内存策略 2025-08-01 12:43:39 +08:00
2248356998 qq.com
10391f869b 支持相对路径创建sqlite 2025-07-31 23:41:58 +08:00
Diego
fba0723a6d 更新依赖 2025-07-31 18:39:46 +08:00
Diego
2db3f78f0c 添加 控制写操作与读操作的比率 的插件配置属性 2025-07-31 18:18:41 +08:00
Diego
badf61fe01 10.9.99 2025-07-31 16:25:47 +08:00
Diego
d74e0952dc 10.9.98 2025-07-31 15:57:33 +08:00
Diego
fb1699ce80 10.9.97 2025-07-31 14:06:47 +08:00
Diego
44adddbcd4 10.9.97 2025-07-31 13:56:49 +08:00
Diego
0eab889452 10.9.97 2025-07-31 13:56:34 +08:00
Diego
e14d39a459 添加 rpc写入 多写日志 2025-07-31 12:52:40 +08:00
2248356998 qq.com
7575264ede 添加变量初始化标记 2025-07-31 00:40:03 +08:00
2248356998 qq.com
3e1a077b96 添加变量初始化标记 2025-07-31 00:30:53 +08:00
2248356998 qq.com
a921cb8400 refactor: 连接时判断setup 2025-07-30 23:27:35 +08:00
2248356998 qq.com
4de7c31ed7 10.9.92 2025-07-30 22:00:23 +08:00
2248356998 qq.com
08326a2cfd fix: 单属性验证异常 2025-07-30 21:11:35 +08:00
Diego
e045de5acb !67 更新依赖 2025-07-30 10:01:20 +00:00
2248356998 qq.com
d3bef31aa6 10.9.70 2025-07-30 04:32:14 +08:00
2248356998 qq.com
347d4d6e5d 10.9.69 2025-07-25 22:21:34 +08:00
2248356998 qq.com
b006a066e1 10.9.69 2025-07-25 22:14:06 +08:00
Diego
e331bc5d3c 10.9.68 2025-07-25 20:30:48 +08:00
Diego
2e81806231 优化 2025-07-25 20:20:35 +08:00
Diego
37b48cf221 BindField 2025-07-24 20:03:53 +08:00
Diego
5997487434 修改参数 2025-07-24 19:46:30 +08:00
Diego
4ce843182f build: 10.9.67
feat: 报警恢复增加延时功能
refactor: 移除通讯任务时,设置设备、变量离线状态

fix: 罗克韦尔PLC通讯超时错误
2025-07-24 13:25:55 +08:00
2248356998 qq.com
a4aa000cf0 10.9.66 2025-07-23 19:11:39 +08:00
Diego
01aa6ca066 10.9.65 2025-07-23 16:34:02 +08:00
Diego
10a0280c4a 10.9.64 2025-07-22 15:55:49 +08:00
Diego
3b8b00c783 变量类验证提示 2025-07-22 11:03:48 +08:00
Diego
232ee5d5d4 10.9.63 2025-07-22 01:17:12 +08:00
2248356998 qq.com
605830edce 10.9.62 2025-07-20 21:52:59 +08:00
2248356998 qq.com
ca86441e05 orm性能优化 2025-07-20 19:04:25 +08:00
2248356998 qq.com
b30b876c5f 更新依赖 2025-07-20 10:44:20 +08:00
2248356998 qq.com
f95590b4cb 修正拼写错误 2025-07-19 22:36:13 +08:00
2248356998 qq.com
9921130406 更新依赖 2025-07-19 21:38:19 +08:00
2248356998 qq.com
5c47589ca1 更新依赖 2025-07-19 21:31:46 +08:00
2248356998 qq.com
048abfae2e 添加可空标识 2025-07-19 13:35:55 +08:00
Diego
8e35c16edf 恢复restart标记 2025-07-18 17:46:56 +08:00
Diego
143b751213 Revert "build: 10.9.42"
This reverts commit 2cafe745b9.
2025-07-18 14:41:19 +08:00
Diego
2cafe745b9 build: 10.9.42
feat: 优化读写调度
feat: rpc日志添加执行时间字段
2025-07-18 09:48:41 +08:00
Diego
210ac2c122 更新解决方案 2025-07-18 00:02:38 +08:00
Diego
4707ce6d58 新增RemoteWebApp项目 2025-07-17 23:41:11 +08:00
2248356998 qq.com
788a8b670d 10.9.40 2025-07-16 21:18:14 +08:00
2248356998 qq.com
5e4f0057e4 更新依赖库 2025-07-15 21:24:19 +08:00
2248356998 qq.com
2960c13ef1 更新依赖库 2025-07-15 03:56:46 +08:00
2248356998 qq.com
f11b7f7ab4 10.9.37 2025-07-13 22:47:14 +08:00
Diego
9bb9cd7419 10.9.35 2025-07-11 07:14:52 +08:00
Diego
ba008ef8ba 更新.NETVersion 2025-07-09 13:35:42 +08:00
Diego
28b533decf 10.9.34 2025-07-09 13:31:08 +08:00
Diego
9ee638c2f1 更新依赖包 2025-07-08 23:59:24 +08:00
Diego
d90fdbaf35 补充更新nuget包 2025-07-08 18:15:50 +08:00
Diego
b55e3db736 10.9.29 2025-07-08 17:55:37 +08:00
Diego
dbee8496cb opcuaServer支持decimal类型 2025-07-08 16:53:28 +08:00
Diego
044e78bea9 opcuaserver回退修改 2025-07-08 15:52:12 +08:00
Diego
fe79128d90 build: 10.9.26
fix: opcuaserver添加变量属性出现错误,已回退
refactor: 网关监控树节点保持展开状态
refactor: cache插件类日志输出
2025-07-08 14:33:27 +08:00
Diego
34120da008 ToDecimal方法添加异步捕获,防止double类型值超限 2025-07-08 11:21:06 +08:00
Diego
4c62bb0b21 10.9.25 2025-07-08 10:19:01 +08:00
Diego
46b16279c7 build: 10.9.24 2025-07-08 09:41:45 +08:00
2248356998 qq.com
0779efc5dd refactor: 冗余服务代码修正 2025-07-08 02:38:05 +08:00
Diego
8acdb780e8 nuget本地源创建文件夹 2025-07-07 19:07:08 +08:00
Diego
2e310b919e 添加Keys文件夹 2025-07-07 16:54:58 +08:00
Diego
4155c07269 10.9.23 2025-07-07 15:20:39 +08:00
Diego
32fa833736 build: 10.9.22 2025-07-07 15:10:06 +08:00
Diego
2258f08555 build: 10.9.19 2025-07-07 13:44:19 +08:00
2248356998 qq.com
d90b32f165 refactor: 调整冗余服务代码 2025-07-07 00:15:46 +08:00
2248356998 qq.com
1492377322 refactor:调整部分插件父类 2025-07-06 01:33:15 +08:00
Diego
32eefbf545 build: 10.9.18
feat: 网关监控树节点添加右侧常用操作按钮
2025-07-04 13:54:35 +08:00
Diego
a825ca5f6f 网关监控树节点添加右侧常用操作按钮 2025-07-04 12:50:07 +08:00
Diego
e270b0c4f6 no message 2025-07-04 09:01:31 +08:00
Diego
6ae44ccf58 10.9.17 2025-07-04 08:36:37 +08:00
Diego
1aa0df6339 feat: 支持变量低内存导出 2025-07-03 23:24:56 +08:00
Diego
62c3693dbe 导出通道和设备支持IEnumerable低内存 2025-07-03 19:34:51 +08:00
Diego
e4e503c97b build: 添加nuget.config,自定义nuget源,方便本地调试自行编译 2025-07-03 12:43:51 +08:00
2248356998 qq.com
5ec1ee7627 fix: 上次更新导致大小端配置映射错误 2025-07-02 21:51:00 +08:00
Diego
79789388fc fix: opcuaserver动态刷新变量节点会导致新建的动态节点无法刷新订阅 2025-07-02 19:11:11 +08:00
Diego
2c4194ee18 refactor: opcua某些不存在的节点ID不再影响整体订阅,只出现日志提示 2025-07-02 15:09:52 +08:00
Diego
1b2be585af fix: 报警分析错误设置循环 2025-07-02 14:26:25 +08:00
Diego
83736647e7 feat: S7PLC增加WString支持 2025-07-02 12:49:55 +08:00
Diego
b06405717d build: 10.9.9
fix: timerx 池 max值取消
feat: mqttrpc支持脚本
2025-07-02 10:03:50 +08:00
2248356998 qq.com
298a1f2ed4 更新docker文件 2025-07-02 07:32:23 +08:00
Diego
74a47a1983 build: 10.9.8
支持redis缓存
2025-07-01 17:55:03 +08:00
Diego
a48a42abe4 modbusslave 异常捕获 2025-07-01 10:51:10 +08:00
Diego
feb1d0a3c5 feat: 增加后台服务生命周期识别 2025-06-30 10:59:18 +08:00
Diego
92bca824e6 10.9.6 2025-06-29 22:19:53 +08:00
2248356998 qq.com
025c699517 feat: s7增加请求id识别 2025-06-29 22:06:53 +08:00
2248356998 qq.com
53f8fbe4b1 refactor: 变量排序导出 2025-06-28 21:43:06 +08:00
2248356998 qq.com
77bfabc41d feat: 改用Mapperly源生成,代替Mapster 2025-06-28 00:00:43 +08:00
Diego
6427ee6ee0 refactor: 降低sqlite依赖 2025-06-27 14:44:00 +08:00
Diego
4c95997d62 build: 10.9.2
fix: taos connection dispose
refactor: opcua AddSubscriptionAsync 添加延时和重试
2025-06-27 11:16:58 +08:00
Diego
1d82cea40d build: 10.9.1
fix: 任务空错误异常
feat: 数据库插件增加字符串变量表和数值变量表两种情况
2025-06-27 03:02:03 +08:00
Diego
e78799424c 添加日志输出筛选 2025-06-25 17:09:05 +08:00
Diego
1000c8d38f docs: 更新采集插件开发文档 2025-06-25 14:22:58 +08:00
Diego
b2589fc634 build: 10.8.24
fix: 变量离线后再次上线,如果值不变,会导致在线状态不刷新
fix: s7离线恢复时,可能触发多次协议握手导致异常
2025-06-25 11:19:06 +08:00
Diego
c80e57a4e8 build: 10.8.24
fix: 变量离线后再次上线,如果值不变,会导致在线状态不刷新
fix: s7离线恢复时,可能触发多次协议握手导致异常
2025-06-25 11:17:04 +08:00
Diego
6510c3e289 feat: 增加一个变量读写表达式常用转换的友好编辑界面 2025-06-24 16:14:35 +08:00
Diego
920e407d05 恢复规则引擎脚本接口 2025-06-24 10:52:00 +08:00
Diego
7314c8901d fix: 用户编辑框初始刷新职位 2025-06-24 09:15:33 +08:00
Diego
4e9f02b48c 更新依赖包 2025-06-24 09:03:34 +08:00
2248356998 qq.com
9ae7602cb4 配置最大连接数 2025-06-24 00:09:07 +08:00
2248356998 qq.com
aa8aa36aef build: 10.8.19
fix: s7 复用地址对象导致读取异常
feat: 规则引擎node添加内部异常捕获
feat: 变量增加属性: 写入后再次读取检查值是否一致
2025-06-23 21:21:27 +08:00
2248356998 qq.com
0174f7c6f2 更新依赖 2025-06-22 23:05:12 +08:00
2248356998 qq.com
df9e7d6ff1 10.8.17 2025-06-22 21:11:37 +08:00
Diego
b40ca920d3 fix: 变量自动刷新运行态 2025-06-20 16:58:45 +08:00
Diego
5a4b0a0e93 修改插件过期提示 2025-06-20 14:43:13 +08:00
Diego
a879edd68b 10.8.12 2025-06-20 13:52:42 +08:00
Diego
62e0a6ee9d gitee登录按钮隐藏 2025-06-19 17:04:22 +08:00
Diego
765e5564d4 10.8.10 2025-06-19 16:56:04 +08:00
Diego
10eecac19b feat: 优化设备状态逻辑 2025-06-19 11:41:43 +08:00
Diego
59241b8faa fix: opcua插件订阅检查失效 2025-06-19 10:42:54 +08:00
Diego
52b3097f04 10.8.7 2025-06-18 22:04:48 +08:00
Diego
d922296b70 feat: 重构插件任务 2025-06-18 17:11:57 +08:00
Diego
aec91da28b 10.8.2
feat: 优化闭包导致的状态机内存占用,高并发时内存显著下降
fix(sqldb): 定时上传模式时,实时表时效
fix(taos): 初始化失败
2025-06-17 17:09:05 +08:00
Diego
013ff394be 10.8.1 2025-06-16 18:25:55 +08:00
Diego
081e07473d 10.8.0 2025-06-16 18:12:28 +08:00
Diego
d33d900592 增加github oauth登录 2025-06-15 00:17:25 +08:00
Diego
29365c4ef9 修改脚本测试方法 2025-06-14 11:56:31 +08:00
Diego
17a6189089 style: 更新SysResourcePage页面样式 2025-06-13 16:03:28 +08:00
Diego
003b8a3763 10.7.56 2025-06-13 13:35:38 +08:00
Diego
1c7f8b5cab 10.7.55 2025-06-13 09:14:22 +08:00
Diego
b7ff9ffca2 更新解决方案 2025-06-13 09:06:42 +08:00
Diego
9bba9bda76 10.7.54 2025-06-12 23:54:10 +08:00
Diego
ec2fcc75d3 合并代码 2025-06-12 20:21:50 +08:00
Diego
57a4038577 pwa安装提示优化 2025-06-12 10:20:52 +08:00
Diego
b78a76e60f 增加采集设备写入数据的控制台文本日志 2025-06-11 23:49:37 +08:00
Diego
28bd751d44 增加tab右键菜单 2025-06-11 22:57:00 +08:00
Diego
dcba7b9810 10.7.50 2025-06-11 21:50:46 +08:00
Diego
7f1a741ce6 优化sql实时表执行性能 2025-06-11 21:39:14 +08:00
Diego
ca2b17d433 10.7.47 2025-06-11 17:08:19 +08:00
Diego
af589eac10 更新依赖 2025-06-11 15:05:03 +08:00
Diego
573670f1f5 10.7.45 2025-06-11 10:26:48 +08:00
Diego
f3ec85a03d 更新测试 2025-06-10 16:26:14 +08:00
Diego
c94308454f build: 10.7.42
feat:更改后台服务多语言处理方式
2025-06-10 15:49:47 +08:00
Diego
c9c2b2b69d 10.7.39 2025-06-09 16:11:37 +08:00
Diego
40574b776f feat(TDengine): 支持websocket连接,无需安装sdk 2025-06-09 12:38:30 +08:00
Diego
f426c1533d fix: taos插件 not found dll错误 2025-06-09 10:07:58 +08:00
Diego
4a3b5163f1 更新依赖 2025-06-09 09:29:41 +08:00
2248356998 qq.com
3a0946d357 优化单例db对象获取 2025-06-08 21:09:07 +08:00
Diego
9dd21c644c 10.7.35 2025-06-08 15:48:13 +08:00
2248356998 qq.com
6713190a23 日志写入器释放 2025-06-08 15:47:25 +08:00
Diego
9f24533425 10.7.34 2025-06-08 15:38:41 +08:00
2248356998 qq.com
ed1d9374eb 2025-06-08 01:22:41 +08:00
Diego
f14d27129e 10.7.33 2025-06-07 22:30:27 +08:00
2248356998 qq.com
5b04f02fbe Merge branch 'v10' of https://gitee.com/ThingsGateway/ThingsGateway into v10 2025-06-07 22:26:32 +08:00
2248356998 qq.com
227080e332 ddp协议清理旧连接逻辑错误 2025-06-07 22:26:18 +08:00
Diego
1e87482a49 10.7.32 2025-06-07 15:25:38 +08:00
2248356998 qq.com
054d31c3ea 添加自定义插件 2025-06-07 15:14:54 +08:00
Diego
3a068a7b03 更新解决方案 2025-06-07 12:22:05 +08:00
Diego
b12e923c99 10.7.31 2025-06-06 23:47:07 +08:00
Diego
ab33eed8d3 10.7.22 2025-06-06 21:13:58 +08:00
Diego
d930a9a8eb 修改演示站登录ui 2025-06-05 08:40:25 +08:00
Diego
af381fce12 插件调试增加双击显示 2025-06-04 09:45:02 +08:00
Diego
b64ac0539e 更新依赖 2025-06-03 22:27:28 +08:00
Diego
541c60b363 10.7.17 2025-06-02 19:45:56 +08:00
Diego
824e95f7cb 10.7.16 2025-06-02 19:44:30 +08:00
youthalan
38f7850196 !66 修复缺少引用编译错误
* 修复缺少引用编译错误
2025-05-31 06:35:47 +00:00
Diego
bef9de88e2 oauth增加scope参数 2025-05-31 02:17:09 +08:00
Diego
48cd5e7c7f 增加演示站的gitee授权 2025-05-31 00:43:43 +08:00
Diego
3b44fda51c 修复hybrid程序 2025-05-30 13:48:03 +08:00
Diego
dbfc9a5bb4 更新授权显示 2025-05-30 11:21:45 +08:00
Diego
1b758aa41a 10.6.37 2025-05-30 10:15:58 +08:00
Diego
43bdc70899 优化文本日志读取 2025-05-30 10:02:51 +08:00
Diego
fadda000a6 添加sqlsugar类 2025-05-29 22:18:33 +08:00
Diego
45a8c91a5a 优化UI刷新 2025-05-29 17:05:06 +08:00
Diego
8e938f18be 去除不必要的控制台日志输出 2025-05-28 16:52:51 +08:00
Diego
ab1b364c54 fix: 同步插件反写空错误 2025-05-28 12:30:16 +08:00
Diego
5ec65b2fb0 10.6.29 2025-05-28 10:47:31 +08:00
Diego
926eced724 10.6.28 2025-05-27 17:20:05 +08:00
Diego
f7f8802272 2025-05-27 13:19:39 +08:00
Diego
c6910dff02 update src/Gateway/ThingsGateway.Gateway.Application/ThingsGateway.Gateway.Application.csproj.
Signed-off-by: Diego <2248356998@qq.com>
2025-05-27 01:37:29 +00:00
Diego
ad299d0dbb 2025-05-27 08:52:06 +08:00
2248356998 qq.com
8b124d1050 日志统计查询性能增强 2025-05-27 00:03:30 +08:00
Diego
ff41080dbd 更新授权类 2025-05-26 19:51:21 +08:00
Diego
0e28606e3d 10.6.23 2025-05-26 18:43:42 +08:00
Diego
6a025ceee5 序列化配置增加nan的情况 2025-05-26 17:41:13 +08:00
Diego
6b2e53d6dc 更新配置 2025-05-26 09:17:59 +08:00
2248356998 qq.com
b989aa5561 10.6.21 2025-05-26 00:05:16 +08:00
2248356998 qq.com
f5b0b7ebd2 fix: s7多写 2025-05-24 14:22:58 +08:00
2248356998 qq.com
16881ae076 fix: s7多写 2025-05-24 14:18:58 +08:00
2248356998 qq.com
af04112656 10.6.20
fix: s7多写
fix: opcuaserver写入数组
2025-05-24 14:11:10 +08:00
Diego
a2863112dc 2025-05-23 15:47:41 +08:00
Diego
f531e4dfc5 10.6.19 2025-05-23 13:16:57 +08:00
Diego
8db9b32ba7 10.6.18 2025-05-23 12:55:21 +08:00
Diego
dd5691cbef 更新依赖 2025-05-22 14:40:56 +08:00
Diego
de48b32af3 优化硬件信息曲线数据 2025-05-21 17:10:28 +08:00
Diego
600b5042a1 更新首页 2025-05-21 16:51:40 +08:00
Diego
aac77029da 修改数据保护密钥持久化位置 2025-05-21 13:15:39 +08:00
Diego
e50205f557 导出excel不再按设备名称和变量名称排序 2025-05-21 10:10:59 +08:00
Diego
e227411d1f fix: taos插件查询错误 2025-05-21 09:34:31 +08:00
2248356998 qq.com
2de0ed793f 调整json序列化内容 2025-05-20 23:21:58 +08:00
Diego
cb0276f273 fix: opcuamaster插件属性UI未正确显示 2025-05-20 15:20:14 +08:00
Diego
562b3f17c9 10.6.11 2025-05-19 23:16:49 +08:00
Diego
0f78f81c1c 10.6.7 2025-05-19 18:43:03 +08:00
Diego
6594937d0a 网关冗余备用站和同步插件支持 变量写入 2025-05-19 18:01:23 +08:00
Diego
64bc6084be 更新sln 2025-05-19 12:23:41 +08:00
Diego
20434d5bd2 10.6.5 2025-05-19 12:13:11 +08:00
Diego
9ecc9380e6 同步更改 2025-05-19 12:12:44 +08:00
Diego
a57c55080b 增加数据同步插件 2025-05-19 12:10:11 +08:00
2248356998 qq.com
b8ca06c6be fix: hybrid运行切换语言错误 2025-05-17 16:32:36 +08:00
Diego
5aff6461a1 fix: opcuaServer 业务设备刷新变量时可能导致内存泄露 2025-05-16 19:26:33 +08:00
Diego
6cf53fefec 优化内存占用 2025-05-16 18:00:36 +08:00
Diego
45132f3503 更新依赖 2025-05-16 10:51:44 +08:00
Diego
f1e78a0e8a 恢复配置json 2025-05-15 12:17:43 +08:00
Diego
0bf28ec275 更新语言资源 2025-05-15 12:17:09 +08:00
Diego
41f8412c97 支持达梦数据库 2025-05-15 12:15:32 +08:00
Diego
c535974362 更新规则引擎示例 2025-05-15 10:44:12 +08:00
Diego
1860c5f215 build:10.6.1 2025-05-15 09:12:33 +08:00
Diego
6d778b2d39 增加initDatabase配置项 2025-05-15 09:08:08 +08:00
Diego
f48b99c259 更新示例 2025-05-14 21:12:51 +08:00
Diego
3c73b93051 更新依赖 2025-05-14 18:52:19 +08:00
Diego
98f3f2d519 添加 `过滤离线变量` 插件属性 2025-05-14 13:01:12 +08:00
Diego
b76b4e8d68 变量表索引删除语句兼容性增强 2025-05-13 19:27:50 +08:00
Diego
07285a7c61 mqtt增加qos属性 2025-05-13 19:27:27 +08:00
Diego
03c0dfef37 增加业务设备日志 2025-05-12 15:26:51 +08:00
Diego
6ef6929c35 优化api权限树 2025-05-12 10:21:41 +08:00
Diego
e3c0c173f0 更新依赖 2025-05-12 08:53:25 +08:00
Diego
7d64e058d4 更新依赖 2025-05-08 16:34:48 +08:00
Diego
e97ee9b64b 10.5.15 2025-05-07 22:08:54 +08:00
Diego
6a03e39eeb 10.5.14 2025-05-07 22:00:31 +08:00
Diego
525ec740b5 添加脚本demo 2025-05-06 11:43:56 +08:00
2248356998 qq.com
b790cf5f4e 更新依赖 2025-05-05 20:25:43 +08:00
Diego
d1248811fd build: 10.5.11 2025-04-30 23:05:36 +08:00
2248356998 qq.com
022d016e8e feat: 添加采集组 2025-04-30 23:04:51 +08:00
Diego
f73245e650 build: 10.5.10 2025-04-30 15:31:39 +08:00
2248356998 qq.com
484461fa05 更新依赖 2025-04-30 15:29:19 +08:00
Diego
7e0b7aff2a feat: sqldb支持数组 2025-04-28 15:52:32 +08:00
Diego
6c450dcb09 feat: sqldb支持数组类型 2025-04-28 15:52:11 +08:00
Diego
227f44283f build: 10.5.8 2025-04-28 15:30:10 +08:00
Diego
74f6e79625 build: 10.5.7
优化opcua变量缓存
修复cron表达式间隔
2025-04-27 16:35:58 +08:00
Diego
cec43e2ce8 feat: 防呆设计,强制设置通道的最大并发数 2025-04-27 10:13:35 +08:00
Diego
7553b258bb build: 10.5.5 2025-04-26 17:46:31 +08:00
Diego
8bdbdc117e 支持bind链路设置多个通道 2025-04-26 17:10:46 +08:00
Diego
0e206be296 更新依赖 2025-04-26 16:17:02 +08:00
Diego
00b7353433 兼容性增强 2025-04-26 15:53:20 +08:00
Diego
44e7a83593 更新依赖 2025-04-26 15:02:57 +08:00
Diego
dd68d555d4 feat: 支持字节数组上传 2025-04-24 10:25:36 +08:00
2248356998 qq.com
0456296103 更新依赖包 2025-04-23 23:07:27 +08:00
Diego
a1b66277ff nuget 2025-04-23 15:28:53 +08:00
Diego
50758b79bc 更新依赖包 2025-04-23 11:48:45 +08:00
Diego
06a1f902ad 修改Startup方法名称 2025-04-23 10:56:03 +08:00
Diego
58f8b23b7c build:10.5.1
fix: 反向代理正确获取客户端IP

refactor: 添加demo站点域名
2025-04-22 11:45:14 +08:00
Diego
9e7c348b15 添加大数据写入方法 2025-04-21 23:05:10 +08:00
Diego
5f5ff8b43b 删除实体部分特性 2025-04-21 17:53:33 +08:00
Diego
f626b4e5fc sql插件增加分表模式 属性 2025-04-21 11:00:05 +08:00
2248356998 qq.com
bc23200e66 更新依赖 2025-04-20 20:32:41 +08:00
Diego
95ab59fd5a build: 10.4.21 2025-04-18 11:27:48 +08:00
Diego
0bbee003b0 app.json 2025-04-18 09:21:31 +08:00
Diego
d20cb7a928 兼容10.4.8以下数据库 2025-04-17 09:41:15 +08:00
Diego
952c134aba build: 10.4.19 2025-04-16 09:08:35 +08:00
2248356998 qq.com
5533d980e3 删除不必要的代码 2025-04-15 21:14:35 +08:00
2248356998 qq.com
aa0213818f 添加规则引擎日志清理任务 2025-04-15 20:59:01 +08:00
2248356998 qq.com
af88ffd57c 添加语言资源 2025-04-15 20:07:44 +08:00
2248356998 qq.com
87447b1c2a 传输model添加runtimetype 2025-04-15 20:01:21 +08:00
Diego
384a12880b 网关表格按钮权限 2025-04-15 10:13:37 +08:00
Diego
791f91f377 build: 10.4.18 2025-04-14 15:28:35 +08:00
Diego
4f8b405cc3 build:10.4.17 2025-04-13 13:03:39 +08:00
2248356998 qq.com
e1b7af201a 修改表单映射 2025-04-13 12:09:12 +08:00
2248356998 qq.com
a04b7817a9 refactor: 表格编辑框 model映射 2025-04-13 09:56:11 +08:00
2248356998 qq.com
21bf83aec7 edit css 2025-04-12 14:57:19 +08:00
2248356998 qq.com
d060d5179d build: 10.4.16 2025-04-12 12:24:05 +08:00
2248356998 qq.com
e73dd58e46 fix: 初始连接时,适配器空错误 2025-04-11 23:24:52 +08:00
Diego
a34e4a6942 添加api 2025-04-11 20:21:35 +08:00
Diego
a7ee6d78b5 fix: mqttcollect 重载变量寄存器 2025-04-11 11:01:29 +08:00
Diego
0a6651ac11 build: 10.4.14 2025-04-11 10:30:18 +08:00
Diego
fa25053c13 fix: 宏电ddp协议 tcpudp差异 2025-04-11 10:23:52 +08:00
Diego
61dd4edeb5 更新依赖 2025-04-09 18:28:25 +08:00
Diego
dbaeff302b build: 10.4.13
fix: 通道,设备名称为中文时,日志路径错误
2025-04-09 17:22:46 +08:00
Diego
6cbe7ebcf2 fix: 复制通道 2025-04-09 13:32:04 +08:00
youthalan
2826e08c8c !64 -注册授权页面显示 2025-04-08 14:36:22 +00:00
Diego
e30e337efa refactor: 删除重复的注册授权页面 2025-04-08 10:44:54 +08:00
Diego
39788e0357 refactor: 删除重复的注册授权页面 2025-04-08 10:35:37 +08:00
Diego
c47363df71 build: 10.4.11 2025-04-08 10:20:33 +08:00
Diego
4199453038 refactor: 删除logenable 2025-04-08 09:44:08 +08:00
Diego
db991081c8 build: 10.4.10 2025-04-08 00:53:41 +08:00
Diego
24f946a727 refactor: 组件属性删除 2025-04-08 00:53:22 +08:00
Diego
772dae047a refactor: 删除logenable字段 2025-04-08 00:37:41 +08:00
Diego
020f440fdd !63 build: 10.4.8
* 10.4.8
* 优化ui
* 调整规则引擎
2025-04-07 15:54:03 +00:00
Diego
c88fc5ec09 !62 build: 10.4.7
* build: 10.4.7
* 格式化
* Merge branch 'v10' into v10-dev
* Merge branch 'v10' of gitee.com:ThingsGateway/ThingsGateway into v10-dev
* 修改通道显示字符串
* fix: ddp协议
* 更新依赖
* 10.4.6
* 通道 本地主机地址和远程主机地址 文本修改
* 注册页面位置更改
* 修复导出设备失败,注册页面位置更改
* 更新依赖
* 格式化
* 更新依赖
* 删除会话管理字段
* logo size
* 更新依赖
2025-04-07 07:37:17 +00:00
Diego
475849fbef !61 fix: ddp协议
* Merge branch 'v10' of gitee.com:ThingsGateway/ThingsGateway into v10-dev
* 修改通道显示字符串
* fix: ddp协议
* 更新依赖
* 10.4.6
* 通道 本地主机地址和远程主机地址 文本修改
* 注册页面位置更改
* 修复导出设备失败,注册页面位置更改
* 更新依赖
* 格式化
* 更新依赖
* 删除会话管理字段
* logo size
* 更新依赖
2025-04-07 05:01:56 +00:00
Diego
1d63228fb2 !60 build: 10.4.6
fix: 修复导出设备失败,注册页面位置更改

refactor:通道 本地主机地址和远程主机地址 文本修改
refactor:注册页面位置更改
refactor:更新依赖包
refactor:删除会话管理字段
2025-04-06 12:28:24 +00:00
Diego
c918c0c010 更新authorizel类库 2025-04-03 02:01:08 +08:00
Diego
1028179983 build: 10.4.4 2025-04-03 01:27:43 +08:00
Diego
686f61ff90 refactor: docker镜像基础改为net8 2025-04-02 21:38:36 +08:00
Diego
ae43fadca3 更新依赖包 2025-04-02 20:40:11 +08:00
Diego
1bf05780b3 build: 10.4.3
调整pro授权密钥方式
2025-04-02 18:49:51 +08:00
Diego
3e30daa1d3 refactor: 修改文件名称 2025-04-02 12:37:06 +08:00
Diego
54ef1233b1 refactor: 重启通道时,清空内存池 2025-04-02 10:56:24 +08:00
Diego
4413633de7 build: 10.3.1 2025-04-01 22:58:06 +08:00
2248356998 qq.com
c76e20d146 dispose 2025-04-01 22:56:58 +08:00
Diego
36d53b7ce4 build: 10.2.26 2025-04-01 22:45:58 +08:00
2248356998 qq.com
0b0bce2761 fix: 设备冗余检测事件未释放 2025-04-01 22:44:46 +08:00
Diego
d47a9be03c build: 10.2.25 2025-04-01 22:22:58 +08:00
2248356998 qq.com
bc32d7ae7a refacotr: 插件释放时显式清理较大内存资源 2025-04-01 22:18:39 +08:00
Diego
e6747a2c2c build: 10.2.24
fix: ui page dispose方法未自动执行,可能导致内存泄露
2025-04-01 14:53:10 +08:00
Diego
3fb48cb64e refactor: 报警恢复时报警文本不清空 2025-04-01 11:34:41 +08:00
Diego
381db1cf53 nuget构建 2025-04-01 11:15:23 +08:00
Diego
d3939aeb9d build: 10.2.22
更新依赖项
2025-04-01 11:05:32 +08:00
Diego
5956f90557 Merge branch 'v10' of https://gitee.com/ThingsGateway/ThingsGateway into v10 2025-04-01 10:57:44 +08:00
Diego
7f54ecfe5d build: 10.2.21
feat: 增加汇川plc插件
2025-04-01 10:57:42 +08:00
Diego
e7bda99c8b build: 10.2.21
feat: 增加汇川plc插件
2025-04-01 10:57:06 +08:00
2248356998 qq.com
ea7ab5a2bf refactor: 插件停止方式改为token取消委托 2025-03-31 19:26:11 +08:00
Diego
ee566d199a 规则引擎rpc日志 增加 源名称 2025-03-31 16:19:43 +08:00
Diego
56eca454b1 更新usheet依赖项 2025-03-31 15:26:53 +08:00
Diego
d057974c3e build:10.2.20 2025-03-31 12:39:35 +08:00
Argo Zhang
9514e7fdea 更新样式适配紧凑模式下按钮大小 (#25) 2025-03-31 12:29:56 +08:00
Diego
e546113873 refactor: 添加规则名称 2025-03-31 12:14:10 +08:00
Diego
60f1139355 feat: 增加pro插件标识 2025-03-31 10:05:37 +08:00
Diego
1b18b59054 build: 10.2.18
更新依赖库
2025-03-30 16:39:10 +08:00
Diego
afec0187e9 build: 10.2.17 2025-03-29 21:24:12 +08:00
2248356998 qq.com
d0d7e1ccf8 feat: 优化ui刷新性能 2025-03-29 21:21:51 +08:00
Diego
d72376b4b7 build: 10.2.16 2025-03-29 19:00:00 +08:00
2248356998 qq.com
3be60cb305 refactor: opcua加载复杂类型添加条件 2025-03-29 18:51:57 +08:00
Diego
75b1f351a1 build: 10.2.15 2025-03-29 12:25:51 +08:00
2248356998 qq.com
07185f8018 refactor: 多通道设备日志 2025-03-29 12:23:53 +08:00
Diego
2f081b62a7 build: 10.2.14 2025-03-29 11:42:18 +08:00
2248356998 qq.com
bbce2a11e1 refactor:opcua检查订阅 2025-03-29 11:38:17 +08:00
2248356998 qq.com
96ab609157 删除注释 2025-03-29 11:23:49 +08:00
2248356998 qq.com
d961d56a35 refactor: opcua日志内容 2025-03-29 00:20:38 +08:00
Diego
82a5335a92 build: 10.2.13 2025-03-28 23:32:16 +08:00
2248356998 qq.com
729a23949c refactor: opcua增加质量戳bad日志 2025-03-28 23:29:12 +08:00
2248356998 qq.com
a1b0419d7a refactor: 在线excel 2025-03-28 23:12:00 +08:00
2248356998 qq.com
7a23015b9d refactor: 采集插件基类CollectBase更名CollectFoundationBase,CollectBase适用与与touchsocket无关的采集插件 2025-03-28 22:58:19 +08:00
Diego
9cbe0dbae1 feat: 增加tab右键菜单
refactor: mqtt协议版本增加默认值3.11
2025-03-28 17:15:45 +08:00
Diego
4f139b7d03 更新readme 2025-03-28 11:16:28 +08:00
Diego
1e925e2560 refactor: 自定义cookie名称 2025-03-28 11:14:01 +08:00
Diego
a42e1e3af3 feat: mqtt插件添加mqtt版本选择
fix: s7地址格式解析db块逻辑错误
2025-03-28 10:45:50 +08:00
Diego
799caec7ee refactor: 删除没有使用的代码 2025-03-28 10:20:35 +08:00
Diego
dd7d30498f feat: 添加变量复制按钮 2025-03-28 09:06:54 +08:00
Diego
e9b1720e98 refactor: DataHandleAdapter 2025-03-27 17:46:53 +08:00
Diego
5f41371bdb refactor: 更新配置 2025-03-27 17:09:13 +08:00
Diego
5226bfae20 build: 10.2.9 2025-03-27 15:06:02 +08:00
Diego
d1eab168b7 build: 10.2.8 2025-03-26 17:47:24 +08:00
Diego
8760518c10 build: 10.2.7 2025-03-26 09:19:46 +08:00
Diego
6719a352c2 hybrid程序startup 2025-03-25 17:14:37 +08:00
Diego
8449b6c6b8 refactor: miniexcel版本回退 2025-03-25 15:27:05 +08:00
Diego
0550eaf465 feat: 规则引擎 自定义脚本 增加主动释放方法 2025-03-25 10:55:25 +08:00
Diego
bdc9eb44ec feat: 规则引擎 自定义执行脚本支持 `IDisposable` 接口
refactor: 脚本内日志对象统一命名为 ``Logger``
2025-03-25 10:46:03 +08:00
Diego
37b99cb1b0 feat: 增加脚本提示 2025-03-25 03:22:37 +08:00
Diego
492381e4fc refactor: 修改变量数量限制逻辑 2025-03-24 14:49:41 +08:00
Diego
27d65dd799 refactor: 变量名称不再限制 不包含. 符号 2025-03-24 11:40:27 +08:00
Diego
434724310c build: 10.2.1
feat: 新增 配置 通道、设备、变量的数量限制,防止OOM

feat: 优化 ``opcuaserver`` 插件刷新变量逻辑

refactor: taos插件 表名称 强制小写

refactor: 数据库插件 脚本父类更改
2025-03-24 11:23:08 +08:00
Diego
e5ad5a8521 feat: 变量新建时自动设置已选择的设备 2025-03-21 16:46:40 +08:00
Diego
3942819fed refactor: ui样式修改 2025-03-21 10:48:11 +08:00
Diego
1cc5f538aa feat: 报警实体添加 `恢复值` 属性 2025-03-20 11:04:55 +08:00
Diego
b0d8534ea4 fix: 规则引擎按钮权限异常 2025-03-19 17:46:17 +08:00
Diego
5b2bc38670 refactor: 删除不需要的代码 2025-03-19 17:09:42 +08:00
Diego
b36aa3557c feat: opcUaServer支持同时多个写入 2025-03-19 10:57:57 +08:00
Diego
a1a525e6e3 fix: 导出excel失败 2025-03-19 09:42:37 +08:00
Diego
14453cc437 fix: rpc日志入队条件错误 2025-03-19 08:45:24 +08:00
Diego
db760ba5d8 fix: taos插件sql语句缺失标识符 2025-03-18 17:01:02 +08:00
Diego
4ae692008f 资源文件翻译错别字 2025-03-18 15:54:08 +08:00
Diego
f37449f9ac feat: 新增在线excel编辑 2025-03-18 15:44:00 +08:00
Diego
8b7348b3d4 build: 10.1.20
feat: 优化excel导入速度
feat: 优化taos插件插入数据速度
feat: DB插件全部增加设备名称筛选项

refactor: 更改默认sqlite数据库目录

fix: taos插件多个插件设备但同个变量名称的插入逻辑错误
2025-03-17 19:39:19 +08:00
Diego
709cbb7b2e build: 10.1.19 2025-03-16 23:35:52 +08:00
2248356998 qq.com
187f1a4ce2 refactor: 更新依赖项 2025-03-16 23:31:37 +08:00
2248356998 qq.com
0f2ebd3a54 refactor: 调整发送延迟方法位置 2025-03-15 14:16:57 +08:00
Diego
86b63c2792 fix: 动态topic推断错误 2025-03-14 17:02:04 +08:00
Diego
cec2e71b41 build: 10.1.18
feat: opcuaMaster兼容性增强
refactor: controlLogix插件改为符号方式
2025-03-14 13:53:13 +08:00
Diego
9380f3e1ec feat: opcua 兼容性增强 2025-03-13 17:36:45 +08:00
Diego
76c2934e12 fix: modbusSlave驱动插件配置错误 2025-03-13 10:08:01 +08:00
Diego
9714c35d4b refactor: 修改依赖项版本 2025-03-13 09:14:24 +08:00
Diego
0d9beb713a refactor: 修改依赖项版本 2025-03-13 09:10:57 +08:00
Diego
c5f8d0e0b7 feat: 添加DTU服务类型字段 2025-03-12 23:14:23 +08:00
youthalan
5e8f4b075d !59 用户实体 语言json资源更改
* 用户实体 语言json资源更改
2025-03-11 08:23:26 +00:00
Diego
4b53fca3db build: 10.1.13 2025-03-11 14:39:57 +08:00
Diego
5d9c030a09 feat: 添加json缩进格式配置 2025-03-11 14:00:35 +08:00
Diego
bacbb9a28e fix: opcuaserver释放时空异常 2025-03-10 13:32:20 +08:00
Diego
7c287e0c03 refactor: 同步依赖库代码 2025-03-10 11:48:52 +08:00
Diego
10f675137d build: 10.1.9 2025-03-09 23:04:59 +08:00
2248356998 qq.com
6bdb5328e3 feat: mqttclient插件支持tls 2025-03-09 22:53:22 +08:00
2248356998 qq.com
14f529ac4e refactor: 调整授权cookie名称 2025-03-09 19:34:41 +08:00
Diego
ffe96d9ef1 build: 10.1.8 2025-03-09 10:23:21 +08:00
2248356998 qq.com
335f264caa refactor: 日志/缓存文件夹 由Id 改为 名称 2025-03-09 10:22:05 +08:00
2248356998 qq.com
b73e86ea9f refactor: 方法名称错别字 2025-03-07 20:51:36 +08:00
Diego
2bc2c4c57b refactor: table默认紧凑 2025-03-07 16:59:28 +08:00
Diego
6f87c2f03a refactor: 优化UI细节 2025-03-07 16:14:13 +08:00
Diego
75e677af88 feat: web页面更新为紧凑主题 2025-03-07 15:47:39 +08:00
Diego
9ffe355396 build: 10.1.5
feat: 添加复制通道、复制设备功能
refactor: 优化UI提示
2025-03-07 12:21:09 +08:00
Diego
60b0fb23f8 refactor: 调整模块顺序 2025-03-07 08:52:43 +08:00
Diego
1c05ffc6ed build: 10.1.4 2025-03-06 21:17:14 +08:00
Diego
8cd4e43c68 fix: web页面 业务设备节点查询变量空异常 2025-03-06 20:55:45 +08:00
Diego
8486d28310 refactor: sql错误输出文本日志 2025-03-06 18:00:16 +08:00
Diego
e8aadda185 refactor: 显示未知类型插件 2025-03-06 17:46:28 +08:00
Diego
fcfd0428ab fix: s7设备无法保存 2025-03-06 16:33:43 +08:00
Diego
ddcc087800 build: 10.1.2
refactor: EnableWriteXorExecute 默认0
fix: 集合多线程更改错误
2025-03-06 12:09:50 +08:00
Diego
d574de54b4 refactor: EnableWriteXorExecute 默认0 2025-03-06 11:43:50 +08:00
Diego
1682ac03ac build: 10.1.1
fix: 变量寄存器编辑UI 输出错误
2025-03-06 11:08:52 +08:00
Diego
447dbece1c refactor: variableRuntime dispose 2025-03-06 10:45:39 +08:00
Diego
dcca901b17 refactor: 调整生产环境配置 2025-03-06 10:39:36 +08:00
Diego
a32c779074 refactor: 日志显示刷新频率降低 2025-03-06 09:13:30 +08:00
Diego
187c0f9829 refactor: 添加过滤条件 2025-03-06 08:44:55 +08:00
Diego
6c970c88ab feat: 优化组态重载逻辑 2025-03-06 00:46:24 +08:00
Diego
28a4520c77 build: 添加包构建条件 2025-03-05 16:37:21 +08:00
Diego
02d0dcdff7 fix: 变量页面筛选总条数显示错误 2025-03-05 14:58:17 +08:00
Diego
427d4e31c9 build: 10.1.0.4
fix: 包构建缺失内容
2025-03-05 14:40:09 +08:00
Diego
c60f7aac44 build: 10.1.0.3 2025-03-05 11:50:10 +08:00
Diego
42a7758a34 fix: webapi rpc写入 json反序列化错误 2025-03-05 11:26:38 +08:00
Diego
e0bade4670 fix: 规则引擎 变量Node 查询名称空异常 2025-03-04 23:12:53 +08:00
Diego
6af83152de build: 10.1.0.1
feat: 变量名称 由 全局唯一 更改为 采集设备内唯一
fix: opcda订阅方式初始化时未更新变量状态,导致后续变了状态一直是offline
feat: mqttServer 允许的连接ID前缀 为空时可为任意id

破坏性更新:
1、兼容旧版本数据库,但不兼容旧版本excel文件,不同点在于变量excel 业务属性页,添加了设备名称和业务设备名称,旧版本只有业务设备名称
2、业务上传内容更改为 字典类型,键为设备名称,值为变量列表。变量列表内容与旧版本相同
2025-03-04 21:09:11 +08:00
Diego
091a30045d feat: 规则引擎触发器UI优化 2025-03-03 18:07:18 +08:00
Diego
b2c8ae0c33 更新依赖包 2025-03-03 13:02:27 +08:00
Diego
8b6e0982c6 feat: 页面添加变量寄存器格式提示titile 2025-03-01 21:00:24 +08:00
Diego
caa3ebd600 feat: db动态脚本基类修改 2025-03-01 16:04:40 +08:00
Diego
d248e047b3 build: 10.0.2.14 2025-02-27 18:04:51 +08:00
Diego
25a95a1de0 fea(variableRuntimeService): 方法添加是否重启参数 2025-02-27 17:48:03 +08:00
Diego
d506b2c692 fix: api登录异常 2025-02-27 11:11:53 +08:00
Diego
24c672c2b9 feat: 优化树节点右键菜单内容 2025-02-27 10:51:05 +08:00
Diego
c407e0e83e feat: taos时序库支持每个数据点独立子表
feat: 重启运行时方法改为重载数据库获取通道设备变量
2025-02-26 21:59:41 +08:00
Diego
b1346698d6 feat: 优化opcua历史查询 2025-02-26 14:40:38 +08:00
Diego
5c01129567 补充解决方案文件 2025-02-25 16:39:03 +08:00
Diego
cd7ce53bd0 feat: 新增webhook插件 2025-02-25 16:23:43 +08:00
Diego
4c95c20061 feat: 添加动态变量新增和删除的方法 2025-02-25 15:21:06 +08:00
Diego
5339db5058 refactor: 删除opcua105 2025-02-25 10:04:02 +08:00
Diego
623e932f8c feat: 增加 microLogix1400 plc驱动(pro插件) 2025-02-24 20:23:07 +08:00
Diego
43659de4f4 feat: mqttServer增加匿名登录选项 2025-02-23 22:22:47 +08:00
Argo Zhang
2a661eda42 refactor: 调整插件调试样式 (#23) 2025-02-23 22:03:51 +08:00
Diego
c85a93a17b build: 10.0.2.3 2025-02-21 08:45:04 +08:00
2248356998 qq.com
8ab36cb3e1 feat: 优化opcua订阅 2025-02-20 23:18:37 +08:00
Diego
72820d0708 feat: 添加注册服务 2025-02-20 11:33:39 +08:00
Diego
95b551d4ba feat: 优化opc单设备大批变量检索速度
fix: 定时任务删除网关日志无效
2025-02-19 20:39:42 +08:00
Diego
68af9a0695 feat: 语言资源 2025-02-18 19:33:14 +08:00
Diego
6953c3989b feat: 添加刷新变量日志 2025-02-18 09:03:51 +08:00
Diego
cd4cb385d5 fix: 修复设备冗余多次切换后设备状态异常导致切换事件不触发 2025-02-17 14:58:44 +08:00
Diego
f4f6d595fc feat: 优化设备冗余,网关冗余 2025-02-17 13:31:29 +08:00
Diego
d2356f00e9 feat: 业务插件增加循环间隔 2025-02-17 09:35:59 +08:00
2248356998 qq.com
e408136196 feat: 优化组态配置流畅度 2025-02-15 20:12:59 +08:00
Diego
c355968add 支持冗余备用设备变量并集 2025-02-14 17:15:58 +08:00
Diego
783f878947 fix: 转换器实例初始化方法 2025-02-14 16:23:00 +08:00
Diego
4faf41e482 fix: 修复设备冗余切换 2025-02-14 14:48:28 +08:00
Diego
d8964b6ed2 feat: 优化设备冗余 2025-02-14 11:11:12 +08:00
Diego
b5b999941c 10.0.1.3 2025-02-14 09:43:15 +08:00
2248356998 qq.com
deeba8c4de 默认关闭多租户 2025-02-13 20:33:19 +08:00
youthalan
9e48729eb0 !58 修复按钮资源值及默认开启租户状态
* 修复按钮资源值及默认开启租户状态
2025-02-13 12:32:26 +00:00
2248356998 qq.com
936e374c05 fix: 修改设备后,变量实体中的设备名称实时生效 2025-02-13 20:29:50 +08:00
Diego
0f3524b114 feat: opc插件支持实时修改变量 2025-02-12 16:23:05 +08:00
Diego
d62de3d72c feat: 上传 网关冗余/更新以及规则引擎 源码 2025-02-10 09:32:02 +08:00
Diego
957a80da4b feat: 优化变量寄存器界面加载 2025-02-07 18:09:51 +08:00
Diego
1dccd70f7c feat(uaserver): 删除登录策略限制 2025-02-07 16:37:25 +08:00
Diego
006a5d4e61 feat: excel导入支持空白单元格 2025-02-07 10:50:33 +08:00
Diego
ce7cdcf54e fix: 变量编辑样式修正 2025-02-07 10:17:12 +08:00
Diego
c1ebb4a79b feat: 公开mqttServer发布方法 2025-02-06 16:43:05 +08:00
Diego
41964ae1de fix: 修改通道时,设备没有及时修改插件 2025-02-06 16:30:51 +08:00
Diego
66cf34adf7 fix: 修改通道时,设备没有及时修改插件 2025-02-06 16:04:49 +08:00
Diego
9e9e0009cf fix: opcua插件名称重复 2025-02-06 14:26:51 +08:00
Diego
d5cd9660fc feat: 调整blazor授权,添加自定义刷新逻辑 2025-02-06 12:08:40 +08:00
Diego
12a7803653 更新readme 2025-02-05 11:47:42 +08:00
Diego
8f7bef6a20 feat: 添加1.05版本opcua依赖库 2025-02-05 10:49:22 +08:00
2248356998 qq.com
a0715b830c feat: 日志读取长度限制放宽 2025-02-03 21:22:37 +08:00
2248356998 qq.com
f87ce10dc4 feat: 更新依赖包 2025-02-03 19:57:16 +08:00
2248356998 qq.com
ee4936b8c9 fix: 变量实时值偶发错误
feat: 优化内存占用
2025-01-25 16:02:06 +08:00
2248356998 qq.com
3cb2592660 fix: 清空变量时空异常 2025-01-24 23:22:41 +08:00
2248356998 qq.com
574c901b40 v10迁移 2025-01-24 22:42:26 +08:00
2248356998 qq.com
7590ba4ad5 更新插件 2025-01-06 20:57:36 +08:00
Diego
39ce18f8bb 更新readme 2025-01-06 16:06:01 +08:00
Diego
777a4f9d3f 更新插件 2025-01-06 14:29:51 +08:00
Diego
b91a938787 更新构建脚本 2025-01-06 14:02:41 +08:00
Diego
c903abdb1b 更新admin 2025-01-06 11:24:49 +08:00
Diego
3279bc0580 更新构建脚本 2025-01-06 11:12:04 +08:00
Diego
bd32c9f49e 更新插件 2025-01-06 10:28:14 +08:00
Diego
5507088e3d 更新插件 2025-01-06 09:48:55 +08:00
2248356998 qq.com
37ad48ae4a 7.2.3.6
更新依赖包
2025-01-05 23:46:31 +08:00
2248356998 qq.com
120c6e6d87 7.2.3.5
opcuaclient: 心跳机制异常
2025-01-05 00:46:52 +08:00
2248356998 qq.com
866e907b7e 同步 2025-01-02 20:47:47 +08:00
2248356998 qq.com
2bd8c2cb10 更新mc1e插件 2025-01-02 20:45:19 +08:00
Diego
c6c9919178 更新依赖包 2025-01-02 16:45:31 +08:00
Diego
575bf9d1e0 update Version MSBuildProperty 2025-01-02 13:56:38 +08:00
Diego
82a56e0285 更新构建脚本 2025-01-02 12:56:52 +08:00
Diego
25d5f7c132 设定动态编译缓存目录 2025-01-02 12:27:57 +08:00
Diego2098
a3e9ecf30f !56 恢复插件隔离
* 恢复插件域
2025-01-02 04:03:14 +00:00
2248356998 qq.com
ec5ff0a07f 7.2.1.3
更新mqttnet版本
更新admin
2025-01-01 16:25:19 +08:00
Diego
be836d30c5 更新admin 2024-12-30 12:11:08 +08:00
2248356998 qq.com
42b1529a5f 添加Release解决方案 2024-12-28 10:35:02 +08:00
2248356998 qq.com
47708c4807 添加Release解决方案 2024-12-28 10:30:17 +08:00
2248356998 qq.com
d2a51e004c 7.2.0.99
规则引擎:自定义脚本接口定义修改,增加Logger属性
数据库上传插件:回退修改,恢复string类型Value字段
2024-12-28 04:19:37 +08:00
2248356998 qq.com
ab14230101 修复通道报文日志失效 2024-12-26 21:36:09 +08:00
Diego
4bcf8c1f78 修复设备通讯变量点位 2024-12-26 15:38:19 +08:00
Diego
44d00e9da3 数据库插件实体类修改! 2024-12-26 14:45:25 +08:00
Diego
d7e6a4493c 更新依赖 2024-12-26 13:22:51 +08:00
Diego
53e89d8c54 7.2.0.95
修复 LL优先级比L低
添加报警属性验证规则
2024-12-25 12:26:06 +08:00
Diego
4497c13634 代码清理 2024-12-25 10:53:43 +08:00
Diego
4a35fade46 更新插件 2024-12-24 17:44:51 +08:00
Diego
6cba0601fd fix: 上一提交导致other通道创建错误 2024-12-24 17:21:10 +08:00
Diego
ed4332ea78 更新readme 2024-12-24 14:14:30 +08:00
Diego
aba069cec5 7.2.0.91
修复dlt645驱动
调整异步方法
2024-12-24 14:03:39 +08:00
Diego
8a82ac0a11 更新测试方法 2024-12-23 16:43:35 +08:00
Diego
1cd1456d75 7.2.0.87
更新admin
2024-12-23 15:31:16 +08:00
Diego
b791a3eb10 修复 动态插件属性 验证错误 2024-12-23 15:21:42 +08:00
2248356998 qq.com
3b22a8b170 7.2.0.85
更新依赖
2024-12-22 15:59:15 +08:00
2248356998 qq.com
419e8214ca 更新规则引擎,优化性能 2024-12-20 22:32:37 +08:00
Diego
b9f8571f0f 7.2.0.83
fix(VariableRuntime): 修改判断变量变化方法
feat(TestVariable): 修改添加测试变量UI
2024-12-20 14:28:44 +08:00
Diego
c6d9a9d7f8 修改判断变量变化方法 2024-12-20 14:27:29 +08:00
Diego
310aba6ccb 修改添加测试变量UI 2024-12-20 12:11:20 +08:00
Diego
9bd89ac4f6 添加 git 更新子模块 bat 2024-12-19 18:40:13 +08:00
Diego
ea6a51dca9 更新admin 2024-12-19 18:16:01 +08:00
Diego
e701bcc50c 调整插件基类,增加上传模式配置 2024-12-19 18:15:47 +08:00
Diego
a1abf06e75 7.2.0.78
更新opc插件
2024-12-19 16:11:13 +08:00
Diego
76ace394b0 更新opcua插件 2024-12-19 15:21:21 +08:00
Diego
4dac462f8f 更新解决方案 2024-12-19 12:21:32 +08:00
Diego
039672b1e7 更新admin 2024-12-19 12:19:55 +08:00
Diego
1b26ecbbf5 添加 admin 子模块 2024-12-19 11:54:14 +08:00
Diego2098
f4a7e96943 add Admin submodule.
Signed-off-by: Diego2098 <2248356998@qq.com>
2024-12-19 03:17:59 +00:00
Diego
a45bc2954f 移动文件夹 2024-12-19 11:16:24 +08:00
Diego
62f32467b7 移动文件夹 2024-12-19 11:15:18 +08:00
Diego
600a1bf201 7.2.0.75 2024-12-18 12:36:49 +08:00
Diego
7e196e7aa6 更新admin 2024-12-17 14:16:15 +08:00
Diego
9ad3507b66 7.2.0.72
修复变量导入错误
2024-12-17 13:51:51 +08:00
Diego
add1bdfcf6 更新admin 2024-12-17 13:26:27 +08:00
Diego
7ea8a7c079 7.2.0.70
修复初始值解析
2024-12-17 10:51:52 +08:00
Diego
28e31f5165 7.2.0.69
更新实体特性
2024-12-17 10:22:03 +08:00
Diego
10a6975c5d 7.2.0.68
更新modbusSlave插件,适配03功能码单写bit
2024-12-16 18:24:16 +08:00
Diego
b34ea87660 7.2.0.67
更新db插件,增加 单独配置实时表上传间隔时间 属性
2024-12-16 17:38:42 +08:00
Diego
86ed69c50b 7.2.0.66
更新版本
2024-12-16 11:29:52 +08:00
Diego
02e824154c 7.2.0.65
读取间隔增加cron支持
2024-12-16 11:13:23 +08:00
Matrix
dc973c8491 !55 TimeTick 新增 Cron
* TimeTick 新增 cron定时
2024-12-16 03:03:39 +00:00
2248356998 qq.com
0a28e3a8d3 7.2.0.64 2024-12-15 23:41:07 +08:00
2248356998 qq.com
7a48c260e1 更新插件 2024-12-14 15:22:19 +08:00
Diego
c55c49a3a2 添加TS自定义二进制序列化方式 2024-12-13 12:19:12 +08:00
Diego
0fc9b06d12 7.2.0.62
优化上传插件批量性能
2024-12-11 15:52:00 +08:00
Diego
d71ad5a6bf 单文件发布 2024-12-11 11:13:58 +08:00
Diego
f0b3028306 更新规则引擎 2024-12-11 09:15:27 +08:00
2248356998 qq.com
752992c527 7.2.0.60
更新admin
删除不需要的文件
2024-12-10 14:30:18 +08:00
Diego
43c4476396 7.2.0.58
更新aop框架版本
2024-12-09 15:43:29 +08:00
Diego
f8172bed56 修复单文件发布 2024-12-09 11:33:00 +08:00
Diego
c1f71b4cfc 7.2.0.57
添加数据库解密示例

更新依赖包
2024-12-09 11:11:16 +08:00
2248356998 qq.com
4799da15e7 7.2.0.53
更新语言资源
更新规则引擎
2024-12-08 22:01:16 +08:00
2248356998 qq.com
4936e47c7a 7.2.0.50 2024-12-07 18:34:51 +08:00
2248356998 qq.com
cb965373aa 更新插件 2024-12-07 18:30:25 +08:00
2248356998 qq.com
654a91184a 7.2.0.48
更新依赖
2024-12-07 17:51:48 +08:00
Diego
57997f7f4b 优化规则引擎 2024-12-06 10:45:56 +08:00
Diego
ca2f5be3d1 7.2.0.46
更新Admin,修复错误插件dll导致程序无法启动的问题
2024-12-05 17:15:54 +08:00
Diego
1b091073f1 7.2.0.45 2024-12-05 11:10:43 +08:00
Diego
85d2d3c442 更新pro插件 2024-12-05 11:09:31 +08:00
Diego
d77dfd63cf 增加规则引擎插件 2024-12-05 02:13:02 +08:00
Diego
db2bf52fca 调整脚本编辑UI 2024-12-04 08:48:27 +08:00
Diego
2c62d97440 迁移重启后台按钮到设备状态页面 2024-12-03 22:23:26 +08:00
Diego
53b2e64214 修复net6 界面白屏 2024-12-02 18:11:16 +08:00
Diego
ccf82a3ee5 添加layout显示条件 2024-12-02 17:08:50 +08:00
Diego
9cb6f35e60 修改代码规范文件,更新依赖包 2024-12-02 11:28:54 +08:00
2248356998 qq.com
da2e33a040 7.2.0.36 2024-11-30 21:00:05 +08:00
2248356998 qq.com
f2d260bfa4 动态调整线程池最大活动数目 2024-11-30 01:53:26 +08:00
Diego
783c7244f9 修正語言資源 2024-11-29 17:05:21 +08:00
Diego
c9287e0e63 更新依赖
命名空间变化
2024-11-29 16:53:00 +08:00
Diego
69b84d115c 添加变量导入校验缓存 2024-11-29 10:01:02 +08:00
Diego
1745b898b1 删除文件 2024-11-29 09:22:36 +08:00
Diego
5ba4c85249 更新依赖包,转移部分代码到插件仓库 2024-11-28 21:14:14 +08:00
Diego
03c87bb46d 更新admin 2024-11-28 14:13:50 +08:00
Diego
dff5a76e9e 更新docker构建脚本 2024-11-27 16:05:16 +08:00
Diego
50386f4ca4 cache try dispose 2024-11-26 11:29:52 +08:00
Diego
de6ba2ec80 更新版本 2024-11-25 13:26:11 +08:00
Diego
ce126015d9 更新pro插件 2024-11-25 12:52:04 +08:00
Diego
f2337c3d43 更新依赖 2024-11-25 11:38:09 +08:00
Diego
41b59d322a 更新依赖,添加bacnet,HJ212 2024-11-25 11:32:28 +08:00
2248356998 qq.com
dfea7c111e 更新依赖 2024-11-23 17:36:59 +08:00
2248356998 qq.com
3d5d672297 更新版本 2024-11-22 19:57:31 +08:00
2248356998 qq.com
e4dcc6f342 更新插件 2024-11-22 19:57:11 +08:00
Diego
9847249611 修改非数采插件的引用方式 2024-11-21 23:52:31 +08:00
Diego
19742a54ec 更新插件 2024-11-21 18:37:11 +08:00
Diego
5af9ae7a80 修复上个版本导致驱动sign量无法正常返回的bug 2024-11-21 17:42:11 +08:00
Diego
78962a4a75 去掉api日志显示 2024-11-21 17:05:13 +08:00
Diego
9a35d826aa 添加 更新服务 启用选项 2024-11-21 16:47:09 +08:00
Diego
c9cdc89d35 更新版本 2024-11-20 18:28:16 +08:00
Diego
33b75703ba 更新種子數據 2024-11-20 09:40:49 +08:00
Diego
ca55aa3a24 更新插件 2024-11-19 17:03:52 +08:00
Diego
95307c3902 更新版本文件 2024-11-19 12:10:40 +08:00
Diego
89c8eae7e2 更新依赖 2024-11-19 10:48:49 +08:00
Diego
91614772dc 更新版本 2024-11-19 10:28:42 +08:00
Diego
cd497ab4dc 更换快捷方式实现方式 2024-11-18 10:03:45 +08:00
2248356998 qq.com
f81895905e 更新依赖包 2024-11-18 00:24:18 +08:00
2248356998 qq.com
d82fafaa7a 更新后台版本 2024-11-17 14:14:28 +08:00
2248356998 qq.com
0ea01acc46 驱动在丢弃错误报文时提示日志 2024-11-16 20:58:46 +08:00
2248356998 qq.com
df55792a68 调试工具css更新 2024-11-16 20:29:36 +08:00
Diego
6a19c45269 更新版本 2024-11-15 21:51:39 +08:00
Diego
23ee345441 更新插件 2024-11-15 21:13:43 +08:00
Diego
0e8ff253f3 更新admin版本 2024-11-15 16:53:44 +08:00
2248356998 qq.com
89bddb0bc4 修复双机热备功能,添加日志显示 2024-11-14 22:34:03 +08:00
Diego
77bbca9bb3 调整公共页面位置 2024-11-14 15:13:34 +08:00
2248356998 qq.com
1acd4d8d58 更新版本 2024-11-14 00:31:33 +08:00
2248356998 qq.com
4db72a712d 更新依赖 2024-11-13 22:08:59 +08:00
Diego
da2b7ba08e 调整css 2024-11-13 17:32:39 +08:00
Diego
f8b49411bf 添加net9.0 2024-11-13 16:15:04 +08:00
Diego
a04b0d99b0 添加更新服务器 2024-11-12 16:14:09 +08:00
Diego
9e9735f617 更新admin版本 2024-11-11 17:28:34 +08:00
Diego
f906b36f01 更新插件版本 2024-11-11 17:26:12 +08:00
Diego
a9d1f4f854 更新版本 2024-11-10 20:29:42 +08:00
Diego
d017ae905f 添加重启软件功能 2024-11-10 01:18:05 +08:00
Diego
bede280507 种子数据默认不更新 2024-11-08 00:35:08 +08:00
Diego
ea130047bc 修复配置 2024-11-07 16:36:18 +08:00
Diego
d77d8de63e 更新依赖包 2024-11-07 16:27:44 +08:00
Diego
f5413d9202 修复插件关联设备数量缓存不刷新 2024-11-07 15:08:15 +08:00
Diego
559fc8f216 更新后台 2024-11-06 16:25:10 +08:00
Diego
34b2df911d 更新插件版本 2024-11-06 13:16:47 +08:00
Diego
3d5a8a8cbd Merge branch 'master' into release 2024-11-06 10:19:16 +08:00
Diego
2b07097e14 导入变量时写入机构id 2024-11-06 10:18:52 +08:00
Diego
372e943d8b Merge branch 'master' into release 2024-11-06 09:32:24 +08:00
Diego
95afcedc4f 更新后台 2024-11-06 09:32:01 +08:00
Diego
c1dc8f017c Merge branch 'master' into release 2024-11-06 09:15:04 +08:00
Diego
dbeddca263 整理格式 2024-11-06 09:13:09 +08:00
Diego
e65d133dec 更新依赖包 2024-11-06 09:02:11 +08:00
Diego
b5e1dea1c2 Merge branch 'master' into release 2024-11-05 14:52:58 +08:00
Diego
3f19469939 更新后台 2024-11-05 14:52:27 +08:00
Diego
87874b037a Merge branch 'master' into release 2024-11-05 11:59:50 +08:00
Diego
adda6841d1 更新后台版本 2024-11-05 11:58:24 +08:00
Diego
a8092b921b 添加机构 2024-11-05 06:05:23 +08:00
Diego
930e4d69d1 恢复sqlite数据库类型 2024-11-05 05:41:07 +08:00
Diego
d9219df45b 后台管理添加机构功能 2024-11-05 05:39:07 +08:00
Diego
a6d4ec28db 删除不必要的构建 2024-10-29 14:26:06 +08:00
Diego
b29e13f777 更新构建脚本 2024-10-28 17:08:35 +08:00
Diego
9363b78ff6 Merge branch 'master' of https://gitee.com/ThingsGateway/ThingsGateway 2024-10-28 16:58:42 +08:00
Diego
eba411fec7 更新插件 2024-10-28 16:49:09 +08:00
Diego2098
9afe99e134 !53 7.0.1.6
* Merge branch 'release' of gitee.com:ThingsGateway/ThingsGateway into master
* 更新依赖包
* 更新依赖包,雪花ID方法
* 更新依赖包,雪花ID方法
2024-10-28 00:40:55 +00:00
Diego2098
6678856178 Merge branch 'release' of gitee.com:ThingsGateway/ThingsGateway into master
Signed-off-by: Diego2098 <2248356998@qq.com>
2024-10-28 00:40:40 +00:00
Diego
a1fea38c2c 更新依赖包 2024-10-28 08:32:18 +08:00
Diego2098
2d3265e66d !52 7.0.1.5
* 更新依赖包,雪花ID方法
* 更新依赖包,雪花ID方法
2024-10-23 11:03:51 +00:00
Diego
f6d4400db9 更新依赖包,雪花ID方法 2024-10-23 19:01:13 +08:00
Diego
6d892a9266 更新依赖包,雪花ID方法 2024-10-23 19:00:23 +08:00
Diego2098
356fa08da5 !51 7.0.1.4
Merge pull request !51 from Diego2098/master
2024-10-16 15:13:04 +00:00
Diego
2225f8c890 修复数组类型比较错误 2024-10-16 22:37:35 +08:00
Diego2098
d1a89739f9 !50 7.0.1.3
Merge pull request !50 from Diego2098/master
2024-10-16 05:23:38 +00:00
Diego
6ec6896763 Merge branch 'master' of https://gitee.com/dotnetchina/ThingsGateway 2024-10-16 13:19:42 +08:00
Diego
9fb718d610 更新依赖包 2024-10-16 13:18:09 +08:00
Diego2098
c913b89a47 !49 7.0.1.2
Merge pull request !49 from Diego2098/master
2024-10-16 03:59:53 +00:00
Diego2098
58b45693b7 !48 7.0.1.2
Merge pull request !48 from Diego2098/release
2024-10-16 03:59:16 +00:00
Diego
29d3ece9b1 更新依赖包 2024-10-15 17:47:12 +08:00
Diego2098
7e5db75230 !47 7.0.1.2
Merge pull request !47 from Diego2098/master
2024-10-14 11:51:48 +00:00
Diego
283c0b9845 修改:更新脚本编辑UI 2024-10-14 19:51:22 +08:00
Diego2098
071a0f1651 !46 7.0.1.1
Merge pull request !46 from Diego2098/master
2024-10-14 11:07:55 +00:00
Diego
1a116557a4 修改:移入部分项目代码 2024-10-14 19:06:09 +08:00
Diego
1468297626 修改:更新依赖包 2024-10-12 23:41:40 +08:00
Diego
87e94fdf52 修改:更新依赖包 2024-10-12 10:59:12 +08:00
Diego
64e15c33c8 修改:更新依赖包 2024-10-12 10:57:10 +08:00
Diego2098
7170f435d1 !45 7.0.0.26
Merge pull request !45 from Diego2098/master
2024-10-11 07:31:21 +00:00
Diego
9942be0493 修复:更新依赖包,修复脚本编辑框无法显示的问题 2024-10-11 15:29:45 +08:00
Diego
eaad36277f 修改:脚本编辑更改代码编辑器 2024-10-10 17:25:37 +08:00
Diego
37cc498568 修改:脚本编辑更改代码编辑器 2024-10-10 16:44:39 +08:00
Diego
8a3191340a 修改:更新依赖包 2024-10-09 22:15:56 +08:00
Diego
0f4e998f0a 修改:更新依赖包 2024-10-08 13:40:43 +08:00
Diego
0c93b649ba 新增:预添加网关检查更新,网关系统重启等页面 2024-10-08 13:27:45 +08:00
Diego
947d269877 新增:预添加网关检查更新,网关系统重启等页面 2024-10-08 13:21:55 +08:00
Diego
b4b9453948 新增:语言资源 2024-10-08 09:59:20 +08:00
Diego
b99a4cd095 修改:插件添加方式 2024-10-06 00:08:40 +08:00
Diego
a363d5aa46 修改:业务插件变量属性添加enable字段 2024-10-05 23:05:27 +08:00
Diego
ae442dabb4 新增:添加设备关联变量跳转 2024-10-05 21:23:00 +08:00
Diego
1477c88397 新增:添加插件关联设备数量字段 2024-10-05 21:22:52 +08:00
Diego
4172462938 新增:添加专业版插件标识 2024-10-05 13:54:43 +08:00
Diego
27341ba4f8 修改:更新nuget依赖 2024-10-02 09:19:08 +08:00
Diego2098
7443076094 修改:更新nuget依赖 2024-10-02 09:15:41 +08:00
Diego
a764bb4b1d 构建:共用版本变量 2024-09-30 12:20:05 +08:00
Diego
57130e1af7 release:7.0
代码架构重构,兼容6.0数据库
2024-09-30 01:39:39 +08:00
Diego
3f8a354c99 refactor: 更新依赖 2024-09-23 16:59:26 +08:00
Diego
0b10d92929 release:6.1.0.33 2024-09-22 22:28:32 +08:00
Diego
1a1c55e661 docs: 更新文档 2024-09-22 22:27:44 +08:00
Diego
87768f9e8b release:6.1.0.32
refactor: 合并工具库代码

fix: 操作日志 orm特性 在特定数据库类型下 可能会报错

refactor: 部分文件更换目录
2024-09-22 21:38:36 +08:00
Diego
d079f50364 fix: 操作日志 orm特性 在特定数据库类型下 可能会报错 2024-09-19 12:32:10 +08:00
Diego
72a89835c5 refactor: 合并工具库代码 2024-09-19 11:17:13 +08:00
Diego
39d686810b release:6.1.0.29
feat: 增加变量业务属性自定义UI

fix: 设备状态更新错误

refactor: 变量导出导入excel排序
2024-09-18 09:14:56 +08:00
Diego
d936626001 feat: 增加变量业务属性自定义UI 2024-09-18 09:05:48 +08:00
Diego2098
cdce1c5ea6 refactor: 更新依赖 2024-09-17 16:00:48 +08:00
Diego
d59530a54f other: 更新文档地址 2024-09-14 18:17:25 +08:00
Diego
fe480811fb fix: 设备状态更新错误 2024-09-14 15:41:27 +08:00
Diego
2e3e0d34c3 refactor: 变量导出导入排序 2024-09-14 14:22:42 +08:00
Diego
1e2984d0d9 refactor: 更新依赖 2024-09-14 03:02:51 +08:00
Diego
3e9fe693c7 release:6.1.0.27
feat: 添加链路关闭前事件
feat: 添加AB PLC ControlLogix协议驱动

refactor: 更新依赖
refactor: mqttCollect支持简单json对象
refactor: 每次采集成功都更新设备成功状态
2024-09-14 01:14:09 +08:00
Diego
63161838d8 feat: 添加链路关闭前事件
refactor: 更新依赖
refactor: mqttCollect支持简单json对象
refactor: 每次采集成功都更新设备成功状态
2024-09-12 18:12:38 +08:00
Diego
7c92951ae9 release:6.1.0.26
feat: 添加保存值功能
feat: 增加特殊地址变量,方便用户自定义设备状态变量或当前设备计算点

refactor: 繁體詞彙修改與新增UI翻譯
refactor: 更新依赖
2024-09-10 11:49:58 +08:00
Diego
59a25854ef feat: 添加保存值功能 2024-09-10 10:59:58 +08:00
rotoyang
3ca5768974 繁中語系更新 (#21)
* 繁體詞彙修改與新增UI翻譯

* TYPO

---------

Co-authored-by: RY <ry@address.no>
2024-09-10 10:23:33 +08:00
Diego
9a2dce43dd feat: 增加特殊地址变量,方便用户自定义设备状态变量或当前设备计算点 2024-09-09 16:21:24 +08:00
Diego
b7fce4317b release:6.1.0.25
docs: 更新采集插件开发文档
fix: 偶发重启后台出现变量重复
refactor: 更新依赖
2024-09-09 14:29:13 +08:00
Diego
97d9514b00 fix(mqttcollect): 重试时间默认为0错误 2024-09-08 16:18:07 +08:00
Diego
58f88708fa docs: 更新文档 2024-09-07 21:24:11 +08:00
Diego
d79c874aa5 release:6.1.0.24
fix: modbus、s7 读取字节某一位开始的数组时,请求长度太大
feat: linux桌面软件添加net8实现
2024-09-07 20:03:41 +08:00
Diego2098
58917c1ff8 refactor: 更新依赖 2024-09-07 18:24:08 +08:00
Diego2098
13b171a62d fix: modbus、s7 读取字节某一位开始的数组时,请求长度太大 2024-09-07 18:23:39 +08:00
Diego2098
f0a601922a fix: modbus、s7 读取字节某一位开始的数组时,请求长度太大 2024-09-07 16:23:59 +08:00
Diego
d90090b35e release:6.1.0.23
feat: 增加mqtt采集插件
fix: net6框架中的opcuaserver缺少dll文件
2024-09-06 15:12:27 +08:00
Diego
094d1142e7 fix: net6框架中的opcuaserver缺少dll文件 2024-09-06 10:08:11 +08:00
Diego
eb09d1c925 refactor: 恢复插件创建方式 2024-09-06 03:10:44 +08:00
Diego
bd5d75361e refactor: 恢复插件创建方式 2024-09-06 03:10:16 +08:00
Diego
5d7c0c635b release:6.1.0.21
feat: 关系库存储插件支持动态表格式脚本
refactor: 内存变量插件修改读取逻辑
2024-09-06 02:06:08 +08:00
Diego
606f538bf3 other: 修改引入条件 2024-09-06 01:02:23 +08:00
Diego
574c0eea27 feat: 关系库存储插件支持动态表格式脚本 2024-09-06 00:59:19 +08:00
Diego
4730cbc543 refactor: 内存变量插件修改读取逻辑 2024-09-05 15:29:23 +08:00
Diego
5c63359550 release:6.1.0.20
feat: 添加报警确认api
feat: 添加插件属性自定义ui
2024-09-05 11:45:28 +08:00
Diego
ec3607f779 refactor: 更新繁体资源 2024-09-04 16:58:13 +08:00
Diego
7efd0f8098 release:6.1.0.19
refactor: 更新依赖
feat: 添加繁体资源
2024-09-04 16:39:57 +08:00
Diego
2a7c30a21a refactor: netcoreApp添加去重 2024-09-04 16:12:39 +08:00
Diego2098
2639c3ee3f !43 feat: 添加繁体资源
* feat: 添加繁体资源
2024-09-04 08:08:37 +00:00
Diego2098
547e0153cb !42 refactor: 更新依赖 2024-09-04 03:21:17 +00:00
Diego
423664fcfa other: 补充忽略文件 2024-09-04 08:41:06 +08:00
Diego2098
c986c230ef !41 release:6.1.0.17
* 添加pro nuget包
* 更新依赖
2024-09-03 14:37:57 +00:00
Diego
7c6001f76e refactor: 修改插件构建项 2024-09-03 16:32:38 +08:00
Diego
d3620946ac fix(Admin): adminIndex编译错误 2024-09-02 17:01:57 +08:00
Diego2098
479643221c !40 release:6.1.0.1
release:6.1.0.1

refactor: 部分插件方法访问权限修改
refactor: 优化采集/业务后台服务可读代码
refactor(modbusSlave): 默认建立时启动服务
refactor(modbusSlave): 对于设置的不同设备地址,不返回错误码(不再响应,以防止干扰通讯链路中的其他设备)
refactor: 更新依赖库
2024-09-02 08:08:59 +00:00
Diego
c9ef8bcf6a fix: 报警插件记录到questdb时出现错误sql 2024-08-30 17:06:54 +08:00
Diego
d655a7c2f6 fix: opc插件调试日志不显示 2024-08-30 13:54:57 +08:00
Diego
306861d3b4 release:6.0.5.30
refactor:  mqtt插件重启时忽略报错日志

fix(mqttClient): 订阅配置错误
fix: 获取实时报警api接口返回值错误
2024-08-30 13:22:30 +08:00
Diego
7abab41eed refactor: 更新注释 2024-08-30 08:58:59 +08:00
Diego
acc2691e33 fix: 获取实时报警api接口返回值错误 2024-08-29 17:41:06 +08:00
Diego
21a65956b0 refactor: mqtt插件重启时忽略报错日志 2024-08-29 16:14:33 +08:00
Diego
9738275ad1 fix: DB插件编译 2024-08-29 13:10:59 +08:00
Diego
7265034703 refactor: 更新构建项 2024-08-29 13:08:05 +08:00
Diego
9bcc45591d docs: 更新文档 2024-08-29 12:49:48 +08:00
Diego
38d657ba0e fix(mqttClient): 订阅配置错误 2024-08-29 12:43:10 +08:00
Diego
6a0d16c5bb release:6.0.5.29
refactor:  mqttServer不再保留全部变量遗嘱数据,可使用quest rpc获取
feat: 增加net6编译程序,只在低版本操作系统中推荐
2024-08-29 11:54:56 +08:00
Diego
490d4abb56 feat: 更新构建项 2024-08-29 10:48:48 +08:00
Diego
a7d0f7fc99 refactor: mqttServer不再保留全部变量遗嘱数据,可使用quest rpc获取 2024-08-28 17:46:04 +08:00
Diego
0d2d3ff528 release:6.0.5.28
refactor:  更新依赖库
refactor:  删除tab 扩展按钮,固定首页不可关闭
feat: 添加调试页面winbox窗口
2024-08-28 13:26:59 +08:00
Diego
526169f0aa release:6.0.5.27
refactor:  更新依赖库
feat: 日志组件添加等级筛选
feat: 补充多语言资源
fix: dlt645驱动上个版本提交bug
2024-08-27 16:43:59 +08:00
Diego
42940ff0e3 feat: 补充多语言资源 2024-08-27 14:55:10 +08:00
Diego
e9b943363d feat: 日志组件添加等级筛选 2024-08-27 14:24:26 +08:00
Diego
01e98ff10c refactor: 更新依赖库 2024-08-27 10:48:53 +08:00
Diego
d38981a17d release:6.0.5.26
feat: 关系库插件 添加 自动建库 功能
feat: 驱动库添加压测
2024-08-27 10:37:12 +08:00
Diego
7612e91691 feat: 关系库插件 添加 自动建库 功能 2024-08-27 08:38:19 +08:00
Diego
76b0f20033 release:6.0.5.25
fix: 单通道多设备时,偶发空指针错误
2024-08-26 18:06:27 +08:00
Diego
b78c0f8a29 refactor: 驱动库send方法默认添加锁 2024-08-26 11:45:50 +08:00
Diego
ea93c7c8fc release:6.0.5.24
feat: 基础库增加 net8 编译项
feat: SqlHisAlarm添加表名称配置属性
refactor:  默认server gc true,如有低内存需要,更改 MSBuild 项
2024-08-26 11:11:50 +08:00
Diego
8ac1952974 release:6.0.5.23
feat: 基础库增加 net8 编译项
feat: SqlHisAlarm添加表名称配置属性
refactor:  默认server gc true,如有低内存需要,更改 MSBuild 项
2024-08-26 11:02:21 +08:00
Diego
b4514a5bbf release:6.0.5.21
feat: 完善mqtt脚本,适配thingsboard
2024-08-25 18:10:26 +08:00
Diego
568053b06d feat: 增加多语言资源 2024-08-24 23:05:17 +08:00
Diego
bb180bfc39 release:6.0.5.20
refactor:  启动项目文件结构优化
2024-08-24 18:29:04 +08:00
Diego
5ee635caed fix: 字节池对象获取ArraySegment错误 2024-08-23 16:48:01 +08:00
Diego
5dfd7c8597 release:6.0.5.17
feat: 添加内存变量插件
refactor:  变量数据页面序列化数据概要json.net
2024-08-23 14:51:29 +08:00
Diego
fe61b75d7e feat: 添加内存变量插件 2024-08-23 13:11:28 +08:00
Diego
e7bf565418 feat: 添加内存变量插件 2024-08-23 13:11:06 +08:00
Diego
12071f6251 feat: 添加内存变量插件 2024-08-23 13:10:35 +08:00
Diego
72ed2e3ed0 release:6.0.5.16
docs: 更新文档
refactor:  questdb初始化失败时更新的时间为格里威治时间
2024-08-22 19:41:13 +08:00
Diego
d7c1f134fe release:6.0.5.15
docs: 更新文档
refactor:  更新依赖包
refactor:  优化UI卡顿问题
refactor:  await统一添加ConfigureAwait(false)
2024-08-22 19:22:45 +08:00
Diego
5072d9f7ad fix: mqtt脚本检查功能中的类型转换错误 2024-08-21 20:44:52 +08:00
Diego
5d42a1247a docs: 更新文档 2024-08-21 20:16:16 +08:00
Diego
ce64be22bd docs: 更新文档 2024-08-21 20:10:50 +08:00
Diego
36f9386e8d release:6.0.5.14
feat: 添加报警延时逻辑
feat: mqtt脚本添加检查按钮
fix(opcuamaster): 服务端时间戳选项在轮询模式下不生效
refactor:  aop插入日志ip字段 非null
2024-08-21 19:44:34 +08:00
Diego
e9dc963805 feat: mqtt脚本添加检查按钮 2024-08-21 18:19:39 +08:00
Diego
8854322997 fix(opcuamaster): 服务端时间戳选项在轮询模式下不生效 2024-08-21 16:08:13 +08:00
Diego
6018f1e8ca refactor: aop插入日志ip字段 非null 2024-08-21 12:25:53 +08:00
Diego
68f8ebb543 release:6.0.5.13
refactor:  修改用户中心的修改密码为密码输入框
refactor:  opcua轮询采集时异常捕获内容包含当前读取地址
2024-08-20 16:13:00 +08:00
youthalan
301f0218fd !39 修改用户中心的修改密码为密码输入框
修改用户中心的修改密码为密码输入框
2024-08-20 04:39:42 +00:00
Diego
a9c4a56893 other: 更新发布脚本 2024-08-19 18:07:00 +08:00
Diego
3ea3d72f11 refactor: 全屏按钮重复 2024-08-19 15:25:20 +08:00
Diego
33da5bf4a7 release:6.0.5.12
refactor:  更新依赖项
build:  修改构建脚本
build:  添加arm64 docker镜像
2024-08-19 13:08:05 +08:00
Diego
e3de01948a release:6.0.5.12
refactor:  更新依赖项
build:  修改构建脚本
build:  添加arm64 docker镜像
2024-08-19 13:06:02 +08:00
Diego
3cd92aaf54 other: winform标题修改 2024-08-18 21:17:43 +08:00
Diego
ab4e1996dd other: 添加演示站自动更新功能 2024-08-18 21:14:33 +08:00
Diego
b9ef082abf release:6.0.5.10
refactor:  photino版本退出时释放资源
feat:  添加winform版本
2024-08-18 18:34:14 +08:00
Diego
dac7186da3 Merge branch 'master' of https://gitee.com/dotnetchina/ThingsGateway 2024-08-18 04:03:15 +08:00
Diego
1fd6cc2b5e release:6.0.5.9
refactor: 封装furion swagger文档
refactor:简化代码
refactor:更新依赖包
2024-08-18 04:03:01 +08:00
youthalan
0b7da9790a !38 修复AdminTable的行编辑按钮和行删除按钮的回调显示
!38 修复AdminTable的行编辑按钮和行删除按钮的回调显示
2024-08-16 07:26:01 +00:00
Diego
a9e0e0ead6 other: 添加一键发布脚本 2024-08-16 13:05:57 +08:00
Diego
079754f1a9 release:6.0.5.7
refactor: 设备PluginType属性增加多语言资源键值
fix: 权限框架解决方案编译错误
refactor: index 首页 页面文件迁移至主程序
refactor:更新依赖包
2024-08-16 11:55:49 +08:00
Diego
c45b5b1e86 release:6.0.5.7
refactor: 设备PluginType属性增加多语言资源键值
fix: 权限框架解决方案编译错误
refactor: index 首页 页面文件迁移至主程序
2024-08-16 11:43:34 +08:00
Diego
2115cc685c fix: visual studio2022.17.11.0版本编译错误,razor条件编译方式更换 2024-08-15 15:58:00 +08:00
Diego
b99e56fc19 release:6.0.5.6 2024-08-15 11:48:45 +08:00
Diego
74c057eb84 refactor: 更新依赖库 2024-08-14 20:56:12 +08:00
Diego
e8ececc0dc other: 代码清理 2024-08-14 20:55:50 +08:00
Diego
ad120b7736 fix(chart): pie饼图加载异常,回退依赖版本 2024-08-14 15:13:35 +08:00
Diego
61c0711e79 release:6.0.5.5
fix: newlife.x工具库部分命名空间错误
refactor: DtuId属性描述添加'UTF8'
refactor: 更新依赖项
2024-08-14 11:52:35 +08:00
Diego
81c3f6fce0 refactor: 调整工具库命名空间 2024-08-13 18:33:54 +08:00
Diego2098
0a4416e633 !37 release:6.0.5.3
refactor: 完善桌面端版本多语言资源

refactor: 忽略部分文件夹
2024-08-13 08:49:17 +00:00
Diego
6bb712854d Merge branch 'master' of https://gitee.com/dotnetchina/ThingsGateway 2024-08-13 00:27:08 +08:00
Diego
46959e2407 docs: 更新文档 2024-08-13 00:27:00 +08:00
Diego2098
debbb049b0 !36 release:6.0.5.2
* feat: 增加IHostApplicationLifetime实现
* fix(FAIconList): js位置错误
2024-08-12 16:02:37 +00:00
Diego
375377fef9 release:6.0.5.1
refactor: 分离部分代码
refactor: 调整代码架构,分出blaor server与blazor hybrid架构的服务代码
2024-08-12 16:48:33 +08:00
Diego
d5758dd6a3 refactor: 代码清理 2024-08-12 14:22:07 +08:00
Diego
d5deffea58 Merge branch 'master' of https://gitee.com/dotnetchina/ThingsGateway 2024-08-11 18:10:35 +08:00
Diego
fadb43d9a1 release:6.0.4.61
refactor: 更新依赖库版本
refactor: card默认背景颜色更改
2024-08-11 18:10:24 +08:00
youthalan
044b641df0 !35 将快捷按钮归入到SPA模块中
* -将快捷按钮归入到SPA模块中
2024-08-09 01:48:19 +00:00
Diego
fbbacdb2ff Merge branch 'master' of https://gitee.com/dotnetchina/ThingsGateway 2024-08-08 10:57:09 +08:00
Diego
4bfd7acd96 release:6.0.4.60
refactor: 支持全局按钮权限
refactor: 修改服务类插件启动错误后的等待间隔时间
2024-08-08 10:56:23 +08:00
youthalan
ff03225cf4 !34 补充TableExtensionToolbarTemplate及TableExtensionToolbarBeforeTemplate属性
* -补充TableExtensionToolbarTemplate及TableExtensionToolbarBeforeTemplate属性
2024-08-07 05:54:09 +00:00
Diego
8e820c0e47 fix(s7): 插件写入时错误 2024-08-07 11:16:41 +08:00
Diego
d718314324 other: 更新readme 2024-08-06 14:21:45 +08:00
Diego
1c653ec1b1 release:6.0.4.58 2024-08-05 20:13:54 +08:00
Diego
fe16ddadce fix: sql历史数据分包查询错误 2024-08-05 11:23:33 +08:00
Diego
7a978054cc refactor: 默认的登录页路径设置 2024-08-05 10:42:27 +08:00
Diego
8ed3b5a747 refactor: 整理权限框架 2024-08-04 00:38:07 +08:00
youthalan
6885150800 !33 修复用户页面手机号显示问题
* -修复用户页面手机号显示问题
2024-08-02 03:53:49 +00:00
Diego
35d33a1c7d fix: 修复上一提交导致的字典服务错误 2024-08-02 00:26:41 +08:00
Diego
93a16bbd3c fix: 修复上一提交导致的字典服务错误 2024-08-02 00:08:28 +08:00
Diego
d3cf6a4985 fix: 修复上一提交导致的字典服务错误 2024-08-01 23:54:42 +08:00
Diego
8ef7200c32 fix: 修复上一提交导致的字典服务缓存实体类型错误 2024-08-01 23:07:43 +08:00
Diego
e43da5ba86 release:6.0.4.48 2024-08-01 22:13:56 +08:00
youthalan
10428b4340 !32 添加查询自定义字典参数
* -修改字典种子数据字段名称
* -添加查询自定义字典参数
2024-08-01 14:08:46 +00:00
Diego
43b7c05cd7 refactor: 删除空文件夹 2024-08-01 17:31:17 +08:00
Diego
057f64b04c refactor: 文件更名 2024-08-01 17:28:21 +08:00
Diego
0971d783f3 release:6.0.4.47 2024-08-01 14:54:39 +08:00
Diego
54aabad3e8 refactor: 添加桌面端导出服务 2024-07-31 17:18:53 +08:00
Diego
606fbb5fec build: 调整构建脚本 2024-07-31 11:14:27 +08:00
Diego
5093c27ba5 release:6.0.4.45
fix: 会话管理离线通知功能失效
2024-07-31 09:28:01 +08:00
Diego
1d3661c946 refactor: 添加桌面端后台服务启停; 2024-07-30 21:04:17 +08:00
Diego
304f7a068d release:6.0.4.43
refactor: 支持blazor hybrid;
feat(s7): 支持多写;
2024-07-30 20:45:22 +08:00
Diego
7ea91be3fc release:6.0.4.43
refactor: 支持blazor hybrid;
feat(s7): 支持多写;
2024-07-30 20:44:20 +08:00
Diego
d15464b1ae release:6.0.4.42
refactor: 支持blazor hybrid;
feat(s7): 支持多写;
2024-07-30 19:57:23 +08:00
Diego
150435f24e release:6.0.4.41
refactor: 支持blazor hybrid;
feat(s7): 支持多写;
2024-07-30 19:45:06 +08:00
Diego
e49507cd14 release:6.0.4.38
refactor: 支持blazor hybrid;
feat(s7): 支持多写;
2024-07-30 19:44:47 +08:00
Diego
ad3cc3ebb6 refactor: 添加Cors 2024-07-29 09:47:58 +08:00
Diego
ecaf53836d release:6.0.4.31 2024-07-26 17:25:03 +08:00
Diego
8fc36e7b24 refactor: s7打包后不再主动关闭连接,因为可能对通道多设备产生影响 2024-07-26 17:24:26 +08:00
Diego
1dbbac2aa3 refactor: 更新依赖包 2024-07-26 08:56:44 +08:00
Diego
4e5775fde4 fix(modbusServer): modbusServer 写入布尔量错误 2024-07-24 00:06:45 +08:00
Diego
9d81c7c366 other: 删除backup文件 2024-07-19 10:28:23 +08:00
Diego
2df0441f0f release:6.0.4.28
fix: 变量导出excel偶发插件属性丢失
refactor: 变量并发导出按变量名称排序
2024-07-19 09:12:17 +08:00
Diego
4216002ce5 feat: startup适配移动平台 2024-07-18 20:50:06 +08:00
Diego
1af6f4e151 feat: 导出扩展方法 2024-07-18 08:20:57 +08:00
Diego
05f284bc11 refactor(S7): 对于变长字符串,连读打包解析时,根据返回字节解析长度 2024-07-17 14:51:48 +08:00
Diego
40c19b3ad4 refactor: 完善多语言资源 2024-07-16 17:06:03 +08:00
Diego
d1d972cca0 refactor: 文件夹更名 2024-07-16 15:54:30 +08:00
Diego
2a969921d6 refactor: nuget包添加打包 2024-07-16 08:32:27 +08:00
Diego
4b3e1f5187 refactor: nuget包添加打包 2024-07-15 20:45:12 +08:00
Diego
561963aa26 refactor: 整理格式 2024-07-15 20:36:36 +08:00
Diego
6c2c192836 refactor: 整理格式 2024-07-15 17:44:32 +08:00
Diego
f0730f2295 refactor: 恢复格式 2024-07-14 21:17:09 +08:00
Diego
9df91d2b63 refactor: 整理格式 2024-07-14 17:48:17 +08:00
Diego
09da1941fd refactor: 整理格式 2024-07-14 17:45:18 +08:00
Diego
613c8e4c28 refactor: 整理格式 2024-07-14 14:49:40 +08:00
Diego
7b407fd34d refactor: 整理格式 2024-07-14 12:19:20 +08:00
Diego
fb7ff7a803 refactor: 整理格式 2024-07-14 12:18:13 +08:00
Diego
0c1f0e0522 refactor: 分离部分代码 2024-07-13 22:31:45 +08:00
Diego
b5d771e9aa refactor: 分离部分代码 2024-07-13 22:22:53 +08:00
Diego
2f64255895 refactor(modbus): 修改方法访问级别 2024-07-13 13:30:06 +08:00
Diego
5b629a5c40 release:6.0.3.81
更新依赖包
2024-07-12 16:40:08 +08:00
Diego
b749cf52c3 feat(RpcService): rpc多写性能优化 2024-07-12 09:33:17 +08:00
Diego
b9a36a9223 feat: 更新常用方法 2024-07-09 17:27:21 +08:00
Diego
32debf6e6b fix: modbus byte类型读取偏移 2024-07-09 16:45:52 +08:00
Diego
06f6ae01c9 feat(modbus):支持byte类型连读 2024-07-09 16:20:42 +08:00
Diego
db4d8ad802 release:6.0.3.76 2024-07-09 15:40:36 +08:00
Diego
9c82de9c9e feat(opcuaServer): 优化opcuaServer更新数据效率 2024-07-09 12:01:06 +08:00
Diego
8329835528 refactor: 更新依赖项 2024-07-08 18:35:27 +08:00
Diego
8e624aa31b refactor: 更新依赖项 2024-07-07 17:08:04 +08:00
Diego2098
a2e8741517 refactor: 实时数据页面去除变量值筛选 2024-07-06 17:03:58 +08:00
Diego2098
3b7c107e8f release:6.0.3.72
fix(dlt645): 最大需量及发生时间数据标识编码错误
2024-07-06 17:00:54 +08:00
Diego
558bc3f971 release:6.0.3.71
fix(s7): 打包时pdulength不需要再次减去其他字节量

fix(s7): 打包时尝试连接一次
2024-07-05 15:07:05 +08:00
Diego
90a326f380 refactor: 实时数据页面去除变量值排序 2024-07-04 23:08:57 +08:00
Diego
867dc1ae35 refactor: 实时数据页面去除变量值排序 2024-07-04 22:53:20 +08:00
Diego
3f555464f7 fix(s7): 非主动发送时忽略解析 2024-07-04 22:35:38 +08:00
Diego
c0c0782258 release:6.0.3.69
fix(s7):写入结果错误
2024-07-04 19:18:24 +08:00
Diego
377f57bcb6 release:6.0.3.68
refactor: modbustcp修改错误
refactor: 连接失败时延时返回
refactor: 添加Dtu心跳回应间隔
2024-07-04 16:11:16 +08:00
Diego
a51253f1e5 refactor: modbustcp修改错误 2024-07-04 10:35:58 +08:00
Diego
e674e94da6 refactor: 驱动连接失败时延时返回 2024-07-04 10:28:02 +08:00
Diego
93a415f6d3 refactor: 添加Dtu心跳回应间隔 2024-07-04 10:04:10 +08:00
Diego
9364b97692 release:6.0.3.67 2024-07-03 17:46:38 +08:00
Diego
030915c9ea refactor: modbus排除干扰报文 2024-07-03 17:41:22 +08:00
Diego
10882c309a refactor: 修改 未选择数据时,批量编辑按钮提示信息 2024-07-03 15:11:52 +08:00
Diego
8232fde160 refactor: s7 2024-07-03 09:29:03 +08:00
Diego
45c3474d4d feat: 更新主题修改方式 2024-07-01 12:12:03 +08:00
Diego
c5a9e85343 release:6.0.3.66
feat: SQHisAlarm 支持questDB数据库
2024-07-01 10:20:19 +08:00
Diego
8c7ef59583 release:6.0.3.66
feat: SQHisAlarm 支持questDB数据库
2024-07-01 09:33:39 +08:00
Diego
36404b5c92 release:6.0.3.65 2024-06-29 18:53:05 +08:00
Diego
9949a117be refactor: 优化dtu服务显示页面 2024-06-29 17:07:45 +08:00
Diego
a3896db4f5 fix: signalr client在blazor server中,指定的url需按本机地址 2024-06-29 15:27:19 +08:00
Diego2098
f668062cab release:6.0.3.64 2024-06-29 12:02:04 +08:00
Diego2098
bac0721078 refactor: 任务启动前捕获操作取消日志 2024-06-29 11:46:51 +08:00
Diego2098
e29d7244d8 release:6.0.3.63 2024-06-29 10:36:36 +08:00
Diego2098
5a34b91a7a release:6.0.3.62 2024-06-29 08:17:28 +08:00
Diego2098
eaac8b1428 release:6.0.3.62
fix: dtu插件错误
2024-06-29 08:11:28 +08:00
Diego2098
6c6275dc88 release:6.0.3.61 2024-06-29 01:48:45 +08:00
Diego2098
bd350ae679 fix: tcpService被动连接读取错误 2024-06-29 00:53:32 +08:00
Diego
cadee28c68 release:6.0.3.60 2024-06-28 18:38:57 +08:00
Diego
3534828a99 feat: 支持DataService 2024-06-28 15:59:03 +08:00
Diego
e1c5777e25 release:6.0.3.59 2024-06-28 15:41:56 +08:00
Diego
63553d4dd3 release:6.0.3.59 2024-06-28 15:35:15 +08:00
Diego
6033d779fc release:6.0.3.58 2024-06-28 15:24:29 +08:00
Diego
97db27e61f release:6.0.3.57 2024-06-27 18:57:04 +08:00
Diego
8ed861c05f release:6.0.3.56 2024-06-27 15:55:54 +08:00
Diego
4d416657bf release:6.0.3.55 2024-06-27 12:24:21 +08:00
Diego
ede0399275 release:6.0.3.55 2024-06-27 12:20:42 +08:00
Diego
1a28ada04c fix: 服务启动时状态设置错误 2024-06-27 11:36:14 +08:00
Diego
8ac771cde4 release:6.0.3.51 2024-06-27 10:54:25 +08:00
Diego
c6afbbfc73 fix: 通道多设备时,适配器设置偶发错误 2024-06-27 10:54:06 +08:00
Diego
5ba71e8109 refactor: modbus/s7 2024-06-27 10:43:31 +08:00
Diego
a0d2922aca fix: 菜单缓存未及时刷新 2024-06-26 21:06:53 +08:00
Diego2098
446610b9df release:6.0.3.50 (#10)
release:6.0.3.50
2024-06-26 20:16:31 +08:00
Diego
4905eea503 refactor: modbus插件删除并发数量 2024-06-24 17:59:08 +08:00
Diego
519fc128f6 refactor: Admin 2024-06-24 16:25:04 +08:00
Diego
cc10955483 refactor: 修改测试库 2024-06-24 12:16:19 +08:00
Diego
e0bd47bb87 refactor: 修改注释 2024-06-24 10:48:12 +08:00
Diego
fb0c3c4a06 release:6.0.3.47 2024-06-24 10:39:19 +08:00
Diego
ceef1fdaf2 release:6.0.3.47 2024-06-24 10:38:05 +08:00
Diego
e1ac287ed1 release:6.0.3.46 2024-06-24 10:19:17 +08:00
Diego2098
29cd3a5945 release:6.0.3.44 2024-06-23 22:49:01 +08:00
Diego2098
cab082166b release:6.0.3.38 2024-06-23 00:01:26 +08:00
Diego
711dfd4da9 release:6.0.3.35 2024-06-21 18:18:28 +08:00
Diego
643948331d other: 更新demo 2024-06-21 18:10:13 +08:00
Diego2098
119030f1a5 release:6.0.3.34 2024-06-21 18:05:20 +08:00
Diego2098
3efee3dc52 refactor: 修改DTU未连接的错误提示 2024-06-21 18:01:15 +08:00
Diego2098
70716d5121 fix: mapster忽略大小写策略错误,导致部分插件属性映射错误 2024-06-21 09:43:11 +08:00
Diego
a7d11ead62 fix: 调试工具多读功能寄存器数据类型未绑定 2024-06-20 18:32:51 +08:00
Diego
017830e433 docs: 更新文档 2024-06-20 18:09:38 +08:00
Diego
bceb175c75 release:6.0.3.32 2024-06-20 16:49:53 +08:00
Diego
98277c6b71 release:6.0.3.32 2024-06-20 16:49:01 +08:00
Diego
b227fbe523 feat(opcda): 值变化事件添加组名称参数 2024-06-20 16:48:37 +08:00
Diego
ac6659a293 refactor: 通道释放等待池 2024-06-20 14:42:53 +08:00
Diego
30a24ced1d refactor: 修改日志输出顺序 2024-06-20 13:02:51 +08:00
Diego
3d1f4ae2ed fix: blazor form验证 2024-06-19 19:28:23 +08:00
Diego
e86aff049c fix(调试工具): 断开连接 2024-06-19 18:55:33 +08:00
Diego
8ec0ba7c9e other: 更新demo 2024-06-19 17:16:00 +08:00
Diego
c2898f0b2e other: 更新demo 2024-06-19 15:35:30 +08:00
4077 changed files with 399327 additions and 115575 deletions

10
.gitignore vendored
View File

@@ -364,12 +364,8 @@ FodyWeavers.xsd
/src/*Pro*/
/src/*Pro*
/src/**/*Pro*
/src/*pro*
/src/*pro*/
/doc/.*
/doc/build/
/src/ThingsGateway.Server/.config/
/src/nuget.exe
/src/nupkgs/
/src/nupkgs
/src/ThingsGateway.Server/Configuration/GiteeOAuthSettings.json
/src/.idea/

View File

@@ -85,7 +85,7 @@
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
as of the date such litigation is field.
4. Cachetribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without

101
README.md
View File

@@ -1,72 +1,101 @@
# ThingsGateway

## Introduction

A cross-platform, high-performance edge data collection gateway based on net8, capable of handling millions of data points per.
A cross-platform, high-performance edge data collection gateway based on net9.

## Documentation

[Documentation](https://kimdiego2098.github.io/).
[Documentation](https://thingsgateway.cn/).

[NuGet](https://www.nuget.org/packages?q=Tags%3A%22ThingsGateway%22)

### Plugin List

#### Data Collection Plugins
| Plugin Name | Remarks |
|-------|-------|
| Modbus | Supports Rtu/Tcp message formats, with Serial/Tcp/Udp links |
| SiemensS7 | Siemens PLC S7 series |
| Dlt6452007 | Supports Serial/Tcp/Udp links |
| OpcDaMaster | Compiled for 64-bit |
| OpcUaMaster | Supports certificate login, object extension, Json read/write |
#### Business Plugins
| Plugin Name | Remarks |
|-------|-------|
| ModbusSlave | Supports Rtu/Tcp message formats, with Serial/Tcp/Udp links, supports Rpc reverse writing |
| OpcUaServer | OpcUa server, supports Rpc reverse writing |
| MqttClient | Mqtt client, supports Rpc reverse writing, script-customizable upload content |
| MqttServer | Mqtt server, supports WebSocket, supports Rpc reverse writing, script-customizable upload content |
| KafkaProducer | Script-customizable upload content |
| RabbitMQProducer | Script-customizable upload content |
| SqlDB | Relational database storage, supports historical storage and real-time data updates |
| SqlHisAlarm | Alarm historical data relational database storage |
| TDengineDB | Time-series database storage |
| QuestDB | Time-series database storage |

## License

[Apache-2.0](https://gitee.com/diego2098/ThingsGateway/blob/master/LICENSE)

## Demo

[ThingsGateway Demo Address](http://47.119.161.158:5000/)
[Demo](https://demo.thingsgateway.cn/)

Account: **SuperAdmin**

Password: **111111**

**In the upper-right corner, switch to the IoT Gateway module in the personal popup box**
## Docker
## Docker
```shell
docker pull registry.cn-shenzhen.aliyuncs.com/thingsgateway/thingsgateway
docker pull registry.cn-shenzhen.aliyuncs.com/thingsgateway/thingsgateway_arm64
```
### Plugin List

#### Data Collection Plugins
| Plugin Name | Remarks |
| ----------- | ------------------------------------------------------------- |
| Modbus | Supports Rtu/Tcp message formats, with Serial/Tcp/Udp links |
| SiemensS7 | Siemens PLC S7 series |
| Dlt6452007 | Supports Serial/Tcp/Udp links |
| OpcDaMaster | Compiled for 64-bit |
| OpcUaMaster | Supports certificate login, object extension, Json read/write |
| Webhook | Webhook |
#### Business Plugins
| Plugin Name | Remarks |
| ---------------- | ------------------------------------------------------------------------------------------------- |
| ModbusSlave | Supports Rtu/Tcp message formats, with Serial/Tcp/Udp links, supports Rpc reverse writing |
| OpcUaServer | OpcUa server, supports Rpc reverse writing |
| MqttClient | Mqtt client, supports Rpc reverse writing, script-customizable upload content |
| MqttServer | Mqtt server, supports WebSocket, supports Rpc reverse writing, script-customizable upload content |
| KafkaProducer | Script-customizable upload content |
| RabbitMQProducer | Script-customizable upload content |
| SqlDB | Relational database storage, supports historical storage and real-time data updates |
| SqlHistoryAlarm | Alarm historical data relational database storage |
| TDengineDB | Time-series database storage |
| QuestDB | Time-series database storage |

## License

[License](https://thingsgateway.cn/docs/1)


## Sponsorship

[Sponsorship Approach](https://kimdiego2098.github.io/docs/1000)
[Sponsorship Approach](https://thingsgateway.cn/docs/1000)

## Community

QQ Group: 605534569 [Jump](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=NnBjPO-8kcNFzo_RzSbdICflb97u2O1i&authKey=V1MI3iJtpDMHc08myszP262kDykbx2Yev6ebE4Me0elTe0P0IFAmtU5l7Sy5w0jx&noverify=0&group_code=605534569)

## Pro Plugins

[Plugin List](https://kimdiego2098.github.io/docs/1001)
[Plugin List](https://thingsgateway.cn/docs/1001)

View File

@@ -1,65 +1,74 @@
# ThingsGateway
## 介绍
基于net8的跨平台高性能边缘采集网关,单机采集数据点位可达百万
基于net9的跨平台高性能边缘采集网关
## 文档
[文档](https://kimdiego2098.github.io/)
[文档](https://thingsgateway.cn/)
[NuGet](https://www.nuget.org/packages?q=Tags%3A%22ThingsGateway%22)
### 插件列表
#### 采集插件
| 插件名称 | 备注 |
|-------|-------|
| Modbus | Rtu/Tcp报文格式支持串口/Tcp/Udp链路 |
| SiemensS7 | 西门子PLC S7系列 |
| Dlt6452007 | 支持串口/Tcp/Udp链路 |
| OpcDaMaster | 64位编译 |
| OpcUaMaster | 支持证书登录扩展对象Json读写 |
#### 业务插件
| 插件名称 | 备注 |
|-------|-------|
| ModbusSlave | Rtu/Tcp报文格式支持串口/Tcp/Udp链路支持Rpc反写 |
| OpcUaServer | OpcUa服务端支持Rpc反写 |
| MqttClient | Mqtt客户端支持Rpc反写脚本自定义上传内容 |
| MqttServer | Mqtt服务端支持WebSocket支持Rpc反写脚本自定义上传内容 |
| KafkaProducer | 脚本自定义上传内容 |
| RabbitMQProducer | 脚本自定义上传内容 |
| SqlDB | 关系数据库存储,支持历史存储和实时数据更新 |
| SqlHisAlarm | 报警历史数据关系数据库存储 |
| TDengineDB | 时序数据库存储 |
| QuestDB | 时序数据库存储 |
## 协议
[Apache-2.0](https://gitee.com/diego2098/ThingsGateway/blob/master/LICENSE)
## 演示
[ThingsGateway演示地址](http://47.119.161.158:5000/)
[ThingsGateway演示地址](https://demo.thingsgateway.cn/)
账户 : **SuperAdmin**
账户 : **SuperAdmin**
密码 : **111111**
**右上角个人弹出框中,切换到物联网关模块**
## Docker
## Docker
```shell
docker pull registry.cn-shenzhen.aliyuncs.com/thingsgateway/thingsgateway
docker pull registry.cn-shenzhen.aliyuncs.com/thingsgateway/thingsgateway_arm64
```
### 插件列表
#### 采集插件
| 插件名称 | 备注 |
| ----------- | ------------------------------------- |
| Modbus | Rtu/Tcp报文格式支持串口/Tcp/Udp链路 |
| SiemensS7 | 西门子PLC S7系列 |
| Dlt6452007 | 支持串口/Tcp/Udp链路 |
| OpcDaMaster | 64位编译 |
| OpcUaMaster | 支持证书登录扩展对象Json读写 |
#### 业务插件
| 插件名称 | 备注 |
| ---------------- | ---------------------------------------------------------- |
| ModbusSlave | Rtu/Tcp报文格式支持串口/Tcp/Udp链路支持Rpc反写 |
| OpcUaServer | OpcUa服务端支持Rpc反写 |
| MqttClient | Mqtt客户端支持Rpc反写脚本自定义上传内容 |
| MqttServer | Mqtt服务端支持WebSocket支持Rpc反写脚本自定义上传内容 |
| KafkaProducer | 脚本自定义上传内容 |
| RabbitMQProducer | 脚本自定义上传内容 |
| SqlDB | 关系数据库存储,支持历史存储和实时数据更新 |
| SqlHistoryAlarm | 报警历史数据关系数据库存储 |
| TDengineDB | 时序数据库存储 |
| QuestDB | 时序数据库存储 |
| Webhook | Webhook |
## 协议
[版权声明](https://thingsgateway.cn/docs/1)
## 赞助
[赞助途径](https://kimdiego2098.github.io/docs/1000)
[赞助途径](https://thingsgateway.cn/docs/1000)
## 社区
@@ -67,7 +76,11 @@ QQ群605534569 [跳转](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=NnBjPO-8kcN
## Pro插件
[插件列表](https://kimdiego2098.github.io/docs/1001)
[插件列表](https://thingsgateway.cn/docs/1001)
## 特别声明
ThingsGateway 项目已加入 [dotNET China](https://gitee.com/dotnetchina) 组织。<br/>
![dotnetchina](https://gitee.com/dotnetchina/home/raw/master/assets/dotnetchina-raw.png "dotNET China LOGO")

View File

@@ -1,201 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -1,15 +0,0 @@
文档基于 [https://www.docusaurus.io/](https://www.docusaurus.io/) 构建。
### 本地运行
```bash
npm install
npm run start
```
### 发布部署
```bash
npm run build
```

View File

@@ -1,3 +0,0 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

View File

@@ -1,57 +0,0 @@
---
id: 1
title: 版权说明
---
:::tip 公告
注意以下常见版权问题:
- 社区版本不得去除可视页面的ThingsGateway Logo
- 不得将程序集单独包装售卖,申请专利,开发竞品
:::
## 使用前必要阅读
ThingsGateway 由作者Diego及其他贡献者开发所有版权归作者Diego所有程序集源代码在遵循 Apache License 2.0 的开源协议以及**附加协议**下,可**免费**供其他开发者二次开发或(商业)使用。
### 个人使用须知:
- 不得将程序集用作违法犯罪活动。
- 不得将程序集单独包装售卖,申请专利等。
- 不得擦除程序集所有有关作者的信息。
**以上内容必须全部符合,个人使用授权才成立。**
### 二次开发须知:
- 不得将程序集用作违法犯罪活动。
- 不得将程序集单独包装售卖,申请专利等。
- 不得擦除程序集所有有关作者的信息。
- 二次开发完成后的作品必须附带源作品所有作者信息包括但不限于作者名、Gitee、Github 地址等。
**以上内容必须全部符合,二次开发授权才成立。**
### 盈利性(商业)用途使用须知:
- 不得将程序集用作违法犯罪活动。
- 不得将程序集单独包装售卖,申请专利等。
- **不得擦除程序集所有有关作者的信息,并必须于用户可见界面(如关于)中提名。**
**以上内容必须全部符合,商业使用授权才成立。**
## ThingsGatewayPro 商用许可
ThingsGatewayPro 软件框架与 ThingsGateway 一致另包含其他定制插件。所有版权归作者Diego所有。
ThingsGatewayPro 不公开开源。
# 免责申明
**在使用 ThingsGateway 之前请进行缜密的测试。在使用期间,由本程序集造成或间接造成的所有损失,均自己承担,与本程序集无关。**

View File

@@ -1,45 +0,0 @@
---
id: 100
title: 驱动调试
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `配置须知`
变量地址的格式可从浮动提示中查看,如需要详细说明,可查看对应的插件章节
:::
## 一、说明
**ThingsGateway** 网关程序中包含了调试页面,也单独提供跨平台的桌面端调试软件
<img src={require("@site/static/img/docs/驱动调试.png").default} />
下面举例说明Modbus驱动的调试流程
## 二、Modbus调试流程
选择需要的驱动,进入页面后,新建通道
<img src={require("@site/static/img/docs/驱动调试1.png").default} />
<img src={require("@site/static/img/docs/驱动调试2.png").default} />
2、 查看变量寄存器地址的填写格式
<img src={require("@site/static/img/docs/驱动调试3.png").default} />
3、 打开模拟软件,点击读取
<img src={require("@site/static/img/docs/驱动调试4.png").default} />
可以看到交互的报文以及读取结果
## 三、网关中的调试页面
<img src={require("@site/static/img/docs/驱动调试5.png").default} />
操作与桌面软件一样

View File

@@ -1,28 +0,0 @@
---
id: 1000
title: 赞助项目
---
## 赞助ThingsGateway项目
> 您的支持就是我不懈努力的动力。<br></br>如果对您有帮助请⭐Star关注或扫码捐赠感谢支持开源
### 赞助途径
![](/img/pay.png)
### 赞助名单(以下排名只按照赞助时间顺序)
|序号|名称|金额|
|-----------|--------------|-----------------|
|1| 绢| 10¥|
|2| 小蚂蚁 |500+¥|
|3| *伟 |18.8¥|
|4| *碟 |20¥|
|5| *长 |6.66¥|
|6| 小黄鸭 |38.8¥|
|7| *交 |50¥|
|8| *洋 |200¥+50¥|
|9| *元 |20¥|
|10| 冬日暖阳 |66.66¥|

View File

@@ -1,9 +0,0 @@
---
id: 10001
title: ABCipMatser
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';

View File

@@ -1,96 +0,0 @@
---
id: 1001
title: Pro版
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip 公告
注意以下常见版权问题:
- 社区版本不得去除可视页面的ThingsGateway Logo
- ThingsGatewayPro授权后可去除Logo但Pro插件不开放源代码
- 任何版本不得将程序集单独包装售卖,申请专利,开发竞品
:::
## 一、说明
ThingsGatewayPro是ThingsGateway的加强版本**基础功能与ThingsGateway一致并添加一些额外功能插件**
同时ThingsGatewayPro提供企业定制服务及必要的远程协助,具体收费可以咨询**作者Diego联系方式QQ2248356998**
## 二、授权
** ThingsGatewayPro分为个人授权与企业授权区别在于授权归属**
ThingsGatewayPro授权不开放源代码**Pro版本基础代码和开源版本相同**
授权后获得证书凭据(图片形式)
### 2.1 个人授权
- **授权归属于购买者个人所有**
- 价格 998¥
### 2.2 企业授权
- **授权归属于企业所有,仅企业主体享有授权**
- 价格 1998¥
## 三、插件差异
|序号| 插件名称 | 说明 |
|----| ---------------| --------------------------|
|1| Vigor | 丰炜串口/TCP通信插件支持VS系列|
|2| Fins Tcp/Udp | 欧姆龙Fins通信插件支持CJ系列、CV系列、CS系列、NX系列等,一般欧姆龙带网口的都支持FINS|
|3| ABCIP Tcp | 罗克韦尔CIP通信插件支持17561769系列等|
|4| SECS | SECS半导体协议|
|5| 三菱MC QnA3E_Binary | MC 3E帧 二进制 |
|6| USB扫码枪 | USB扫码枪(键盘输入式),键盘钩子获取的方式目前只有windows版本|
|7| URF_R330 读卡器 | dll目前只有windows版本|
|8| 精伦idr 210 读卡器 | dll目前只有windows版本|
|9| 明泰URF_R330 读卡器 | dll目前只有windows版本|
|10| 新中新DKQ-A16D 读卡器 | dll目前只有windows版本|
## 四、插件开发计划
|序号| 插件名称 | 说明 |
|----| ---------------| --------------------------|
|1| 双机热备 | 网关双机冗余|
|2| 远程更新 | 远程更新软件|
## 五、授权名单(部分企业用户不公示)
|序号| 被授权主体 | 说明 | 时间 |
|----| ---------------| --------------------------|-------------------|
|1| 成都**创新科技有限公司 | | 2023-4-21|
|2| 超级士兵 | | 2023-5-18|
|3| SunnyUI | | 2023-7-13|
|4| 俞智峰 | | 2023-7-13|
|5| 西安***物联网科技有限公司 | | 2023-7-15|
|6| 深圳市***自动化技术有限公司 | | 2023-7-16|
|7| 西安***信息技术有限责任公司 | | 2023-9-4|
|8| 北京****网络科技发展有限公司 | | 2023-9-26|
|9| 长沙**软件科技有限公司 | | 2023-10-16|
|10| 航科**科技有限公司 | | 2023-10-30|
|11| 福建**包装有限公司 | | 2023-11-17|
|12| 内蒙古**科技有限公司 | | 2023-11-26|
|13| 佛山**自动化科技有限公司 | | 2023-11-27|
|14| Z | | 2023-12-03|
|15| 狼有一心 | | 2023-05-29|
## 六、购买途径
**购买前请先联系作者Diego**。联系QQ2248356998。
![](/img/pay.png)

View File

@@ -1,24 +0,0 @@
---
id: 1002
title: 联系我们
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
**ThingsGateway团队**成立1年来一直致力于工业物联网关解决方案。我们的初衷是使设备接入更简单为用户打造提高效率的产品。
可以通过以下方式找到我们:
### 技术支持
QQ群605534569
QQ2248356998
### 咨询、合作
手机15622119120 林工
微信15622119120

View File

@@ -1,37 +0,0 @@
---
id: 101
title: 插件管理
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `配置须知`
更改设备/变量/插件等,需要重启后台(右上角重启后台按钮)
:::
## 一、说明
**ThingsGateway** 网关核心代码都由插件完成,主程序只负责调度执行
插件支持热重载,可由外部上传到网关中
## 二、上传插件
<img src={require("@site/static/img/docs/上传插件.png").default} />
## 二、手动重载插件
<img src={require("@site/static/img/docs/重载插件.png").default} />
可由顶部按钮或者插件管理页面按钮执行手动重载
:::tip 提示
插件重新检测文件后,运行态的插件不会发送任何改变,如果立即生效,请按右上角的重启后台按钮
:::

View File

@@ -1,39 +0,0 @@
---
id: 102
title: 通道
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `配置须知`
更改设备/变量/插件等,需要重启后台(右上角重启后台按钮)
:::
## 一、说明
**ThingsGateway** 网关通道其实是一个实际的串口/TCP/UDP链路或者是线程池中的一个任务
## 二、添加通道/修改通道
<img src={require("@site/static/img/docs/添加通道.png").default} />
## 三、通道配置项
| 属性| 说明 |
| --- | --- |
| 名称 | 通道名称|
| 通道类型 | 选择 TcpClient/TcpService/SerialPortClient/UdpSession/Other |
| 使能 | 是否启用此通道 |
| 调试日志 | 初始运行时,是否启用调试日志,可在运行状态界面中再次启用/停用 |
| 远程地址 | 对于TcpClient/UdpSession 作为客户端有效, 填入服务端的Url信息比如192.168.0.1:502 |
| 本地地址 | 对于TcpClient/TcpService/UdpSession 有效,作为本机的绑定地址,可选择填入,为空时是随机绑定端口 |
| COM口 | 对于SerialPortClient有效串口名称 |
| 波特率 | 对于SerialPortClient有效串口波特率 |
| 数据位 | 对于SerialPortClient有效串口数据位 |
| 校验位 | 对于SerialPortClient有效串口校验位 |
| 停止位 | 对于SerialPortClient有效串口停止位 |
| 启用Dtr | 对于SerialPortClient有效串口DtrEnable |
| 启用Rts | 对于SerialPortClient有效串口RtsEnable |

View File

@@ -1,46 +0,0 @@
---
id: 103
title: 设备
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `配置须知`
更改设备/变量/插件等,需要重启后台(右上角重启后台按钮)
:::
## 一、说明
**ThingsGateway** 网关设备对应每个实际采集设备/上传业务
## 二、添加设备/修改设备
<img src={require("@site/static/img/docs/添加设备.png").default} />
## 三、设备属性配置项
| 属性| 说明 |
| --- | --- |
|名称| 设备名称|
|描述| 当前设备描述 |
|默认执行间隔| 执行间隔,对于采集设备,这个属性是默认的采集间隔,对于业务设备,这个属性是循环线程的等待间隔时间 |
|设备使能| 启动/停用采集设备 |
|通道| 选择对应的通道 |
|插件| 选择对应的插件 |
|是否冗余| 启动/停用设备冗余 |
|冗余设备| 备用设备选择,当此设备离线时,会在适当的时间切换到备用设备,注意备用设备初始时不会有实际通讯线程创建,链接的变量也不会生效 |
|备用字段| 存储自定义信息 |
## 四、插件属性配置项
对于不同的插件,插件属性项也不相同,查看对应插件章节中的详细说明。
比如ModbusMaster
<img src={require("@site/static/img/docs/插件属性.png").default} />

View File

@@ -1,124 +0,0 @@
---
id: 104
title: 变量
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `配置须知`
更改设备/变量/插件等,需要重启后台(右上角重启后台按钮)
:::
## 一、说明
**ThingsGateway** 网关变量对应每个寄存器点位
## 二、添加变量/修改变量
### 变量基础属性配置项
<img src={require("@site/static/img/docs/添加变量.png").default} />
|属性名称| 属性描述| 备注|
|-----------|--------------|-----------------|
|名称| 当前变量名称,全局唯一(变量)| |
|描述| 当前变量描述 ||
|单位| 变量值单位 ||
|读写权限| 读写/只写/只读 ||
|使能| 启用/停用变量 ||
|远程写入| 对于变量的写入使能配置 ||
|设备| 当前采集设备选择的设备,通过级联选择器选择对应设备名称设置 ||
|变量地址| PLC寄存器/OPC ITEMID等 |对于不同插件的设备,变量地址配置不相同,查看对应的插件说明|
|执行间隔| 读取时间间隔/执行特殊方法读取的间隔 ||
|特殊方法| 某些插件特有的方法 |对于不同的插件,特殊方法配置不相同,查看对应的插件说明|
|数据类型| 对应的数据类型 |注意除了特殊驱动一般不应该选择object|
|读取表达式| 动态解析的表达式 ,原始值的代码为raw|示例:``raw.ToInt()*10+3`` 结果原始值raw为8,输出实时值83 。|
|写入表达式| 动态解析的表达式,在写入值时转化,原始值的代码为raw|示例:``raw.ToInt()/10`` 结果写入值为230时会下发23到PLC 。|
|备用字段| 存储自定义信息 |
:::tip `变量地址通用说明`
通用格式,不区分大小写
4字节转换格式
DATA=ABCD;
举例:
DATA=ABCD; ,代表大端格式,其中
ABCD=>Big-Endian;
BADC=>Big-Endian Byte Swap;
CDAB=>Little-Endian Byte Swap;
DCBA=>Little-Endian
字符串长度:
LEN=1;
BCD格式
BCD=C8421;其中有C8421;C5421;C2421;C3;Gray
字符格式:
encoding=UTF8;其中有UTF8;ASCII;Default;Unicode
数组长度:
arraylen=2;
:::
### 报警属性配置项
<img src={require("@site/static/img/docs/添加变量1.png").default} />
:::tip `说明`
报警属性中定义变量产生报警的规则所需的配置
:::
|属性名称| 属性描述| 备注|
|-----------|--------------|-----------------|
|报警使能| 启用对应报警功能| |
|报警限值| 超限时产生报警,布尔量为固定 ||
|报警文本| 对应显示的报警文本 ||
|报警约束| 动态解析的表达式 ,原始值的代码为raw计算值为true时才能产生报警 ||
:::tip `例子`
数值高高报警
变量值大于报警限值并且报警约束为true或者报警约束不存在时产生报警
比如设置高高限值为1其他默认当变量值大于1时产生报警
:::
### 业务属性配置项
<img src={require("@site/static/img/docs/添加变量2.png").default} />
:::tip `说明`
上传属性中定义变量关联的上传设备所需的配置
对于不同的插件,插件属性项也不相同,查看对应插件章节中的详细说明。
:::

View File

@@ -1,34 +0,0 @@
---
id: 105
title: 网关状态
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
**ThingsGateway**
运行状态页面,可查看采集/业务设备的运行状态,调试日志等信息
实时数据页面,可查看变量实时信息
实时报警页面,可查看变量实时报警
硬件信息页面可查看服务器CPU信息等
## 二、图示
<img src={require("@site/static/img/docs/运行状态详情.png").default} />
<img src={require("@site/static/img/docs/实时数据详情.png").default} />
<img src={require("@site/static/img/docs/实时报警详情.png").default} />
<img src={require("@site/static/img/docs/硬件信息详情.png").default} />

View File

@@ -1,26 +0,0 @@
---
id: 106
title: 网关日志
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
**ThingsGateway**
后台日志记录 有关采集/业务上传的全部网关后台日志
RPC日志记录 全部反写RPC日志
## 二、图示
<img src={require("@site/static/img/docs/RPC日志详情.png").default} />
<img src={require("@site/static/img/docs/后台日志详情.png").default} />

View File

@@ -1,63 +0,0 @@
---
id: 2
title: 产品介绍
---
## 产品介绍
**ThingsGateway** 是c#开发的一款边缘采集网关,核心分为四大部分
### 通道
通道实际上相当于一个实际的通讯链路比如一个串口一个TCP连接等在**ThingsGateway**中,
通道也会作为线程池中的一个任务,对于同一个通道中的不同设备,采集/业务方法是顺序进行的。
### 🔥插件
ThingsGateway中的采集方法或者上传方法等都由插件完成主程序只负责调度执行。
对于不同的采集协议或者业务需求,可以通过开发插件完成自定义的业务操作。
### 设备
建立设备,必须指定通道以及插件,也可以说设备其实是插件的配置。
同时对于采集设备、业务设备,会有些许差别。
采集设备:采集数据入网关/写入数据到现场
业务设备:上传数据到第三方/第三方RPC反写
### 变量
变量,用于配置采集设备的具体点位详情,以及对应业务设备中的配置项
## 产品特性
### 可视化操作
通过web浏览器配置调试验证整个流程
### 🔥脚本支持
灵活的数据转换脚本以及数据上传自定义实体脚本,可适配各大云平台的物模型
### 🔥自定义插件支持
通过开发插件完成自定义的业务操作。
### 🔥性能
测试100w变量点位500ms-1000ms全部采集完成稳定连续采集占用CPU资源、内存资源低
### 断线缓存
支持断线缓存,恢复后自动上传
### 🔥完整可商用的边缘网关
完善的配置权限操作日志功能等还有OPCWeb Api,Mqtt,Kafka,时序库,变量报警等更多功能等待你发现

View File

@@ -1,78 +0,0 @@
---
id: 200
title: ModbusMatser
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
ModbusMatser作为主站主动采集Modbus从站协议的设备
插件支持modbusTcp/modbusRtu格式报文
通讯链路支持 TcpClient/TcpService(DTU)/串口/Udp
## 二、插件属性配置项
<img src={require("@site/static/img/docs/ModbusMaster.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| Modbus协议类型 | modbusTcp/modbusRtu格式报文 | |
| 默认站号 | 默认的mudbus站号id | **变量可单独配置站号** |
| 无交互2min时断开连接 | 没有发送/收到消息 2分钟后断开连接 | 仅适用于TcpService链路DTU模式|
| 心跳检测 | 大写16进制字符串符合心跳内容会自动回应 | 仅适用于TcpService链路DTU模式|
| 读写超时时间 | 读写超时时间 | 3000|
| 连接超时时间 | 建立通讯链路的超时时间 | 3000|
| 发送延时时间 | 在发送请求前的延时时间 | 0|
| 组包缓存超时 | 返回分包时的分包间隔超时时间 | 1000 |
| 默认解析顺序 | 4个字节以上的数据解析可设置为ABCD/BADC/CDBA/DCBA,默认ABCD , **变量可单独配置**|ABCDBig-Endian<br></br>BADCBig-Endian Byte Swap<br></br>CDABLittle-Endian Byte Swap<br></br>DCBALittle-Endian |
| 最大打包长度 | 打包长度最大限值是125 | 100 |
| 离线重试间隔 | 设备检测到离线时,重新连接的间隔时间(秒) | 30 |
| 失败重试次数 | 读取失败时重试n次后判定变量为离线 | 3 |
| 最大并发数量 | ModbusTcp格式报文特有ModbusTcp可并发采集 | 1 |
## 三、变量地址配置项
- 1、基本地址
Modbus PLC寄存器
| 地址 | 功能码 | 说明 |
| ---------------| --------------|--------------------------|
| 4xxxxx | 03 | 读取03功能码 |
| 3xxxxx | 04 | 读取04功能码 |
| 1xxxxx | 02 | 读取02功能码 |
| 0xxxxx | 01 | 读取01功能码 |
- 2、站号(可选)
当需要指定站号地址时可使用,举例:
| 地址 | 说明 |
| ---------------| --------------------------|
| s=2;10001 | 读取02功能码 ,设备地址为2 |
| s=11;40001 | 读取03功能码 ,设备地址为11 |
- 3、写入功能码(可选)
当需要指定16/15功能码时可使用举例
| 地址 | 说明 |
| ---------------| --------------------------|
| w=15;10001 | 读取02功能码 ,写入15功能码 |
| w=16;40001 | 读取03功能码 ,写入16功能码 |
- 3、Dtu注册(可选)
当需要指定Dtu客户端可使用举例
| 地址 | 说明 |
| ---------------| --------------------------|
| id=12;40001 | 读取03功能码 ,设备地址为默认Dtu注册包为"12",注意是UTF8格式 |

View File

@@ -1,96 +0,0 @@
---
id: 20001
title: Modbus
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 定义
程序集:[ThingsGateway.Foundation.Modbus](https://www.nuget.org/packages/ThingsGateway.Foundation.Modbus)
## 一、说明
**ThingsGateway.Foundation.Modbus**是对于Modbus协议的封装类库
支持Tcp/Rtu格式
支持多个通讯链路Tcp/Udp/SerialPort
支持Dtu
## 二、Modbus主站
1、创建ModbusMaster
```
/// <summary>
/// 新建链路
/// </summary>
/// <returns></returns>
public IChannel GetChannel()
{
TouchSocketConfig touchSocketConfig = new TouchSocketConfig();
return touchSocketConfig.GetSerialPortWithOption(new("COM1")); //直接获取串口对象
//return touchSocketConfig.GetChannel(ChannelTypeEnum.SerialPortClient, null, null, new("COM1"));//通过链路枚举获取对象
}
/// <summary>
/// 新建协议对象
/// </summary>
/// <param name="channel"></param>
/// <returns></returns>
public IProtocol GetProtocol(IChannel channel)
{
var client = new ModbusMaster(channel);
return client;
}
```
2、读写操作
```
ModbusMaster modbusMasterTest = new ModbusMaster();
var channel = modbusMasterTest.GetChannel();
var protocol = modbusMasterTest.GetProtocol(channel);
var data = await protocol.ReadDoubleAsync("400001"); //读取保持寄存器地址0
```
`400001`是PLC Modbus的地址表示方式代表保持寄存器地址0
- 基本地址
Modbus PLC寄存器
| 地址 | 功能码 | 说明 |
| ---------------| --------------|--------------------------|
| 4xxxxx | 03 | 读取03功能码 |
| 3xxxxx | 04 | 读取04功能码 |
| 1xxxxx | 02 | 读取02功能码 |
| 0xxxxx | 01 | 读取01功能码 |
- 站号(可选)
当需要指定站号地址时可使用,举例:
| 地址 | 说明 |
| ---------------| --------------------------|
| s=2;10001 | 读取02功能码 ,设备地址为2 |
| s=11;40001 | 读取03功能码 ,设备地址为11 |
- Dtu注册(可选)
当需要指定Dtu客户端可使用举例
| 地址 | 说明 |
| ---------------| --------------------------|
| id=12;40001 | 读取03功能码 ,设备地址为默认Dtu注册包为"12",注意是UTF8格式 |
## 三、Modbus从站

View File

@@ -1,9 +0,0 @@
---
id: 20002
title: SiemensS7
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';

View File

@@ -1,9 +0,0 @@
---
id: 20003
title: OpcDa
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';

View File

@@ -1,9 +0,0 @@
---
id: 20004
title: OpcUa
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';

View File

@@ -1,112 +0,0 @@
---
id: 20005
title: Dlt645
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 定义
程序集:[ThingsGateway.Foundation.Dlt645](https://www.nuget.org/packages/ThingsGateway.Foundation.Dlt645)
## 一、说明
**ThingsGateway.Foundation.Dlt645**是对于Dlt645-2007协议的封装类库
支持多个通讯链路Tcp/Udp/SerialPort
## 二、Dlt645-2007主站
1、创建Dlt645Master
```
/// <summary>
/// 新建链路
/// </summary>
/// <returns></returns>
public IChannel GetChannel()
{
TouchSocketConfig touchSocketConfig = new TouchSocketConfig();
return touchSocketConfig.GetSerialPortWithOption(new("COM1")); //直接获取串口对象
//return touchSocketConfig.GetChannel(ChannelTypeEnum.SerialPortClient, null, null, new("COM1"));//通过链路枚举获取对象
}
/// <summary>
/// 新建协议对象
/// </summary>
/// <param name="channel"></param>
/// <returns></returns>
public IProtocol GetProtocol(IChannel channel)
{
var client = new Dlt645_2007Master(channel);
client.Station = "311111111114";//表号
return client;
}
```
2、读写操作
```
Dlt645MasterTest dlt645MasterTest = new Dlt645MasterTest();
var channel = dlt645MasterTest.GetChannel();
var protocol = dlt645MasterTest.GetProtocol(channel);
var data = await protocol.ReadDoubleAsync("02010100"); //读取A相电压
```
`02010100`是Dlt645中的地址表示方式代表A相电压请查看相关协议文档可在源码附件中找到文档
- 基本地址
| 地址 | 说明 |
| ---------------| --------------------------|
| 02010100 | 读取02010100(A相电压) |
参考DLT2007协议文档数据标识可在插件源码中找到附件
- 站号(可选)
当需要指定站号地址时可使用,举例:
| 地址 | 说明 |
| ---------------| --------------------------|
| s=111111111111;02010100 | 读取02010100 ,设备地址为111111111111 |
- Dtu注册(可选)
当需要指定Dtu客户端可使用举例
| 地址 | 说明 |
| ---------------| --------------------------|
| id=12;40001 | 读取03功能码 ,设备地址为默认Dtu注册包为"12",注意是UTF8格式 |
3、其他方法
修改密码
```
var result = await protocol.WritePasswordAsync(level, oldPassword, newPassword);
```
更改表号
```
var result = await protocol.WriteDeviceStationAsync(station);
```
修改波特率
```
var result = await protocol.WriteBaudRateAsync(baudRate);
```
读取表号
```
var result = await protocol.ReadDeviceStationAsync;
```

View File

@@ -1,58 +0,0 @@
---
id: 201
title: ModbusSlave
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
ModbusSlave作为从站响应主站的采集报文
插件支持modbusTcp/modbusRtu格式报文
通讯链路支持 TcpClient/TcpService(DTU)/串口/Udp
## 二、插件属性配置项
<img src={require("@site/static/img/docs/ModbusSlave.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| Modbus协议类型 | modbusTcp/modbusRtu格式报文 | |
| 默认站号 | 默认的mudbus站号id | **变量可单独配置站号** |
| 默认解析顺序 | 4个字节以上的数据解析可设置为ABCD/BADC/CDBA/DCBA,默认ABCD , **变量可单独配置**|ABCDBig-Endian<br></br>BADCBig-Endian Byte Swap<br></br>CDABLittle-Endian Byte Swap<br></br>DCBALittle-Endian |
| 无交互2min时断开连接 | 没有发送/收到消息 2分钟后断开连接 | 仅适用于TcpService链路|
| 组包缓存超时 | 分包时的分包间隔超时时间 | 1000 |
| 多站点 | 是否区分不同的站号的数据 | true|
| 允许写入 | 写入权限使能 | Flase |
| 立即写入内存 | 外部写入时,是否立即写入内存池 | Flase |
## 三、变量业务属性
### 1、从站地址
- 1、基本地址
Modbus PLC寄存器
| 地址 | 功能码 | 说明 |
| ---------------| --------------|--------------------------|
| 4xxxxx | 03 | 读取03功能码 |
| 3xxxxx | 04 | 读取04功能码 |
| 1xxxxx | 02 | 读取02功能码 |
| 0xxxxx | 01 | 读取01功能码 |
- 2、站号(可选)
当需要指定站号地址时可使用,举例:
| 地址 | 说明 |
| ---------------| --------------------------|
| s=2;10001 | 读取02功能码 ,设备地址为2 |
| s=11;40001 | 读取03功能码 ,设备地址为11 |

View File

@@ -1,72 +0,0 @@
---
id: 202
title: Dlt645Master
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
Dlt645Master作为主站主动采集Dlt645协议的设备
插件支持Dlt645-2007格式报文
通讯链路支持 TcpClient/TcpService(DTU)/串口/Udp
## 二、插件属性配置项
<img src={require("@site/static/img/docs/Dlt645Master.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| 无交互2min时断开连接 | 没有发送/收到消息 2分钟后断开连接 | 仅适用于TcpService链路DTU模式|
| 心跳检测 | 大写16进制字符串符合心跳内容会自动回应 | 仅适用于TcpService链路DTU模式|
| 读写超时时间 | 读写超时时间 | 3000|
| 连接超时时间 | 建立通讯链路的超时时间 | 3000|
| 发送延时时间 | 在发送请求前的延时时间 | 0|
| 组包缓存超时 | 返回分包时的分包间隔超时时间 | 1000 |
| 默认解析顺序 | 4个字节以上的数据解析可设置为ABCD/BADC/CDBA/DCBA,默认ABCD , **变量可单独配置**|ABCDBig-Endian<br></br>BADCBig-Endian Byte Swap<br></br>CDABLittle-Endian Byte Swap<br></br>DCBALittle-Endian |
| 默认地址 | 电表地址12个字符 | |
| 密码 | 协议写入所需密码 | Flase |
| 操作员代码 | 协议写入所需操作员代码 | Flase |
| 前导符报文头 | 设为true时发送请求将添加4个0xFE到报文头部 | Flase |
| 离线重试间隔 | 设备检测到离线时,重新连接的间隔时间(秒) | 30 |
| 失败重试次数 | 读取失败时重试n次后判定变量为离线 | 3 |
## 三、变量地址配置项
- 1、基本地址
| 地址 | 说明 |
| ---------------| --------------------------|
| 02010100 | 读取02010100(A相电压) |
参考DLT2007协议文档数据标识可在插件源码中找到附件
- 2、站号(可选)
当需要指定站号地址时可使用,举例:
| 地址 | 说明 |
| ---------------| --------------------------|
| s=111111111111;02010100 | 读取02010100 ,设备地址为111111111111 |
- 3、Dtu注册(可选)
当需要指定Dtu客户端可使用举例
| 地址 | 说明 |
| ---------------| --------------------------|
| id=12;02010100 | 读取02010100 ,设备地址为默认Dtu注册包为"12",注意是UTF8格式 |
:::tip `说明`
注意DLT645协议中所有的变量都支持String
:::

View File

@@ -1,51 +0,0 @@
---
id: 203
title: SiemensS7Master
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
SiemensS7Master作为主站主动采集西门子S7协议的设备
插件支持S7格式报文支持S7-200;S7200-SMART;S7-300;S7-400;S7-1200;S7-1500;
通讯链路支持 TcpClient/Udp(通常不存在)
## 二、插件属性配置项
<img src={require("@site/static/img/docs/SiemensS7Master.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| S7类型 | S200;S200SMART;S300;S400;S1200;S1500; | |
| 机架号 | 机架号 | 0|
| 槽位号 | 槽位号 | 0|
| LocalTSAP | 查看西门子localTsap说明网关中一般不需要再设置 | 0 |
| 读写超时时间 | 读写超时时间 | 3000|
| 连接超时时间 | 建立通讯链路的超时时间 | 3000|
| 发送延时时间 | 在发送请求前的延时时间 | 0|
| 组包缓存超时 | 返回分包时的分包间隔超时时间 | 1000 |
| 默认解析顺序 | 4个字节以上的数据解析可设置为ABCD/BADC/CDBA/DCBA,默认ABCD , **变量可单独配置**|ABCDBig-Endian<br></br>BADCBig-Endian Byte Swap<br></br>CDABLittle-Endian Byte Swap<br></br>DCBALittle-Endian |
| 离线重试间隔 | 设备检测到离线时,重新连接的间隔时间(秒) | 30 |
| 失败重试次数 | 读取失败时重试n次后判定变量为离线 | 3 |
## 三、变量地址配置项
- 1、基本地址
| 地址 | 说明 |
| ---------------| --------------------------|
| Txxxxx | Timer寄存器,例如T100/T100.1 |
| Cxxxxx | Counter寄存器,例如C100/C100.1 |
| AIxxxxx | AI寄存器,例如AI100/AI100.1 |
| AQxxxxx | AQ寄存器,例如AQ100/AQ100.1 |
| Ixxxxx | I寄存器,例如I100/I100.1 |
| Qxxxxx | Q寄存器,例如Q100/Q100.1 |
| Mxxxxx | M寄存器,例如M100/M100.1 |
| DBxxxxx | DB寄存器,例如DB100.1/DB100.1.1 |

View File

@@ -1,51 +0,0 @@
---
id: 204
title: OpcDaMaster
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `OPCDA驱动注意`
使用OPCDA插件时需安装[OPC核心库](https://gitee.com/diego2098/ThingsGateway/attach_files)
:::
:::tip `提示`
可以通过调试页面,导出/导入OPC节点到网关
:::
## 一、说明
OpcDaMaster作为主站主动采集OPCDA协议的设备
插件支持远程OPCDA但需要配置DCOM相关知识请自行查阅资料
通道只支持 Other 类型
## 二、插件属性配置项
<img src={require("@site/static/img/docs/OpcDaMaster.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| IP | 连接IP | localhost|
| Opc名称 | OPC名称可识别ProgID或CLSID | Kepware.KEPServerEX.V6|
| 激活订阅 | 是否采用OPC订阅方式读取变量 | True|
| 检查重连频率 | 每隔设定时间获取一次服务器状态,并尝试重新连接(min) |10|
| 死区 | OPC死区 | 0|
| 最大组大小 | 每隔设定大小分一个OPCGroup | 500|
| 更新频率 | 订阅更新频率或者连读频率 (ms) | 1000 |
| 离线重试间隔 | 设备检测到离线时,重新连接的间隔时间(秒) ,只适用于非订阅模式 | 30 |
| 失败重试次数 | 读取失败时重试n次后判定变量为离线 ,只适用于非订阅模式 | 3 |
## 三、变量地址配置项
- 变量地址即为 OPC ItemID

View File

@@ -1,53 +0,0 @@
---
id: 205
title: OpcUaMaster
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `提示`
可以通过调试页面,导出/导入OPC节点到网关
:::
## 一、说明
插件支持OPCUA扩展类型自定义类型等等最终体现为json格式
通道只支持 Other 类型
## 二、插件属性配置项
<img src={require("@site/static/img/docs/OpcUaMaster.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| OPCURL | OPCUA URL | opc.tcp://127.0.0.1:49320|
| 登录账号 | 为空时采用匿名方式登录 | |
| 登录密码 | | |
| 检查域 | 是否检查域 | Flase|
| 安全策略 | 是否安全认证/证书方式登录 | True|
| 使用SourceTime | 是否采用服务端的变量时间 | True|
| 加载服务端数据类型 | 是否加载服务端的数据类型对应OPCUA自定义类型必须为true | True|
| 激活订阅 | 是否采用OPC订阅方式读取变量 | True|
| 更新频率 | 订阅更新频率或者连读频率 | 1000 |
| 死区 | OPC死区 | 0|
| 最大组大小 | 每隔设定大小分一个OPCGroup | 500|
| 心跳频率 | |3000|
| 离线重试间隔 | 设备检测到离线时,重新连接的间隔时间(秒) ,只适用于非订阅模式 | 30 |
| 失败重试次数 | 读取失败时重试n次后判定变量为离线 ,只适用于非订阅模式 | 3 |
## 三、变量地址配置项
- 变量地址即为 OPC NodeId
## 四、证书说明
证书可以在软件目录\OPCUAClientCertificate下查看或者导出/复制
<img src={require("@site/static/img/docs/OpcUaMaster1.png").default} />

View File

@@ -1,24 +0,0 @@
---
id: 206
title: VariableExpression
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
VariableExpression不与工业设备交互实际上是一个不依赖采集的表达式脚本计算方法
如果不填写变量表达式,变量值会自增
有关变量表达式的说明,请查看[变量表达式](./104.mdx#变量基础属性配置项)
## 二、插件属性配置项
## 三、变量地址配置项

View File

@@ -1,134 +0,0 @@
---
id: 3
title: 入门指南
slug: /
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip 提示
如果你的开发机不是**Windows**系统在解决方案中可能存在一些vs生成事件脚本(目录拷贝等不支持),会提示编译失败,请删除.csproj文件中的对应事件手动拷贝插件类库
:::
## 一、说明
**ThingsGateway** 基于NET6、8,默认开发IDE为VS2022(**17.8版本以上**),安装VS时需勾选ASP.NET类别.
<img src={require("@site/static/img/docs/vs2022install.png").default} />
## 二、下载源码
[最新版本](https://gitee.com/diego2098/ThingsGateway)
## 三、编译运行
下面我们将以vs2022作为示例
:::tip 提示
**注意需要编译解决方案,因为插件与主体没有引用关系**
:::
1、 vs2022打开解决方案编译解决方案
<img src={require("@site/static/img/docs/生成解决方案.png").default} />
2、 设置ThingsGateway.Server为启动项目开始调试或开始执行
<img src={require("@site/static/img/docs/设置启动项目.png").default} />
<img src={require("@site/static/img/docs/开始执行.png").default} />
3、 启动后会显示登录界面
<img src={require("@site/static/img/docs/login.png").default} />
恭喜你体验了软件的启动第一步!
:::tip 提示
测试环境下,账密会自动填充为超级管理员账号,默认账户:**SuperAdmin**,密码:**111111**
:::
## 四、建立一个完整的流程
下面举例说明 采集ModbusTcp设备中的寄存器通过MqttServer发布 的具体流程
### 1、建立通道
<img src={require("@site/static/img/docs/添加通道.png").default} />
添加tcpClient通道
<img src={require("@site/static/img/docs/通道配置1.png").default} />
添加mqttClient通道选择other即可
<img src={require("@site/static/img/docs/通道配置2.png").default} />
### 2、建立采集设备
添加采集设备选择tcpClient通道modbusTcp驱动
<img src={require("@site/static/img/docs/采集设备1.png").default} />
<img src={require("@site/static/img/docs/采集设备2.png").default} />
### 3、建立业务设备
添加业务设备选择mqttClient通道mqttClient驱动插件属性中填入第三方MqttBroker的连接信息
<img src={require("@site/static/img/docs/业务设备1.png").default} />
<img src={require("@site/static/img/docs/业务设备2.png").default} />
### 4、建立变量
添加变量选择modbusTcp设备填写变量寄存器地址
<img src={require("@site/static/img/docs/变量1.png").default} />
<img src={require("@site/static/img/docs/变量2.png").default} />
### 5、验证
经过以上的配置已经可以从127.0.0.1:502的模拟Modbus设备中采集到PLC地址(400001)并通过网关的mqttClient插件发布到第三方mqttBroker
。下面来验证一下
首先先启动模拟的modbusSlave软件
<img src={require("@site/static/img/docs/modbus模拟软件.png").default} />
然后重启网关后台服务,注意并不是需要重新启动软件进程,
而是**重新加载网关的组态配置到运行态中**,通过**网页右下角的重启运行时按钮**进行操作
<img src={require("@site/static/img/docs/重启后台.png").default} />
跳转到网关的运行状态查看
<img src={require("@site/static/img/docs/运行状态.png").default} />
开启调试日志的话可以看到每次交互的modbus报文以及结果状态
采集的数据点位值与相关信息跳转到实时数据页面
<img src={require("@site/static/img/docs/实时数据.png").default} />
可以看到值与采集时间等等的变化注意这里的页面实时值变化是1s的间隔时间如果配置了采集间隔小于1s页面刷新不及时是正常的不影响业务上传
MqttClient的日志也可以在运行状态中看到
<img src={require("@site/static/img/docs/运行状态1.png").default} />
## 五、详细说明
:::tip 提示
在查看案例前,请先查看**关于网关的基础内容**
:::
- [文档](https://diego2098.gitee.io/thingsgateway-docs)
- [博客](https://www.cnblogs.com/ThingsGateway/collections/1104)
- [视频](https://space.bilibili.com/88105259/channel/series)

View File

@@ -1,31 +0,0 @@
---
id: 30001
title: 串口
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
### 前言
串口使用一个称为串行通信协议的协议来管理数据传输。串行通信协议在数据传输期间控制数据流,包括起始位、数据位、波特率、校验位和停止位等。
下面每个名称做一个简单的解释。
``波特率``是指串口通信中每秒传输的二进制位数
``起始位``是1位时间、值为0的位。
``数据位``通常可能为1位、1.5位、2位时间。
``校验位``是1位时间根据校验方式确定验证值比如奇校验时计算数据位中的值为1的个数如果是奇数则为1否则应为0
``停止位``通常可能为1位、1.5位、2位时间。停止位是值为1的位。停止位代表着数据传输结束。
线路路空闲或者数据传输结束时值总是1。
对于正逻辑的TTL电平值为1是高电平对于负逻辑(如RS-232电平)则相反。
单看文字很难理解具体含义,所以我们看图说话,下面这张串口示波器图清晰的表现出二进制的传输原理
<img src={require("@site/static/img/docs/串口1.png").default} />
如上图可以看出2进制是 起始``1``、数据(右到左)``01010101``、停止``0`` ,那么解析出来的数据就是``0x55``
看到这里相信大家都对串口知识有了一定的理解这些基础知识对于c#工程师看似没有必要,但可以让你的实际调试开发工作更加得心应手

View File

@@ -1,287 +0,0 @@
---
id: 301
title: MqttClient
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `提示`
通过自定义脚本可快速适配业务模型比如各大云平台的Iot物模型
脚本的示例请查看**常见问题**
:::
## 一、说明
MqttClient通过Tcp/WebSocket的方式发布内容到Broker(Server),可以定时/变化发布数据
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/MqttClient.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| IP | ServerIP,为空时指任意IP | |
| 端口 | 连接端口 | 1883|
| 是否WebSocket连接 | 是否WebSocket连接 | False |
| WebSocketUrl | WebSocketUrl | ws://127.0.0.1:8083/mqtt |
| 账号 | 账号 | |
| 密码 | 密码 | |
| 连接Id | 连接Id | |
| 连接超时时间 | 连接超时时间 | |
| 允许Rpc写入 | 是否允许写入变量 | |
| Rpc写入Topic | 写入变量的主题 | 实际的写入主题为固定通配 {RpcWrite/+} 其中RpcWrite为该属性填入内容+通配符是请求GUID值返回结果主题会在主题后添加Response , 也就是{RpcWrite/+/Response} |
| 数据请求Topic | 该主题接受到任何消息都会发布全部信息到对应的变量/设备/报警主题中 | |
| 设备是否列表 | 设备是否列表上传false时每个设备实体都会单独发布注意性能需求默认为true | |
| 变量是否列表 | 变量是否列表上传false时每个变量实体都会单独发布注意性能需求默认为true | |
| 报警是否列表 | 报警是否列表上传false时每个报警实体都会单独发布注意性能需求默认为true | |
| 设备Topic | 设备实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 变量Topic | 变量实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 报警Topic | 报警实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 设备实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**DeviceData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 变量实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**VariableData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 报警实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**AlarmVariable**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 是否间隔执行 | 是否选择全部变量true间隔上传False变化检测上传 | |
| 间隔执行时间 | 间隔执行时间 | |
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |
### 脚本接口
```
public interface IDynamicModel
{
IEnumerable<dynamic> GetList(IEnumerable<dynamic> datas);
}
```
### DeviceData
```
/// <summary>
/// 设备业务变化数据
/// </summary>
public class DeviceData
{
/// <inheritdoc cref="PrimaryIdEntity.Id"/>
public long Id { get; set; }
/// <inheritdoc cref="Device.Name"/>
public string Name { get; set; }
/// <inheritdoc cref="DeviceRunTime.ActiveTime"/>
public DateTime ActiveTime { get; set; }
/// <inheritdoc cref="DeviceRunTime.DeviceStatus"/>
public DeviceStatusEnum DeviceStatus { get; set; }
/// <inheritdoc cref="DeviceRunTime.LastErrorMessage"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string LastErrorMessage { get; set; }
/// <inheritdoc cref="Device.Remark1"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark1 { get; set; }
/// <inheritdoc cref="Device.Remark2"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark2 { get; set; }
/// <inheritdoc cref="Device.Remark3"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark3 { get; set; }
/// <inheritdoc cref="Device.Remark4"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark4 { get; set; }
/// <inheritdoc cref="Device.Remark5"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark5 { get; set; }
}
```
### VariableData
```
/// <summary>
/// 变量业务变化数据
/// </summary>
public class VariableData
{
/// <inheritdoc cref="PrimaryIdEntity.Id"/>
public long Id { get; set; }
/// <inheritdoc cref="Variable.Name"/>
public string Name { get; set; }
/// <inheritdoc cref="VariableRunTime.DeviceName"/>
public string DeviceName { get; set; }
/// <inheritdoc cref="VariableRunTime.Value"/>
public object Value { get; set; }
/// <inheritdoc cref="VariableRunTime.ChangeTime"/>
public DateTime ChangeTime { get; set; }
/// <inheritdoc cref="VariableRunTime.CollectTime"/>
public DateTime CollectTime { get; set; }
/// <inheritdoc cref="VariableRunTime.IsOnline"/>
public bool IsOnline { get; set; }
/// <inheritdoc cref="VariableRunTime.LastErrorMessage"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string? LastErrorMessage { get; set; }
/// <inheritdoc cref="Device.Remark1"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark1 { get; set; }
/// <inheritdoc cref="Device.Remark2"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark2 { get; set; }
/// <inheritdoc cref="Device.Remark3"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark3 { get; set; }
/// <inheritdoc cref="Device.Remark4"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark4 { get; set; }
/// <inheritdoc cref="Device.Remark5"/>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark5 { get; set; }
}
```
### AlarmVariable
```
/// <summary>
/// 报警变量
/// </summary>
public class AlarmVariable
{
/// <inheritdoc cref="Variable.Name"/>
[SugarColumn(ColumnDescription = "变量名称", IsNullable = false)]
public string Name { get; set; }
/// <inheritdoc cref="Variable.Description"/>
[SugarColumn(ColumnDescription = "描述", IsNullable = true)]
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string? Description { get; set; }
/// <inheritdoc cref="VariableRunTime.DeviceName"/>
[SugarColumn(ColumnDescription = "设备名称", IsNullable = true)]
public string DeviceName { get; set; }
/// <inheritdoc cref="Variable.RegisterAddress"/>
[SugarColumn(ColumnDescription = "变量地址")]
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string RegisterAddress { get; set; }
/// <inheritdoc cref="Variable.DataType"/>
[SugarColumn(ColumnDescription = "数据类型", ColumnDataType = "varchar(100)")]
public DataTypeEnum DataType { get; set; }
/// <inheritdoc cref="VariableRunTime.AlarmCode"/>
[SugarColumn(ColumnDescription = "报警值", IsNullable = false)]
public string AlarmCode { get; set; }
/// <inheritdoc cref="VariableRunTime.AlarmLimit"/>
[SugarColumn(ColumnDescription = "报警限值", IsNullable = false)]
public string AlarmLimit { get; set; }
/// <inheritdoc cref="VariableRunTime.AlarmText"/>
[SugarColumn(ColumnDescription = "报警文本", IsNullable = true)]
public string? AlarmText { get; set; }
/// <inheritdoc cref="VariableRunTime.AlarmTime"/>
[SugarColumn(ColumnDescription = "报警时间", IsNullable = false)]
public DateTime AlarmTime { get; set; }
/// <inheritdoc cref="VariableRunTime.EventTime"/>
public DateTime EventTime { get; set; }
/// <summary>
/// 报警类型
/// </summary>
public AlarmTypeEnum? AlarmType { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public EventTypeEnum EventType { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark1 { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark2 { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark3 { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark4 { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Remark5 { get; set; }
}
```
## 三、变量业务属性
### 允许写入
单独配置变量是否允许写入
## 四、Rpc
### 1、请求内容
MqttRpc的请求内容与WebApi一致请求参数为Dictionary<string, string>,比如
```
{
"D500":"1"
}
```
键为变量名称,值为写入参数值
### 2、请求主题
请求主题在配置属性中设置,查看**Rpc写入Topic**
注意,实际的请求主题为 `{ThingsGateway.Rpc/[自定义GUID或者雪花ID]/[Rpc写入Topic]}`
### 3、Rpc返回主题
`{ThingsGateway.Rpc/[自定义GUID或者雪花ID]/[Rpc写入Topic]/Response}`
### 4、图示
<img src={require("@site/static/img/docs/MqttRpc.png").default} />

View File

@@ -1,74 +0,0 @@
---
id: 302
title: MqttServer
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `提示`
通过自定义脚本,可快速适配业务模型
脚本的示例请查看**常见问题**
:::
:::tip `权限注意`
Server的连接权限除了Id前缀限制外账号密码同样要求在网关后台创建的所有账号密码都可以登录MqttServer
:::
## 一、说明
MqttServer支持Tcp/webSocket方式接入可以定时/变化发布数据支持Rpc写入
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/MqttServer.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| IP | ServerIP,为空时指任意IP | |
| 端口 | Tcp绑定端口 | 1883|
| WebSocket端口 | WebSocket绑定端口 | 8083固定/mqtt路由 |
| 允许连接的ID(前缀) | 允许连接的ID(前缀) |ClientId必须以这个属性开头 |
| 允许Rpc写入 | 是否允许写入变量 | |
| Rpc写入Topic | 写入变量的主题 | 实际的写入主题为固定通配 {RpcWrite/+} 其中RpcWrite为该属性填入内容+通配符是请求GUID值返回结果主题会在主题后添加Response , 也就是{RpcWrite/+/Response} |
| 设备是否列表 | 设备是否列表上传false时每个设备实体都会单独发布注意性能需求默认为true | |
| 变量是否列表 | 变量是否列表上传false时每个变量实体都会单独发布注意性能需求默认为true | |
| 报警是否列表 | 报警是否列表上传false时每个报警实体都会单独发布注意性能需求默认为true | |
| 设备Topic | 设备实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 变量Topic | 变量实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 报警Topic | 报警实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 设备实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**DeviceData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 变量实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**VariableData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 报警实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**AlarmVariable**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 是否间隔执行 | 是否选择全部变量true间隔上传False变化检测上传 | |
| 间隔执行时间 | 间隔执行时间 | |
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |
### 脚本与实体
查看MqttClient页面[脚本接口](./301.mdx#脚本接口)
## 三、变量业务属性
### 允许写入
单独配置变量是否允许写入
## 四、Rpc
查看MqttClient页面[Rpc](./301.mdx#四rpc)

View File

@@ -1,58 +0,0 @@
---
id: 303
title: RabbitMQProducer
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `提示`
通过自定义脚本,可快速适配业务模型
脚本的示例请查看**常见问题**
:::
## 一、说明
RabbitMQProducer适配RabbitMQ协议主动发布内容到服务端可以定时/变化发布数据
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/RabbitMQProducer.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| IP | ServerIP,为空时指任意IP | |
| 端口 | 连接端口 | |
| 账号 | 账号 | |
| 密码 | 密码 | |
| 是否声明队列 | 初始化时是否自动创建队列 | |
| 虚拟Host | / | |
| 交换机名称 | 交换机名称 | |
| 设备是否列表 | 设备是否列表上传false时每个设备实体都会单独发布注意性能需求默认为true | |
| 变量是否列表 | 变量是否列表上传false时每个变量实体都会单独发布注意性能需求默认为true | |
| 报警是否列表 | 报警是否列表上传false时每个报警实体都会单独发布注意性能需求默认为true | |
| 设备Topic | 设备实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 变量Topic | 变量实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 报警Topic | 报警实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 设备实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**DeviceData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 变量实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**VariableData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 报警实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**AlarmVariable**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 是否间隔执行 | 是否选择全部变量true间隔上传False变化检测上传 | |
| 间隔执行时间 | 间隔执行时间 | |
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |
### 脚本与实体
查看MqttClient页面[脚本接口](./301.mdx#脚本接口)

View File

@@ -1,77 +0,0 @@
---
id: 304
title: KafkaProducer
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `提示`
通过自定义脚本,可快速适配业务模型
脚本的示例请查看**常见问题**
:::
:::tip `须知`
插件使用**librdkafka**,注意按需安装c库
On Mac OSX, install librdkafka with homebrew:
```
$ brew install librdkafka
```
On Debian and Ubuntu, install librdkafka from the Confluent APT repositories, see instructions here and then install librdkafka:
```
$ apt install librdkafka-dev
```
On RedHat, CentOS, Fedora, install librdkafka from the Confluent YUM repositories, instructions here and then install librdkafka:
```
$ yum install librdkafka-devel
```
For other platforms, follow the source building instructions below.
:::
## 一、说明
KafkaProducer适配Kafka协议主动发布内容到服务端可以定时/变化发布数据
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/KafkaProducer.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| 服务地址 | 服务地址 | 127.0.0.1:9092|
| 发布超时时间 | 发布超时时间 |5000 |
| 用户名 | 用户名 | |
| 密码 | 密码 | |
| SecurityProtocol | SecurityProtocol | |
| SaslMechanism | SaslMechanism | |
| 设备是否列表 | 设备是否列表上传false时每个设备实体都会单独发布注意性能需求默认为true | |
| 变量是否列表 | 变量是否列表上传false时每个变量实体都会单独发布注意性能需求默认为true | |
| 报警是否列表 | 报警是否列表上传false时每个报警实体都会单独发布注意性能需求默认为true | |
| 设备Topic | 设备实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 变量Topic | 变量实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 报警Topic | 报警实体的发布主题 ,使用${key}作为匹配项key必须是上传实体中的属性 | |
| 设备实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**DeviceData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 变量实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**VariableData**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 报警实体脚本 | 脚本返回新的实体列表,动态类中需继承**IDynamicModel**,传入列表为**AlarmVariable**,查看以下具体属性 | 编辑页面中,可通过检查按钮验证脚本,脚本示例请查看**常见问题** |
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 是否间隔执行 | 是否选择全部变量true间隔上传False变化检测上传 | |
| 间隔执行时间 | 间隔执行时间 | |
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |
### 脚本与实体
查看MqttClient页面[脚本接口](./301.mdx#脚本接口)

View File

@@ -1,34 +0,0 @@
---
id: 305
title: TDengineDBProducer
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
TDengineDBProducer适配TDengineDB时序数据库可以定时/变化存储变量数据
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/TDengineDBProducer.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| 链接字符串 | 链接字符串 | Host=localhost;Port=6030;Username=root;Password=taosdata;Database=test|
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 是否间隔执行 | 是否选择全部变量true间隔上传False变化检测上传 | |
| 间隔执行时间 | 间隔执行时间 | |
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |

View File

@@ -1,34 +0,0 @@
---
id: 306
title: QuestDBProducer
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
QuestDBProducer适配QuestDB时序数据库可以定时/变化存储变量数据
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/QuestDBProducer.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| 链接字符串 | 链接字符串 | host=localhost;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;|
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 是否间隔执行 | 是否选择全部变量true间隔上传False变化检测上传 | |
| 间隔执行时间 | 间隔执行时间 | |
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |

View File

@@ -1,38 +0,0 @@
---
id: 307
title: SqlDBProducer
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
SqlDBProducer适配关系数据库可以定时/变化存储变量数据,也可以实时更新数据到实时表
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/SqlDBProducer.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| 是否实时表 | 开启实时更新数据功能 | |
| 是否历史表 | 开始历史存储功能 |true |
| 实时表名称 | 实时表名称 | |
| 数据库类型 | 数据库类型 | |
| 链接字符串 | 链接字符串 | server=.;uid=sa;pwd=111111;database=test;|
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 是否间隔执行 | 是否选择全部变量true间隔上传False变化检测上传 | |
| 间隔执行时间 | 间隔执行时间 | |
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |

View File

@@ -1,32 +0,0 @@
---
id: 308
title: SqlHisAlarm
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、说明
SqlHisAlarm适配关系数据库可以变化存储变量报警数据
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/SqlHisAlarm.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| 数据库类型 | 数据库类型 | |
| 链接字符串 | 链接字符串 | server=.;uid=sa;pwd=111111;database=test;|
| 启用缓存 | 是否启用缓存 | |
| 上传列表最大数量 | 每一次上传的列表最大数量 | |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存,根据数据量设定适当值 | |

View File

@@ -1,53 +0,0 @@
---
id: 309
title: OpcUaServer
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `权限注意`
如果开启安全策略在网关后台创建的所有账号密码都可以登录OpcUaServer
如果不开启安全策略,则可以匿名登录
:::
## 一、说明
OpcUaServer支持外部OpcUa客户端读写
通道只支持 Other
## 二、插件属性配置项
<img src={require("@site/static/img/docs/OpcUaServer.png").default} />
| 属性 | 说明 | 备注|
| ---------------| --------------------------| ---|
| 是否选择全部变量 | 是否选择全部变量true时不需要单个变量添加业务属性 | |
| 服务地址 | Url ,以分号分割,可设置多个 | opc.tcp://127.0.0.1:49321 |
| SubjectName | 证书内容 | |
| 安全策略 | 启用后将不接受使用匿名登录的客户端,并且可以写入变量 | |
| 自动接受不受信任的证书 | 自动获取客户端证书并接受 | True |
## 三、变量业务属性
### 数据类型
同变量管理数据类型Enum
## 四、证书说明
证书可以在软件目录\OPCUAServerCertificate下查看或者导出/复制
<img src={require("@site/static/img/docs/OpcUaServer1.png").default} />

View File

@@ -1,31 +0,0 @@
---
id: 400
title: 发布
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、编译解决方案
<img src={require("@site/static/img/docs/发布.png").default} />
选择Release , 点击解决方案全编译(或者编译plugin文件夹)
## 二、发布版本
<img src={require("@site/static/img/docs/发布1.png").default} />
按需选择发布版本(图中为linux-64 net6)
## 三、复制插件文件夹
:::tip `提示`
如果你的开发机是**Windows**系统,这一步不再需求进行,发布时通过脚本已经自动复制到发布文件夹
:::
<img src={require("@site/static/img/docs/发布2.png").default} />

View File

@@ -1,37 +0,0 @@
---
id: 401
title: Windows部署
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::tip `提示`
如果需要Runtime依赖部署需要安装ASP.NET Core Runtime如果是独立发布部署则不需要安装Runtime
下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet
:::
遵循windows service服务安装/启动/停止方式 https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/sc-create
提供懒人bat脚本文件管理员身份运行**WindowsServiceCreate.bat**
<img src={require("@site/static/img/docs/Windows服务.png").default} />
运行脚本后可以在windows服务中找到**ThingsGateway**
<img src={require("@site/static/img/docs/Windows服务1.png").default} />
如需删除服务,运行**WindowsServiceDelete.bat**

View File

@@ -1,195 +0,0 @@
---
id: 402
title: IIS部署
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::caution 注意
1、必须启用IIS WebSocket协议
2、禁用IIS回收
:::
:::tip `提示`
如果需要Runtime依赖部署需要安装ASP.NET Core Runtime如果是独立发布部署则不需要安装Runtime
下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet
:::
:::tip 精简发布文件
如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 `.csproj` 并添加 `<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>`,如:
```cs showLineNumbers {3}
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>
```
若无需生成 `.pdb` 文件,可以继续添加:
```cs showLineNumbers {2-3}
<PropertyGroup>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
```
:::
## 服务器环境配置
### 第一步
安装.NET Core 运行时捆绑包:[点击下载](https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer)
### 第二步(命令)
```bash showLineNumbers
net stop was /y
```
### 第三步(命令)
```bash showLineNumbers
net start w3svc
```
### 第四步(命令)
```bash showLineNumbers
set ASPNETCORE_ENVIRONMENT=Production
```
## 部署到 IIS
### 添加新网站
<img src={require("@site/static/img/furion/ds1.png").default} />
### 配置网站信息
<img src={require("@site/static/img/furion/ds2.png").default} />
### 34.1.3.3 配置应用程序池
<img src={require("@site/static/img/furion/ds3.png").default} />
### 34.1.3.4 设置为 `非托管`
<img src={require("@site/static/img/furion/ds4.png").default} />
### 34.1.3.5 重启网站
只需重启网站或应用程序池即可。
## 34.1.4 常见问题
### 34.1.4.1 405 状态码,不支持 `PUTDELETE` 请求
默认情况下,`IIS`拒绝 `PUT`和 `DELETE` 请求,原因为 `IIS` 默认注册了一个名为 `WebDAVModule` 的自定义 `HttpModule` 导致的。
解决该问题,只需要在 `web.config` 移除即可:
```xml {2-6}
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="webDAVModule"/>
</modules>
</system.webServer>
</configuration>
```
微软官方文档:[https://docs.microsoft.com/zh-cn/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-405-website](https://docs.microsoft.com/zh-cn/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-405-website)
<img src={require("@site/static/img/furion/iis5.png").default} />
### 34.1.4.2 `WebSocket`/ `SignalR` 连接报错
如果项目部署在 `IIS` 中出现 `WebSoket`/`SignalR` 不能连接或连接失败等问题,请确保 `IIS` 服务中的 `WebSocket 协议` 是勾选状态
<img src={require("@site/static/img/furion/iis2.png").default} />
### 34.1.4.3 部署之后缺失 `api-ms-win.xxxx.dll` 问题
有时候将发布文件发布到服务器后,出现丢失 `api.ms-win.xxxx.dll` 文件,这时只需要重新发布并选择服务器特定的架构即可。
<img src={require("@site/static/img/furion/iis4.jpg").default} />
<img src={require("@site/static/img/furion/iis3.png").default} />
## 34.1.5 `IIS` 回收问题和配置
通过 `IIS` 部署 `.NET Core` 应用程序,如果启动了系统日志,就会发现经常出现 `Application is shutting down...` 的日志,代表 `IIS` 回收了应用程序池。
对于一个长期在线的网站来说,这是非常不合理的,所以我们可以通过以下配置让 `IIS` 进行长时间不访问便回收的机制。
---
配置步骤如下:
1. 打开 `IIS` 并点击左侧树根节点(计算机名称)并点击右侧的 `Configuration Editor`(配置编辑器)
<img src={require("@site/static/img/furion/iis6.png").default} />
2. 在 `Section`(节)选择 `system.applicationHost/applicationPools` 并设置 `startMode` 为 `AlwaysRunning`,之后点击 `Apply` 保存。
<img src={require("@site/static/img/furion/iis7.png").default} />
3. 点击左侧树根节点(计算机名称)下的 `Application Pools` 并点击最右侧的 `Set Appliation Pool Defaults...`(设置应用程序池默认配置...
<img src={require("@site/static/img/furion/iis8.png").default} />
4. 设置 `Idle Time-out (minutes)`(闲置超时(分钟)为 `0`
<img src={require("@site/static/img/furion/iis9.png").default} />
这样即可解决 `IIS` 回收问题。
## 34.1.6 卷影(无占用)复制发布替换
正常情况下如果我们代码重新发布后替换 `IIS` 中的文件,这时候会出现文件占用无法进行替换,过去运维人员都是先停止站点后替换再启动。但我们也可以配置 `web.config` 文件启用卷影复制模式实现类似**热更新**操作,如:
```xml showLineNumbers {12-18}
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
<system.webServer>
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModulev2" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
<handlerSettings>
<handlerSetting name="experimentalEnableShadowCopy" value="true" />
<handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" />
<!-- Only enable handler logging if you encounter issues-->
<!--<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />-->
<!--<handlerSetting name="debugLevel" value="FILE,TRACE" />-->
</handlerSettings>
</aspNetCore>
</system.webServer>
</configuration>
```
关于卷影复制更多知识可查看以下文档:
- [https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-net-6-preview-3/#shadow-copying-in-iis](https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-net-6-preview-3/#shadow-copying-in-iis)
- [https://learn.microsoft.com/zh-cn/dotnet/framework/app-domains/shadow-copy-assemblies](https://learn.microsoft.com/zh-cn/dotnet/framework/app-domains/shadow-copy-assemblies)

View File

@@ -1,122 +0,0 @@
---
id: 403
title: Docker部署
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
:::important 特别注意
验证码使用SkiaSharp如果是在 linux 服务下运行则需要安装 libfontconfig1如 ubuntu 的安装命令
```
apt-get update
apt-get -y install libfontconfig1
```
如果是采用 docker 模式运行,则需要在 dockerfile 中添加如下配置,该命令适用于 debian 和 ubuntu 的 docker
```
RUN apt-get update && apt-get -y install libfontconfig1
```
:::
:::tip `提示`
如果需要Runtime依赖部署需要安装ASP.NET Core Runtime如果是独立发布部署则不需要安装Runtime
下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet
:::
:::tip 精简发布文件
如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 `.csproj` 并添加 `<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>`,如:
```cs showLineNumbers {3}
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>
```
若无需生成 `.pdb` 文件,可以继续添加:
```cs showLineNumbers {2-3}
<PropertyGroup>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
```
:::
## 34.2.1 关于 `Docker` 部署
在 `Docker` 中部署网站有两种方式:
- `发布后构建`:此方式是先发布网站后在再构建镜像,这样可以减少不必要的构建层,而且还能缩减镜像大小。**(推荐)**
- `编译+构建+发布`:也就是说在 `Dockerfile` 中配置网站从构建到发布的完整过程,此方式会速度慢,而且会产生冗余层,增加镜像大小。
## 34.2.2 两种方式构建
### 34.2.2.1 发布后构建
- 👉 编写 `Dockerfile`
```
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
COPY . /app
WORKDIR /app
EXPOSE 80
#linux安装
RUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ sid main contrib non-free" > /etc/apt/sources.list
RUN apt-get update && apt-get -y install libfontconfig1
ENTRYPOINT ["dotnet", "ThingsGateway.Web.Server.dll","--urls","http://*:7200"]
```
- 👉 将 `Dockerfile` 文件拷贝到发布根目录
将编写好的 `Dockerfile` 文件(注意 `D` 大写)拷贝到发布网站的根目录下。
:::tip `提示`
git仓库中已经包含 `Dockerfile` 文件
:::
- 👉 构建 `Docker` 镜像
在网站发布后的路径根目录下(必须含 `Dockerfile`)打开 `CMD/PowerShell` 只需构建命令:
```bash showLineNumbers
docker build -t 网站名称:网站版本号 .
```
:::important 特别注意
后端的 `.` 不能省略
:::
- 👉 启动镜像
```bash showLineNumbers
docker run --name 容器名称 -p 5000:80 --restart=always -d 网站名称:网站版本号
```
:::caution `.NET8` 中 `80` 端口问题
在使用 `.NET8`,默认的端口由原来的 `80` 端口变成了 `8080`。[查看相关说明](https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/containers/8.0/aspnet-port)
:::
- 👉 在 `Dockerfile` 所在路径构建
接下来的步骤和上述步骤一致,不再重复编写。

View File

@@ -1,55 +0,0 @@
---
id: 404
title: Linux服务部署
---
:::important 特别注意
验证码使用SkiaSharp如果是在 linux 服务下运行则需要安装 libfontconfig1如 ubuntu 的安装命令
```
apt-get update
apt-get -y install libfontconfig1
```
如果是采用 docker 模式运行,则需要在 dockerfile 中添加如下配置,该命令适用于 debian 和 ubuntu 的 docker
```
RUN apt-get update && apt-get -y install libfontconfig1
```
:::
### PM2守护
详细安装请自行查找资料
查阅详细官方文档 https://pm2.keymetrics.io/docs/usage/quick-start/
下面介绍一下常用指令
- 安装pm2
```
npm install pm2@latest -g
```
- 启用应用程序
```
pm2 start pm2-linux.json
```
- 停止应用程序
```
pm2 stop pm2-linux.json
```
- 自动启动
```
pm2-startup
pm2 save
```
### linux服务
自行查询相关资料 **NetCore/Linux/Systemd**

View File

@@ -1,47 +0,0 @@
---
id: 501
title: 常见问题
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
#### 1、Modbus地址可以只写地址0吗一定要写成类似400001?
按照PLC Modbus寄存器的格式以区域号为起始字符后续加上寄存器地址+1
所以一定要写成400001
#### 2、数据如何设置小数位
网关提供灵活的脚本式配置转换,可以在变量的读取表达式中进行配置转换
如果要设置小数位为2可以填入
```
Math.Round(raw.ToDecimal(), 2)
```
#### 3、源码打开razor文件时不出现智能提示有waring警告(波浪线)
VS的bug导致的可以尝试升级vs把工程目录下的.vs文件夹已经全部的bin OR obj 删除后,重新打开解决方案
#### 4、报警属性中的报警约束如何定义
报警约束和变量表达式类似填入脚本返回值为true时报警生效
```csharp
//新建testInt1,testInt2两个变量
//在testInt1的高高报警值为1开启使能
//在testInt1的高高报警约束中定义testInt2>10
//testInt1为8,testInt2为11时产生testInt1报警
//testInt1为8,testInt2为10时不会产生testInt1报警
```
#### 5、启动项目之后驱动调试页面没有任何信息设备选择插件时也不出现任何选择项
网关插件未编译,需要编译解决方案,查看入门指南;或者插件未能成功拷贝到插件目录(Plugins)

View File

@@ -1,118 +0,0 @@
---
id: 502
title: 脚本常见问题
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 一、脚本示例
```
//变量脚本动态设置传输实体的Demo
//只传输变量名称,变量值,变量在线状态,变量值改变时间
public class DemoScript:IDynamicModel
{
public IEnumerable<dynamic> GetList(IEnumerable<object> datas)
{
List<DemoData> demoDatas = new List<DemoData>();
foreach (var v in datas)
{
var data=(VariableData)v;
DemoData demoData = new DemoData();
demoData.Value = data.Value;
demoData.Name = data.Name;
demoData.IsOnline = data.IsOnline;
demoData.ChangeTime = data.ChangeTime;
demoDatas.Add(demoData);
}
return demoDatas;
}
}
public class DemoData
{
public string Name { get; set; }
public bool IsOnline { get; set; }
public object Value { get; set; }
public DateTime ChangeTime { get; set; }
}
```
## 二、适配阿里云物模型脚本
对应文档:[阿里云设备属性上报](https://help.aliyun.com/zh/iot/user-guide/data-formats?spm=a2c4g.11186623.0.i17#section-jrb-lrl-b2b)
### 变量脚本
```
//一个适配阿里云IOT的变量脚本demo
public class AliYunIotScript:IDynamicModel
{
public IEnumerable<dynamic> GetList(IEnumerable<object> datas)
{
List<AliYunIot> aliYunIots = new();
// 对输入列表进行分组,根据 Remark1属性分组
var groups = datas.Where(a => !string.IsNullOrEmpty(((VariableData)a).Remark1)).GroupBy(a => ((VariableData)a).Remark1,a=> ((VariableData)a));
// 遍历每一个分组
foreach (var item in groups)
{
var requestId = Yitter.IdGenerator.YitIdHelper.NextId();
var iotId = item.Key; //Remark1自定义为设备Id
var productKey = item.FirstOrDefault(a => !string.IsNullOrEmpty(a.Remark2))?.Remark2;//Remark2自定义为产品Id
var deviceName = item.FirstOrDefault(a => !string.IsNullOrEmpty(a.Remark3))?.Remark3;//Remark3自定义为设备名称
AliYunIot aliYunIot = new();
aliYunIot.iotId = iotId;
aliYunIot.requestId = requestId.ToString();
aliYunIot.deviceName = deviceName;
aliYunIot.productKey = productKey;
// 遍历分组内的每一个元素
foreach (var varItem in item)
{
// 设置采集时间,并转换为 Unix 时间戳
// 设置值
var data = new Property() { value = varItem.Value, time = new DateTimeOffset(varItem.CollectTime).ToUnixTimeSeconds() };
// 以 变量名称 作为键,将新对象添加到分组的 属性 中
aliYunIot.items.Add(varItem.Name, data);
}
aliYunIots.Add(aliYunIot);
}
return aliYunIots;
}
}
public class AliYunIot
{
public string iotId { get; set; }
public string requestId { get; set; }
public string productKey { get; set; }
public string deviceName { get; set; }
public Dictionary<string, Property> items { get; set; } = new();
}
public class Property
{
public object value { get; set; }
public long time { get; set; }
}
```
### 传输主题
变量Topic 填入 `/${productKey}/${deviceName}/thing/event/property/post`

View File

@@ -1,38 +0,0 @@
---
id: 601
title: 采集插件开发
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## 说明
ThingsGateway封装了丰富的协议解析方法方便开发多种PLC通讯插件
下面我们以Omron FinsTcp/Udp为例讲解如何基于ThingsGateway开发一个**通用驱动**以及ThingsGateway插件
## 一、协议解析
`Fins` 协议是OSI模型第7层上的应用层报文传输协议我们画一个简单的应用层协议报文解析图
| Fins over TCP | Fins over UDP |
| ---------------| --------------------------|
| FinsTCP Header | None |
| FinsUDP Header | FinsUDP Header |
| Command Data |Command Data |
可以看出基于Tcp的Fins和基于Udp的Fins协议差别只是Tcp连接时会加一个FinsTcp报文头。
下面我们进行每个部分的说明
### 1、FinsTCP Header
FinsTcp头部固定为16个字节
| FinsTCP Header | 说明 |
| ---------------| --------------------------|
| Magic | 固定0x46494E53也就是FINS字符串的ASCII码 |
| Length | 后续全部字节的长度 |
| Command | 0是客户端请求握手1是服务端返回握手信息除0,1外是其他方法 |

View File

@@ -1,9 +0,0 @@
---
id: 602
title: 业务插件开发
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';

View File

@@ -1,80 +0,0 @@
---
id: upgrade
title: 更新日志
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';
## v5.0.0.1
> 2024-1-21
**更新描述:**
此版本是大版本更新。可能会产生很多不兼容部分,所以升级之前请做好备份。
如果需要从5.0前升级,请按以下操作进行
1、导出旧版本的excel配置文件包括采集设备、上传设备、变量等
2、5.0框架中,只建立一个对应插件的设备/变量这一步是因为插件是按需导出的需要建立对应插件才会导出相应的sheet建好后导出excel
3、参照5.0版本的excel内容把旧版本的配置内容移到新版本excel文件中
4、导入已修改好的5.0版本excel配置文件
**更新详情:**
- &nbsp;<Tag>调整</Tag> 重构采集驱动底层,网关缓存
- &nbsp;<Tag>调整</Tag> 重构网关权限管理框架
- &nbsp;<Tag>调整</Tag> 重构网关线程管理器
- &nbsp;<Tag>调整</Tag> 重构网关断线续传功能
- &nbsp;<Tag>调整</Tag> 重构脚本支持方便对应各大云平台的iot格式
- &nbsp;<Tag>调整</Tag> 调整网关UI外观风格
## v3.0.0.25
- &nbsp;<Tag>调整</Tag> 删除S7插件中的DstTSAP属性,用插槽号与机架号代替,更直观
- &nbsp;<Tag>调整</Tag> OPCUAServer插件 url属性支持多个url以逗号分割
## v3.0.0.19
- &nbsp;<Tag>新增</Tag> 添加TDengineDB时序库上传插件
- &nbsp;<Tag>新增</Tag> 添加QuestDB时序库上传插件
- &nbsp;<Tag>新增</Tag> 添加DLT645采集插件
- &nbsp;<Tag>新增</Tag> 添加调试软件
## v1.7.0
- &nbsp;<Tag>优化</Tag> OPCUAClient支持动态类型
## v1.2.0
- &nbsp;<Tag>新增</Tag> 添加OPCUAServer插件
##
## v1.1.0
- &nbsp;<Tag>新增</Tag> 添加OPCDAClient采集插件
- &nbsp;<Tag>新增</Tag> 添加OPCUAClient采集插件
- &nbsp;<Tag>新增</Tag> 串口基础框架
##
## v1.0.0
- &nbsp;<Tag>新增</Tag> 初始发布
##

View File

@@ -1,165 +0,0 @@
module.exports = {
title: "thingsgateway",
tagline: "物联网",
url: "https://kimdiego2098.github.io",
baseUrl: "/",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "throw",
favicon: "img/favicon.ico",
projectName: "ThingsGateway",
scripts: [],
themeConfig: {
zoom: {
selector:
".markdown :not(em) > img,.markdown > img, article img[loading]",
background: {
light: "rgb(255, 255, 255)",
dark: "rgb(50, 50, 50)",
},
// options you can specify via https://github.com/francoischalifour/medium-zoom#usage
config: {},
},
docs: {
sidebar: {
hideable: true,
autoCollapseCategories: true,
},
},
prism: {
additionalLanguages: ["powershell", "csharp", "sql"],
},
navbar: {
title: "ThingsGateway",
logo: {
alt: "ThingsGateway Logo",
src: "img/ThingsGatewayLogo.png",
},
hideOnScroll: true,
items: [
{
label: "更新日志",
position: "left",
to: "docs/upgrade"
},
{
label: "演示",
position: "right",
href: "http://47.119.161.158:5000",
},
{
label: "源码",
position: "right",
items: [
{
label: "Gitee主库",
href: "https://gitee.com/diego2098/ThingsGateway",
},
{
label: "GitHub",
href: "https://github.com/kimdiego2098/ThingsGateway",
},
{
label: "Nuget",
href: "https://www.nuget.org/profiles/kimdiego",
},
],
},
// {
// label: "博客",
// position: "right",
// href: "https://www.cnblogs.com/ThingsGateway/collections/1104",
// },
{
label: "视频",
position: "right",
href: "https://space.bilibili.com/88105259/channel/series",
},
{
label: "社区",
position: "right",
href: "https://gitee.com/dotnetchina",
},
],
},
footer: {
style: "dark",
links: [
{
title: "文档",
items: [
{
label: "入门",
to: "docs",
},
{
label: "手册",
to: "docs",
},
],
},
{
title: "社区",
items: [
{
label: "讨论",
href: "https://gitee.com/diego2098/ThingsGateway/issues",
},
{
label: "看板",
href: "https://gitee.com/diego2098/ThingsGateway/board",
},
],
},
{
title: "更多",
items: [
{
label: "仓库",
href: "https://gitee.com/diego2098/ThingsGateway",
},
],
},
],
copyright: `Copyright © 2020-${new Date().getFullYear()} Diego.`,
},
},
presets: [
[
"@docusaurus/preset-classic",
{
docs: {
sidebarPath: require.resolve("./sidebars.js"),
editUrl:
"https://gitee.com/diego2098/ThingsGateway/tree/master/doc/",
showLastUpdateTime: true,
showLastUpdateAuthor: true,
sidebarCollapsible: true,
sidebarCollapsed: true,
// sidebarCollapsible: true,
},
// blog: {
// showReadingTime: true,
// editUrl:
// "https://gitee.com/diego2098/ThingsGateway/tree/master/doc/",
// },
theme: {
customCss: require.resolve("./src/css/custom.css"),
},
},
],
],
plugins: [require.resolve("docusaurus-plugin-image-zoom")],
themes: [
[
"@easyops-cn/docusaurus-search-local",
{
hashed: true,
language: ["zh","en"],
highlightSearchTermsOnTargetPage: true,
explicitSearchResultPath: true,
},
],
],
};

View File

@@ -1,8 +0,0 @@
{
"symbol_url": "//at.alicdn.com/t/c/font_3276321_js2bwtaq9jc.js",
"use_typescript": false,
"save_dir": "./src/components/iconfonts",
"trim_icon_prefix": "icon",
"unit": "px",
"default_icon_size": 18
}

22684
doc/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,50 +0,0 @@
{
"name": "thingsgateway",
"version": "v6.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "^2.4.3",
"@docusaurus/preset-classic": "^2.4.3",
"@easyops-cn/docusaurus-search-local": "^0.33.5",
"@mdx-js/react": "^1.6.22",
"@svgr/webpack": "^6.5.1",
"animate.css": "^4.1.1",
"clsx": "^1.2.1",
"docusaurus-plugin-image-zoom": "^0.1.1",
"file-loader": "^6.2.0",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"url-loader": "^4.1.1"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^2.4.3",
"react-iconfont-cli": "^2.0.2"
},
"engines": {
"node": ">=16.14"
}
}

View File

@@ -1,315 +0,0 @@
module.exports = {
docs: [
{
type: "doc",
id: "upgrade",
label: "更新日志"
},
{
type: "doc",
id: "1",
label: "版权说明"
},
{
type: "doc",
id: "2",
label: "产品介绍"
},
{
type: "doc",
id: "3",
label: "入门指南"
},
{
type: "doc",
id: "100",
label: "驱动调试"
},
{
type: "category",
label: "基础手册",
items: [
{
type: "category",
label: "网关配置",
items: [
{
type: "doc",
id: "101",
label: "插件管理"
},
{
type: "doc",
id: "102",
label: "通道管理"
},
{
type: "doc",
id: "103",
label: "设备"
},
{
type: "doc",
id: "104",
label: "变量"
},
]
},
{
type: "doc",
id: "105",
label: "网关状态查看"
},
{
type: "doc",
id: "106",
label: "网关日志"
},
]
},
{
type: "category",
label: "采集插件手册",
items: [
{
type: "doc",
id: "200",
label: "ModbusMaster"
},
{
type: "doc",
id: "202",
label: "Dlt645Master"
},
{
type: "doc",
id: "203",
label: "SiemensS7Master"
},
{
type: "doc",
id: "204",
label: "OpcDaMaster"
},
{
type: "doc",
id: "205",
label: "OpcUaMaster"
},
{
type: "doc",
id: "206",
label: "VariableExpression"
}
]
},
{
type: "category",
label: "业务插件手册",
items: [
{
type: "doc",
id: "201",
label: "ModbusSlave"
},
{
type: "doc",
id: "301",
label: "MqttClient"
},
{
type: "doc",
id: "302",
label: "MqttServer"
},
{
type: "doc",
id: "303",
label: "RabbitMQProducer"
},
{
type: "doc",
id: "304",
label: "KafkaProducer"
},
{
type: "doc",
id: "305",
label: "TDengineDBProducer"
},
{
type: "doc",
id: "306",
label: "QuestDBProducer"
},
{
type: "doc",
id: "307",
label: "SqlDBProducer"
},
{
type: "doc",
id: "308",
label: "SqlHisAlarm"
},
{
type: "doc",
id: "309",
label: "OpcUaServer"
},
]
},
{
type: "category",
label: "Pro插件手册",
items: [
{
type: "doc",
id: "10001",
label: "ABCipMatser"
},
]
},
{
type: "category",
label: "部署",
items: [
{
type: "doc",
id: "400",
label: "编译发布"
},
{
type: "doc",
id: "401",
label: "windows服务部署"
},
{
type: "doc",
id: "402",
label: "iis部署"
},
{
type: "doc",
id: "403",
label: "docker部署"
},
{
type: "doc",
id: "404",
label: "linux服务部署"
}
]
},
{
type: "category",
label: "常见问题",
items: [
{
type: "doc",
id: "501",
label: "常见问题"
},
{
type: "doc",
id: "502",
label: "脚本常见问题"
},
]
},
{
type: "category",
label: "插件开发",
items: [
{
type: "doc",
id: "601",
label: "采集插件"
},
{
type: "doc",
id: "602",
label: "业务插件"
},
]
},
{
type: "category",
label: "nuget包文档",
items: [
{
type: "doc",
id: "20001",
label: "Modbus"
},
{
type: "doc",
id: "20002",
label: "SiemensS7"
},
{
type: "doc",
id: "20003",
label: "OpcDa"
},
{
type: "doc",
id: "20004",
label: "OpcUa"
},
{
type: "doc",
id: "20005",
label: "Dlt645"
},
]
},
{
type: "category",
label: "协议开发教程",
items: [
{
type: "doc",
label: "基础知识",
id: "30001",
}
]
},
{
type: "category",
label: "技术支持/合作",
items: [
{
type: "doc",
id: "1002",
label: "联系我们"
},
{
type: "doc",
id: "1000",
label: "赞助项目"
},
{
type: "doc",
id: "1001",
label: "Pro版"
},
]
},
]
};

View File

@@ -1,15 +0,0 @@
import React from 'react';
export default function Highlight({children, color}) {
return (
<span
style={{
backgroundColor: color,
borderRadius: '2px',
color: '#fff',
padding: '0.2rem',
}}>
{children}
</span>
);
}

View File

@@ -1,70 +0,0 @@
import React from "react";
import IconFont from "./iconfonts";
import classes from "./Tag.module.css";
export default function (props) {
const { children } = props;
const operates = {
新增: {
icon: "xinzeng",
bgColor: "#39b54a",
},
修复: {
icon: "bug",
bgColor: "#9c26b0",
},
文档: {
icon: "wendang",
bgColor: "rgb(79, 147, 255)",
},
更新: {
icon: "gengxin",
bgColor: "#0081ff",
},
调整: {
icon: "tiaozheng",
bgColor: "#333",
},
升级: {
icon: "shengji",
bgColor: "#e03997",
},
移除: {
icon: "shanchu",
bgColor: "red",
},
答疑: {
icon: "dayi",
bgColor: "#bbb",
},
优化: {
icon: "youhua",
bgColor: "#38e550",
},
推荐: {
bgColor: "#38e550",
},
DEMO: {
bgColor: "#38e550",
},
Pro版: {
bgColor: "#23AAF2",
}
};
return (
<label
className={classes.label}
title={children}
style={{ backgroundColor: operates[children].bgColor }}
>
<IconFont
name={operates[children].icon}
color="white"
size={14}
className={classes.icon}
/>{" "}
{children}
</label>
);
}

View File

@@ -1,17 +0,0 @@
.label {
display: inline-flex;
align-items: center;
color: #fff;
padding: 4px 6px;
font-size: 12px;
color: #fff;
border-radius: 3px;
line-height: normal;
margin-left: -3px;
vertical-align: middle;
margin-right: 6px;
}
.icon {
margin-right: 4px;
}

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconBug: FunctionComponent<Props>;
export default IconBug;

View File

@@ -1,31 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconBug = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M940 512H792V412c76.8 0 139-62.2 139-139 0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 34.8-28.2 63-63 63H232c-34.8 0-63-28.2-63-63 0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 76.8 62.2 139 139 139v100H84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h148v96c0 6.5 0.2 13 0.7 19.3C164.1 728.6 116 796.7 116 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-44.2 23.9-82.9 59.6-103.7 6 17.2 13.6 33.6 22.7 49 24.3 41.5 59 76.2 100.5 100.5S460.5 960 512 960s99.8-13.9 141.3-38.2c41.5-24.3 76.2-59 100.5-100.5 9.1-15.5 16.7-31.9 22.7-49C812.1 793.1 836 831.8 836 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-79.3-48.1-147.4-116.7-176.7 0.4-6.4 0.7-12.8 0.7-19.3v-96h148c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM716 680c0 36.8-9.7 72-27.8 102.9-17.7 30.3-43 55.6-73.3 73.3-20.1 11.8-42 20-64.9 24.3V484c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v396.5c-22.9-4.3-44.8-12.5-64.9-24.3-30.3-17.7-55.6-43-73.3-73.3C317.7 752 308 716.8 308 680V412h408v268z"
fill={getIconColor(color, 0, '#333333')}
/>
<path
d="M304 280h56c4.4 0 8-3.6 8-8 0-28.3 5.9-53.2 17.1-73.5 10.6-19.4 26-34.8 45.4-45.4C450.9 142 475.7 136 504 136h16c28.3 0 53.2 5.9 73.5 17.1 19.4 10.6 34.8 26 45.4 45.4C650 218.9 656 243.7 656 272c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-40-8.8-76.7-25.9-108.1-17.2-31.5-42.5-56.8-74-74C596.7 72.8 560 64 520 64h-16c-40 0-76.7 8.8-108.1 25.9-31.5 17.2-56.8 42.5-74 74C304.8 195.3 296 232 296 272c0 4.4 3.6 8 8 8z"
fill={getIconColor(color, 1, '#333333')}
/>
</svg>
);
};
IconBug.defaultProps = {
size: 18,
};
export default IconBug;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconDayi: FunctionComponent<Props>;
export default IconDayi;

View File

@@ -1,31 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconDayi = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M143.872 768a51.2 51.2 0 0 1-15.36-2.56 51.2 51.2 0 0 1-35.328-51.2V283.136a148.992 148.992 0 0 1 141.824-153.6h450.56a148.992 148.992 0 0 1 141.824 153.6V512a148.992 148.992 0 0 1-141.824 153.6H244.224l-60.928 80.896a51.2 51.2 0 0 1-39.424 21.504zM235.008 180.224a97.792 97.792 0 0 0-90.624 102.4v430.592L218.624 614.4h466.944a97.792 97.792 0 0 0 90.624-102.4V283.136a97.792 97.792 0 0 0-90.624-102.4z"
fill={getIconColor(color, 0, '#333333')}
/>
<path
d="M880.128 875.52a51.2 51.2 0 0 1-39.424-20.48l-60.928-80.896h-243.2a25.6 25.6 0 0 1 0-51.2h268.8l76.288 102.4v-295.936a25.6 25.6 0 0 1 25.6-25.6 25.6 25.6 0 0 1 25.6 25.6v293.888a51.2 51.2 0 0 1-51.2 51.2z"
fill={getIconColor(color, 1, '#333333')}
/>
</svg>
);
};
IconDayi.defaultProps = {
size: 18,
};
export default IconDayi;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconDown: FunctionComponent<Props>;
export default IconDown;

View File

@@ -1,27 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconDown = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M942.4615936 284.62787926c-14.30911886-14.12709945-37.31996786-14.05468217-51.48229632 0.21920654L517.97142983 661.27810333 139.75544149 286.45003606c-14.30911886-14.16232846-37.31996786-14.05468217-51.51948344 0.21920654-14.16232846 14.30911886-14.05468217 37.35519687 0.21920654 51.51948345l401.99014627 398.34974663c0.61847666 0.61847666 1.41897273 0.76526706 2.03940637 1.34655658 0.14483342 0.14483342 0.18201941 0.32685283 0.32685283 0.47364324 7.09877874 7.02636259 16.38375538 10.55911595 25.63154489 10.55911595 9.35739278 0 18.75001458-3.60516949 25.85075143-10.77636551l398.34974663-401.99014628C956.84312974 321.8382427 956.73548345 298.7921647 942.4615936 284.62787926z"
fill={getIconColor(color, 0, '#333333')}
/>
</svg>
);
};
IconDown.defaultProps = {
size: 18,
};
export default IconDown;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconFuwu: FunctionComponent<Props>;
export default IconFuwu;

View File

@@ -1,27 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconFuwu = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M384 896h-64v-70.4c0-15.2-10.4-28-24.8-31.2C159.2 768 64 644.8 64 496v-32h64v32c0 118.4 73.6 215.2 179.2 236 44.8 8.8 76.8 48 76.8 94.4v69.6zM704 896h-64v-70.4c0-45.6 32-85.6 76.8-94.4C822.4 711.2 896 614.4 896 496v-32h64v32c0 148.8-95.2 272-231.2 298.4-14.4 3.2-24.8 16-24.8 31.2v70.4zM512.8 640l-41.6-37.6c-147.2-133.6-244-208-244-316.8 0-88 68.8-156.8 156.8-156.8 49.6 0 97.6 23.2 128.8 60C544 152 592 128.8 641.6 128.8c88 0 156.8 68.8 156.8 156.8 0 108-96.8 183.2-244 316.8L512.8 640z"
fill={getIconColor(color, 0, '#333333')}
/>
</svg>
);
};
IconFuwu.defaultProps = {
size: 18,
};
export default IconFuwu;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconGengxin: FunctionComponent<Props>;
export default IconGengxin;

View File

@@ -1,27 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconGengxin = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1172 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M870.0416 250.4704a38.4 38.4 0 0 0-8.96 53.5552c13.056 18.2784 24.4224 37.8368 33.7408 58.112a38.4512 38.4512 0 0 0 50.944 18.8928 38.4512 38.4512 0 0 0 18.8416-50.944 436.0192 436.0192 0 0 0-40.96-70.6048 38.3488 38.3488 0 0 0-53.6064-9.0112zM181.4528 566.016a35.9936 35.9936 0 0 0 25.5488-10.5984L351.7952 410.624a36.096 36.096 0 1 0-51.0976-51.0976L217.6 442.5728C250.0096 278.1184 395.264 153.6 569.1392 153.6c50.7904 0 99.8912 10.3936 145.92 30.9248a38.4 38.4 0 1 0 31.232-70.0928 431.36 431.36 0 0 0-177.152-37.632c-214.6816 0-393.1136 156.416-428.4416 361.216L62.1568 359.4752a36.1984 36.1984 0 0 0-51.0976 51.0976l144.8448 144.7936a36.0448 36.0448 0 0 0 25.5488 10.6496zM978.5344 463.104a36.1984 36.1984 0 0 0-51.0976 0l-144.8448 144.7936a36.096 36.096 0 1 0 51.0976 51.0976l88.6272-88.576C894.3104 740.2496 746.8032 870.4 569.1392 870.4a357.7856 357.7856 0 0 1-325.2736-207.7184 38.4 38.4 0 1 0-69.7344 32.3072 434.3808 434.3808 0 0 0 394.9568 252.2112c215.1936 0 393.984-157.184 428.6464-362.7008l74.496 74.496a35.9936 35.9936 0 0 0 51.0976 0 36.096 36.096 0 0 0 0-51.0976l-144.7936-144.7936z"
fill={getIconColor(color, 0, '#333333')}
/>
</svg>
);
};
IconGengxin.defaultProps = {
size: 18,
};
export default IconGengxin;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconShanchu: FunctionComponent<Props>;
export default IconShanchu;

View File

@@ -1,31 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconShanchu = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M512 883.2A371.2 371.2 0 1 0 140.8 512 371.2 371.2 0 0 0 512 883.2z m0 64a435.2 435.2 0 1 1 435.2-435.2 435.2 435.2 0 0 1-435.2 435.2z"
fill={getIconColor(color, 0, '#333333')}
/>
<path
d="M557.056 512l122.368 122.368a31.744 31.744 0 1 1-45.056 45.056L512 557.056l-122.368 122.368a31.744 31.744 0 1 1-45.056-45.056L466.944 512 344.576 389.632a31.744 31.744 0 1 1 45.056-45.056L512 466.944l122.368-122.368a31.744 31.744 0 1 1 45.056 45.056z"
fill={getIconColor(color, 1, '#333333')}
/>
</svg>
);
};
IconShanchu.defaultProps = {
size: 18,
};
export default IconShanchu;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconShengji: FunctionComponent<Props>;
export default IconShengji;

View File

@@ -1,35 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconShengji = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M223.425605 449.2744l161.632237 0 0 253.65714c0 16.954137 13.745049 30.699186 30.699186 30.699186 16.95516 0 30.699186-13.745049 30.699186-30.699186l0-284.356326c0-16.95516-13.744026-30.699186-30.699186-30.699186L291.035446 387.876028l217.23665-248.51605L733.039255 387.580293 607.104031 387.580293c-16.954137 0-30.699186 13.745049-30.699186 30.699186l0 284.652062c0 16.954137 13.745049 30.699186 30.699186 30.699186s30.699186-13.745049 30.699186-30.699186L637.803217 448.978664l164.448376 0c12.140505 0 23.140023-7.154957 28.063149-18.251689 4.922103-11.097756 2.841721-24.053835-5.307889-33.05279L530.62315 72.570829c-5.881964-6.495948-14.273075-10.134825-23.024389-10.091846-8.763594 0.076748-17.076934 3.895727-22.844288 10.494005L200.312188 398.371056c-7.92653 9.067516-9.818623 21.931498-4.839215 32.896224S211.383338 449.2744 223.425605 449.2744z"
fill={getIconColor(color, 0, '#333333')}
/>
<path
d="M222.354204 829.113381l581.732178 0c16.954137 0 30.699186-13.745049 30.699186-30.699186s-13.745049-30.699186-30.699186-30.699186L222.354204 767.715009c-16.954137 0-30.699186 13.745049-30.699186 30.699186S205.400067 829.113381 222.354204 829.113381z"
fill={getIconColor(color, 1, '#333333')}
/>
<path
d="M804.086381 896.729361 222.354204 896.729361c-16.954137 0-30.699186 13.745049-30.699186 30.699186s13.745049 30.699186 30.699186 30.699186l581.732178 0c16.954137 0 30.699186-13.745049 30.699186-30.699186S821.041542 896.729361 804.086381 896.729361z"
fill={getIconColor(color, 2, '#333333')}
/>
</svg>
);
};
IconShengji.defaultProps = {
size: 18,
};
export default IconShengji;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconTiaozheng: FunctionComponent<Props>;
export default IconTiaozheng;

View File

@@ -1,27 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconTiaozheng = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M380.15463648 874.54223633c0 18.12744166-14.83154297 32.95898463-32.95898463 32.95898463s-32.95898463-14.83154297-32.95898462-32.95898463V228.9152832L172.71078883 370.86962865a33.04467773 33.04467773 0 0 1-46.60400416 0 33.04467773 33.04467773 0 0 1 0-46.6040034l197.55615234-198.14941406A32.76782227 32.76782227 0 0 1 347.0967749 116.52514674c0.03295924 0 0.06591772-0.03295924 0.09887695-0.03295924 1.54907201 0 2.90039088 0.69213867 4.41650366 0.88989258 2.66967773 0.39550781 5.40527318 0.59326172 7.94311548 1.61499049 12.03002904 4.94384766 20.59936549 16.71020508 20.59936549 30.45410156v725.0910642z m320.15698192 23.34155248a32.85351537 32.85351537 0 0 1-23.43383789 9.59106445c-0.03295924 0-0.06591772 0.03295924-0.09887696 0.03295924-1.54907201 0-2.90039088-0.69213867-4.41650365-0.92285182-2.70263697-0.36254857-5.40527318-0.56030248-7.94311549-1.61498972-12.03002904-4.91088842-20.59936549-16.67724584-20.59936473-30.42114309V149.45776367c0-18.12744166 14.83154297-32.95898463 32.95898387-32.95898463s32.95898463 14.83154297 32.95898463 32.95898463v645.60058619l141.52587916-141.92138697c12.81445313-12.82104467 33.81591797-12.82104467 46.63037109 0 12.78808619 12.81445313 12.78808619 33.77636719 0 46.60400416L700.3116184 897.88378881z"
fill={getIconColor(color, 0, '#333333')}
/>
</svg>
);
};
IconTiaozheng.defaultProps = {
size: 18,
};
export default IconTiaozheng;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconUp: FunctionComponent<Props>;
export default IconUp;

View File

@@ -1,27 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconUp = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M81.5384064 739.37212074c14.30911886 14.12709945 37.31996786 14.05468217 51.48229632-0.21920654L506.02857017 362.72189667 884.24455851 737.54996394c14.30911886 14.16232846 37.31996786 14.05468217 51.51948344-0.21920654 14.16232846-14.30911886 14.05468217-37.35519687-0.21920654-51.51948345l-401.99014627-398.34974663c-0.61847666-0.61847666-1.41897273-0.76526706-2.03940637-1.34655658-0.14483342-0.14483342-0.18201941-0.32685283-0.32685282-0.47364324-7.09877874-7.02636259-16.38375538-10.55911595-25.6315449-10.55911595-9.35739278 0-18.75001458 3.60516949-25.85075143 10.77636551l-398.34974663 401.99014628C67.15687026 702.1617573 67.26451655 725.2078353 81.5384064 739.37212074z"
fill={getIconColor(color, 0, '#333333')}
/>
</svg>
);
};
IconUp.defaultProps = {
size: 18,
};
export default IconUp;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconWendang: FunctionComponent<Props>;
export default IconWendang;

View File

@@ -1,35 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconWendang = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M302 332a30 30 0 1 1 0-60h420a30 30 0 0 1 0 60H302zM302 542a30 30 0 0 1 0-60h420a30 30 0 0 1 0 60H302zM302 752a30 30 0 0 1 0-60h120a30 30 0 0 1 0 60H302z"
fill={getIconColor(color, 0, '#333333')}
/>
<path
d="M789.47 784.1a30 30 0 0 1 39.36 45.3l-144.24 125.25a30 30 0 0 1-19.68 7.35H214.85C163.4 962 122 919.46 122 867.38V156.62C122 104.54 163.4 62 214.85 62h594.3C860.6 62 902 104.54 902 156.62v529.05a30 30 0 1 1-60 0V156.62C842 137.3 827.09 122 809.15 122H214.85C196.91 122 182 137.3 182 156.62v710.76C182 886.7 196.91 902 214.85 902h438.84l135.78-117.9z"
fill={getIconColor(color, 1, '#333333')}
/>
<path
d="M692 931.19a30 30 0 1 1-60 0v-174.6C632 704.57 673.4 662 724.85 662h147.78a30 30 0 0 1 0 60h-147.78c-17.94 0-32.85 15.3-32.85 34.62v174.6z"
fill={getIconColor(color, 2, '#333333')}
/>
</svg>
);
};
IconWendang.defaultProps = {
size: 18,
};
export default IconWendang;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconXinzeng: FunctionComponent<Props>;
export default IconXinzeng;

View File

@@ -1,31 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconXinzeng = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M512 71.68c-242.688 0-440.32 197.632-440.32 440.32s197.632 440.32 440.32 440.32 440.32-197.632 440.32-440.32-197.632-440.32-440.32-440.32z m0 819.2c-208.896 0-378.88-169.984-378.88-378.88s169.984-378.88 378.88-378.88 378.88 169.984 378.88 378.88-169.984 378.88-378.88 378.88z"
fill={getIconColor(color, 0, '#333333')}
/>
<path
d="M542.72 261.12H481.28v220.16H261.12v61.44h220.16v220.16h61.44v-220.16h220.16V481.28h-220.16z"
fill={getIconColor(color, 1, '#333333')}
/>
</svg>
);
};
IconXinzeng.defaultProps = {
size: 18,
};
export default IconXinzeng;

View File

@@ -1,12 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
size?: number;
color?: string | string[];
}
declare const IconYouhua: FunctionComponent<Props>;
export default IconYouhua;

View File

@@ -1,27 +0,0 @@
/* eslint-disable */
import React from 'react';
import { getIconColor } from './helper';
const DEFAULT_STYLE = {
display: 'block',
};
const IconYouhua = ({ size, color, style: _style, ...rest }) => {
const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE;
return (
<svg viewBox="0 0 1024 1024" width={size + 'px'} height={size + 'px'} style={style} {...rest}>
<path
d="M856.4 292.8c-63.3-63.6-126.6-127.1-190.2-190.3-15.3-15.2-32.7-16.1-48.1-0.8-64.3 63.6-128.1 127.6-191.8 191.9-14 14.2-16.3 31.6-1.7 46 14.8 14.7 31.5 10.6 46.1-2.7 5.1-4.6 9.8-9.7 14.7-14.7 39.2-39.7 78.5-79.5 122.8-124.4 0 170 3 332.2-1.1 494-2.4 96.4-91.2 174.6-187.4 176.6-110.6 2.3-198.6-84.4-199-197.4-0.6-136.3-0.2-272.6-0.1-408.9 0-21.8-7.9-37.4-31.2-39.9-18.9-2-33.2 13.2-33.1 37.5 0 145.8-3.4 291.7 2.4 437.2 6 152.1 160.4 263.5 309.5 230.5C591.8 900 672.8 797.2 673.6 664.6c0.8-144 0.2-288.1 0.2-432.1v-33.3c11.2 10.2 17.6 15.4 23.3 21.3 38.5 38.4 76.7 77 115.3 115.2 14.8 14.6 32.2 19.2 47.8 2.9 13.8-14.8 10.3-31.7-3.8-45.8z"
fill={getIconColor(color, 0, '#333333')}
/>
</svg>
);
};
IconYouhua.defaultProps = {
size: 18,
};
export default IconYouhua;

View File

@@ -1,3 +0,0 @@
/* eslint-disable */
export declare const getIconColor: (color: string | string[] | undefined, index: number, defaultColor: string) => string;

View File

@@ -1,17 +0,0 @@
/* eslint-disable */
/**
* @param {string | string[] | undefined} color
* @param {number} index
* @param {string} defaultColor
* @return {string}
*/
export const getIconColor = (color, index, defaultColor) => {
return color
? (
typeof color === 'string'
? color
: color[index] || defaultColor
)
: defaultColor;
};

View File

@@ -1,25 +0,0 @@
/* eslint-disable */
import { SVGAttributes, FunctionComponent } from 'react';
export { default as IconYouhua } from './IconYouhua';
export { default as IconDayi } from './IconDayi';
export { default as IconShengji } from './IconShengji';
export { default as IconTiaozheng } from './IconTiaozheng';
export { default as IconGengxin } from './IconGengxin';
export { default as IconWendang } from './IconWendang';
export { default as IconShanchu } from './IconShanchu';
export { default as IconBug } from './IconBug';
export { default as IconXinzeng } from './IconXinzeng';
export { default as IconFuwu } from './IconFuwu';
export { default as IconDown } from './IconDown';
export { default as IconUp } from './IconUp';
interface Props extends Omit<SVGAttributes<SVGElement>, 'color'> {
name: 'youhua' | 'dayi' | 'shengji' | 'tiaozheng' | 'gengxin' | 'wendang' | 'shanchu' | 'bug' | 'xinzeng' | 'fuwu' | 'down' | 'up';
size?: number;
color?: string | string[];
}
declare const IconFont: FunctionComponent<Props>;
export default IconFont;

View File

@@ -1,61 +0,0 @@
/* eslint-disable */
import React from 'react';
import IconYouhua from './IconYouhua';
import IconDayi from './IconDayi';
import IconShengji from './IconShengji';
import IconTiaozheng from './IconTiaozheng';
import IconGengxin from './IconGengxin';
import IconWendang from './IconWendang';
import IconShanchu from './IconShanchu';
import IconBug from './IconBug';
import IconXinzeng from './IconXinzeng';
import IconFuwu from './IconFuwu';
import IconDown from './IconDown';
import IconUp from './IconUp';
export { default as IconYouhua } from './IconYouhua';
export { default as IconDayi } from './IconDayi';
export { default as IconShengji } from './IconShengji';
export { default as IconTiaozheng } from './IconTiaozheng';
export { default as IconGengxin } from './IconGengxin';
export { default as IconWendang } from './IconWendang';
export { default as IconShanchu } from './IconShanchu';
export { default as IconBug } from './IconBug';
export { default as IconXinzeng } from './IconXinzeng';
export { default as IconFuwu } from './IconFuwu';
export { default as IconDown } from './IconDown';
export { default as IconUp } from './IconUp';
const IconFont = ({ name, ...rest }) => {
switch (name) {
case 'youhua':
return <IconYouhua {...rest} />;
case 'dayi':
return <IconDayi {...rest} />;
case 'shengji':
return <IconShengji {...rest} />;
case 'tiaozheng':
return <IconTiaozheng {...rest} />;
case 'gengxin':
return <IconGengxin {...rest} />;
case 'wendang':
return <IconWendang {...rest} />;
case 'shanchu':
return <IconShanchu {...rest} />;
case 'bug':
return <IconBug {...rest} />;
case 'xinzeng':
return <IconXinzeng {...rest} />;
case 'fuwu':
return <IconFuwu {...rest} />;
case 'down':
return <IconDown {...rest} />;
case 'up':
return <IconUp {...rest} />;
}
return null;
};
export default IconFont;

View File

@@ -1,25 +0,0 @@
/* stylelint-disable docusaurus/copyright-header */
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: rgb(33, 175, 144);
--ifm-color-primary-darker: rgb(31, 165, 136);
--ifm-color-primary-darkest: rgb(26, 136, 112);
--ifm-color-primary-light: rgb(70, 203, 174);
--ifm-color-primary-lighter: rgb(102, 212, 189);
--ifm-color-primary-lightest: rgb(146, 224, 208);
--ifm-code-font-size: 95%;
}
.docusaurus-highlight-code-line {
background-color: rgb(72, 77, 91);
display: block;
margin: 0 calc(-1 * var(--ifm-pre-padding));
padding: 0 var(--ifm-pre-padding);
}

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1673488195730" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2727" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.390625" height="200"><path d="M2.438 0h975.238v975.238H2.438z" fill="#2FC2B0" fill-opacity="0" p-id="2728"></path><path d="M266.386 774.095c0 20.675 18.725 37.547 41.594 37.547h41.643V943.25c0 31.208 27.843 56.369 62.415 56.369 34.524 0 62.415-25.21 62.415-56.369V811.69h83.188v131.56c0 31.208 27.892 56.369 62.415 56.369 34.524 0 62.416-25.21 62.416-56.369V811.69h41.594c22.918 0 41.593-16.92 41.593-37.546V398.19H266.386v375.856zM162.377 398.238c-34.523 0-62.415 25.21-62.415 56.37v263.118c0 31.208 27.892 56.37 62.415 56.37 34.524 0 62.415-25.162 62.415-56.37V454.607c0-31.207-27.891-56.369-62.415-56.369z m707.292 0c-34.524 0-62.416 25.21-62.416 56.37v263.118c0 31.208 27.892 56.37 62.416 56.37 34.523 0 62.415-25.162 62.415-56.37V454.607c0-31.207-27.892-56.369-62.415-56.369z m-206.75-219.477l54.271-49.054a17.457 17.457 0 0 0 0-26.478 22.333 22.333 0 0 0-29.306 0l-61.586 55.393a269.897 269.897 0 0 0-110.25-23.454c-39.986 0-77.386 8.63-110.885 23.65l-61.782-55.784a22.333 22.333 0 0 0-29.354 0 17.457 17.457 0 0 0 0 26.478l54.515 49.25c-61.78 41.154-102.156 107.275-102.156 181.881h499.322c0-74.752-40.618-140.922-102.79-181.882zM432.81 285.501h-41.594v-37.547h41.594v37.547z m208.018 0h-41.594v-37.547h41.594v37.547z" fill="#2FC2B0" p-id="2729"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1611298937091" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="862" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M944.9 471.640625a141.946875 141.946875 0 0 0-105.046875-9.50625 139.640625 139.640625 0 0 0-56.784375-88.959375l-11.25-8.859375-9.534375 10.6875a117.675 117.675 0 0 0-22.21875 84.65625 108.590625 108.590625 0 0 0 21.20625 56.86875 164.925 164.925 0 0 1-30.54375 13.44375A204.271875 204.271875 0 0 1 667.75625 540.125H73.925l-1.265625 13.303125a248.428125 248.428125 0 0 0 20.896875 129.375l8.128125 16.115625 0.928125 1.51875c55.828125 92.19375 167.203125 139.95 274.05 139.95 206.8875 0 364.190625-98.746875 442.575-288.478125 52.36875 2.671875 105.946875-12.403125 131.56875-61.003125l6.525-12.403125-12.43125-6.975zM246.978125 711.6875a46.434375 46.434375 0 1 1 47.8125-46.434375 47.165625 47.165625 0 0 1-47.8125 46.434375z" fill="#1296db" p-id="863"></path><path d="M246.978125 640.7a24.440625 24.440625 0 1 0 25.14375 24.46875 24.80625 24.80625 0 0 0-25.14375-24.46875M118.25 427.625h84.375v84.375H118.25z m112.5 0h84.375v84.375h-84.375z m0-112.5h84.375v84.375h-84.375z m112.5 0h84.375v84.375h-84.375z m0 112.5h84.375v84.375h-84.375z m112.5 0h84.375v84.375h-84.375z m112.5 0h84.375v84.375h-84.375zM455.75 315.125h84.375v84.375h-84.375z m0-112.5h84.375v84.375h-84.375z" fill="#1296db" p-id="864"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,588 +0,0 @@
.ThingsGateway-banner {
padding: 4rem 2rem;
align-items: center;
background-color: #211b50;
color: #fff;
}
.ThingsGateway-banner-container {
display: flex;
justify-content: space-between;
max-width: 1140px;
margin: 0 auto;
}
.ThingsGateway-banner-item {
flex: 1;
}
.ThingsGateway-banner-project {
font-size: 1.5em;
font-weight: 700;
}
.ThingsGateway-banner-description {
margin: 24px 0;
font-size: 2.5em;
font-weight: 700;
line-height: 1.25;
background-image: linear-gradient(81deg, #8759ff, #3fc4fe, #42ffac);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
.ThingsGateway-banner-spec {
padding: 0;
opacity: 0.7;
font-family: Muli;
font-size: 1em;
font-weight: 500;
line-height: 1.33;
}
.ThingsGateway-banner-spec li {
list-style: none;
position: relative;
padding-left: 1em;
margin-bottom: 1em;
}
.ThingsGateway-banner-spec li::before {
content: "";
position: absolute;
top: 0.5em;
left: 0;
width: 4px;
height: 4px;
background-color: rgb(135, 89, 255);
}
.ThingsGateway-support-platform {
font-size: 0.85em;
line-height: 2;
margin-top: 3em;
font-weight: 500;
opacity: 0.6;
color: white;
font-family: Muli;
}
.ThingsGateway-support-icons {
display: flex;
margin-top: 12px;
}
.ThingsGateway-support-icons span {
margin-right: 20px;
}
.ThingsGateway-get-start,
.ThingsGateway-try-demo {
margin-top: 4em;
border-radius: 2em;
min-width: 145px;
color: #fff;
background: #8759ff;
position: relative;
line-height: 1.5;
text-align: center;
padding: 8px 32px;
text-decoration: none;
display: inline-block;
white-space: nowrap;
}
.ThingsGateway-try-demo {
background-color: rgb(33, 176, 145);
margin-left: 20px;
}
.ThingsGateway-get-start:hover {
background: rgba(135, 89, 255, 0.9);
}
.ThingsGateway-try-demo:hover {
opacity: 0.9;
}
.ThingsGateway-banner-item .system-window {
width: 34rem;
}
.ThingsGateway-get-start:hover,
.ThingsGateway-try-demo:hover {
color: #fff;
text-decoration: none;
}
.system-top-bar {
background-image: linear-gradient(to right,
rgba(136, 89, 255, 0.2),
rgba(63, 196, 254, 0.2) 90%,
rgba(66, 255, 172, 0.2));
padding: 0.25em 1em;
}
.system-top-bar-circle {
display: inline-block;
width: 0.5em;
height: 0.5em;
margin-left: 0.3em;
border-radius: 50%;
filter: brightness(100%);
}
.system-window {
--ifm-leading: 0;
width: 95%;
padding: 0;
border-radius: 1em;
overflow: hidden;
background: rgb(33, 27, 80);
}
.system-window iframe {
border-radius: unset;
}
.system-window pre {
margin-bottom: 0 !important;
}
.blue-accent {
--uni-border-color: #3fbbfe;
--uni-box-shadow-color: rgba(63, 187, 254, 0.1);
--ifm-menu-color-active: #3fbbfe;
}
.preview-border {
box-shadow: 0 6px 58px 0 rgba(63, 187, 254, 0.1);
border: solid 1px #3fbbfe;
}
.ThingsGateway-content {
margin-top: 4em;
margin-bottom: 4em;
text-align: center;
}
.ThingsGateway-small-title {
color: #412a94;
font-family: Muli;
font-size: 1em;
font-weight: 600;
letter-spacing: 1px;
opacity: 0.6;
}
.ThingsGateway-small-title.dark {
color: #f5f6f7;
}
.ThingsGateway-big-title {
color: #412a94;
font-family: Poppins;
font-size: 2em;
font-weight: 700;
line-height: 1.31;
margin-bottom: 2em;
}
.ThingsGateway-big-title.dark {
color: #f5f6f7;
}
.ThingsGateway-gitee-log {
display: flex;
justify-content: center;
flex-wrap: nowrap;
}
.ThingsGateway-log-item {
width: 260px;
height: 173px;
box-sizing: border-box;
margin-right: 65px;
position: relative;
}
.ThingsGateway-log-jiao {
width: 100px;
height: 100px;
background: #fff;
position: absolute;
top: 0;
right: 0;
top: -6px;
right: -6px;
border-top: 1px dashed #a795e8;
border-right: 1px dashed #a795e8;
}
.ThingsGateway-log-jiao.dark {
background: #18191a;
}
.ThingsGateway-log-item:last-child {
margin-right: 0;
}
.ThingsGateway-log-number {
position: relative;
z-index: 2;
height: 100%;
display: flex;
width: 100%;
justify-content: center;
align-items: center;
flex-direction: column;
}
.ThingsGateway-log-number div {
font-size: 3em;
font-weight: 700;
}
.ThingsGateway-log-number span {
font-family: Poppins, sans-serif;
font-stretch: normal;
font-style: normal;
letter-spacing: normal;
line-height: normal;
color: #1c1e21;
}
.ThingsGateway-log-number span.dark {
color: #f5f6f7;
}
.ThingsGateway-remark {
display: flex;
justify-content: center;
}
.ThingsGateway-remark-item {
margin: 2em;
max-width: 320px;
height: 100%;
padding: 4em 2em;
border-style: solid;
border-width: 6px;
border-image-source: linear-gradient(var(--uni-border-gradient-degrees),
#8759ff,
#3fc4fe 51%,
#42ffac);
border-image-slice: 1;
}
.ThingsGateway-remark-item:first-child {
border-top: 0;
border-right: 0;
--uni-border-gradient-degrees: 41deg;
}
.ThingsGateway-remark-item:nth-child(2) {
--uni-border-gradient-degrees: 100deg;
border-right: 0;
border-left: 0;
border-top: 0;
border-bottom: 0;
}
.ThingsGateway-remark-item:last-child {
--uni-border-gradient-degrees: 221deg;
border-bottom: 0;
border-left: 0;
}
.ThingsGateway-remark-p {
height: 150px;
}
.ThingsGateway-remark-p h1 {
font-size: 24px;
}
.ThingsGateway-remark-p p {
color: rgb(71, 71, 71);
font-family: Muli;
font-size: 1em;
line-height: 1.75;
opacity: 0.8;
text-align: center;
}
.ThingsGateway-remark-p p.dark {
color: #f5f6f7;
}
.ThingsGateway-whouse {
align-items: center;
background-color: #412a94 !important;
color: #fff;
display: flex;
padding: 5rem 0;
}
.ThingsGateway-who-custom {
background-color: #fff;
min-height: 500px;
width: 60%;
box-sizing: border-box;
padding: 6rem;
justify-content: flex-end;
align-items: center;
color: #723cff;
text-align: right;
display: flex;
flex-wrap: wrap;
}
.ThingsGateway-custom-img {
text-decoration: none;
color: transparent;
margin-left: 3em;
}
.ThingsGateway-who-des {
padding: 0 5rem;
box-sizing: border-box;
}
.ThingsGateway-who-des p {
color: #fff;
font-family: Muli;
font-size: 1em;
line-height: 1.75;
margin-bottom: 0.8em;
opacity: 0.8;
}
.footer {
background-color: #211b50 !important;
}
.ThingsGateway-links {
margin: 4em;
text-align: center;
}
.ThingsGateway-links-content a {
display: inline-block;
margin: 0 1em;
font-size: 20px;
font-weight: 600;
}
.ThingsGateway-proccesson {
margin: 4em 0;
text-align: center;
}
#dotnet-china {
height: 100px;
}
.ThingsGateway-contributors {
margin: 4em 0;
text-align: center;
}
.ThingsGateway-contributor-item {
display: inline-block;
margin: 10px 5px;
text-align: center;
background-color: #f3f3f3;
color: #333;
padding: 10px;
width: 130px;
overflow: hidden;
border-radius: 4px;
height: 170px;
box-shadow: 4px 3px 16px -3px #0009;
box-sizing: border-box;
position: relative;
}
.ThingsGateway-contributor-extra {
position: absolute;
top: -9px;
right: 0;
padding: 2px 5px;
background-color: #412a94;
color: #fff;
font-size: 12px;
border-radius: 4px;
text-align: left;
}
.ThingsGateway-contributor-item a {
text-decoration: none;
color: #333;
font-weight: bold;
display: block;
font-size: 10pt;
}
.ThingsGateway-contributor-item div {
margin-top: 10px;
}
.ThingsGateway-contributor-item img {
display: block;
width: 100%;
}
.ThingsGateway-contributor-item.dark {
background: #333;
}
.ThingsGateway-contributor-item.dark a {
color: #f5f6f7;
}
.ThingsGateway-get-start-btn {
position: relative;
display: flex;
}
.ThingsGateway-version {
position: absolute;
z-index: 10;
right: 0;
top: -10px;
color: yellow;
font-size: 16px;
}
@media screen and (max-width: 1024px) {
.ThingsGateway-banner-container {
justify-content: unset;
flex-direction: column;
}
.ThingsGateway-get-start-btn {
text-align: center;
}
#dotnet-china {
height: 45px;
}
.ThingsGateway-banner-item .system-window {
width: 100%;
margin-top: 3rem;
}
.ThingsGateway-gitee-log {
justify-content: center;
flex-wrap: unset;
flex-direction: column;
align-items: center;
padding: 20px;
}
.ThingsGateway-log-item {
width: 100%;
height: 173px;
margin-right: 0;
margin-top: 25px;
}
.ThingsGateway-big-title {
margin-bottom: 1em;
}
.ThingsGateway-remark {
flex-direction: column;
}
.ThingsGateway-whouse {
flex-direction: column;
padding-bottom: 1em;
}
.ThingsGateway-who-des {
padding-top: 1em;
padding-bottom: 2em;
}
.ThingsGateway-remark-item {
border: none;
margin: 0;
width: 100%;
max-width: unset;
padding-bottom: 0;
}
.ThingsGateway-custom-img {
margin-left: 0;
margin-bottom: 2em;
}
.ThingsGateway-custom-img img {
max-width: unset;
}
.ThingsGateway-who-custom {
justify-content: center;
align-items: center;
width: 100%;
text-align: center;
}
.ThingsGateway-contributors {
margin: 4em 0;
}
}
.ThingsGateway-bifa {
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
color: #fff;
display: flex;
flex-direction: row-reverse;
justify-content: center;
padding: 100px 0;
}
.ThingsGateway-wzi {
border-left: 1px solid rgba(137, 147, 180, 0.5);
writing-mode: vertical-lr;
font-size: 20px;
font-family: Arial, Helvetica, sans-serif;
letter-spacing: 10px;
padding: 25px;
height: 320px;
}
.ThingsGateway-wzi span {
color: rgb(68, 188, 254);
font-weight: 500;
}
.ThingsGateway-wzi-title {
width: 84px;
height: 320px;
writing-mode: vertical-lr;
background: rgb(68, 114, 196);
background-image: linear-gradient(rgb(91, 128, 212) 1px, transparent 0),
linear-gradient(90deg, rgb(91, 128, 212) 1px, transparent 0);
background-size: 8px 8px;
margin-left: 40px;
font-size: 22px;
font-weight: 500;
letter-spacing: 12px;
display: flex;
align-items: center;
}
.ThingsGateway-wzi-title b {
font-size: 20px;
writing-mode: horizontal-tb;
font-family: Arial, Helvetica, sans-serif;
margin: 20px 0;
letter-spacing: 2px;
}

View File

@@ -1,194 +0,0 @@
import Link from "@docusaurus/Link";
import { useColorMode } from "@docusaurus/theme-common";
import useBaseUrl from "@docusaurus/useBaseUrl";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout";
import components from "@theme/MDXComponents";
import React from "react";
import AndroidIcon from "./android.svg";
import DockerIcon from "./docker.svg";
import "./index.css";
import "./index.own.css";
import KubernetesIcon from "./kubernetes.svg";
import LinuxIcon from "./linux.svg";
import MacOSIcon from "./macos.svg";
import WindowIcon from "./windows.svg";
function Home() {
const context = useDocusaurusContext();
const { siteConfig = {} } = context;
React.useEffect(() => { }, []);
return (
<Layout
title={`ThingsGateway说明文档。 ${siteConfig.title}`}
description="ThingsGateway说明文档"
>
<Banner />
<Gitee />
</Layout>
);
}
function Banner() {
const { colorMode, setLightTheme, setDarkTheme } = useColorMode();
const isDarkTheme = colorMode === "dark";
return (
<div className={"ThingsGateway-banner" + (isDarkTheme ? " dark" : "")}>
<div className="ThingsGateway-banner-container">
<div className="ThingsGateway-banner-item">
<div className="ThingsGateway-banner-project">
<span style={{ fontSize: 20, fontWeight: "Blod", color: "#FFFFFF" }}>
ThingsGateway
</span>
</div>
<div style={{ color: "#82aaff", position: "relative", fontSize: 14 }}>
基于NetCore的跨平台物联网关
</div>
<div className={"ThingsGateway-banner-description"+ (isDarkTheme ? " dark" : "")}>
不只是心血来潮更是持之以恒
</div>
<ul className="ThingsGateway-banner-spec">
<li> Apache-2.0 宽松开源协议商业免费授权</li>
<li>
底层驱动库 支持 .NET Framework 4.5及以上.NET Standard2.0及以上
</li>
<li>网关 支持 .NET 6/7/8</li>
<li>极速上手极简使用</li>
</ul>
<div className="ThingsGateway-support-platform">受支持平台</div>
<div className="ThingsGateway-support-icons">
<span>
<WindowIcon height="39" width="39" />
</span>
<span>
<LinuxIcon height="39" width="39" />
</span>
<span>
<AndroidIcon height="39" width="39" />
</span>
<span>
<MacOSIcon height="39" width="39" />
</span>
<span>
<DockerIcon height="39" width="39" />
</span>
<span>
<KubernetesIcon height="39" width="39" />
</span>
</div>
<div className="ThingsGateway-get-start-btn">
<Link className="ThingsGateway-get-start" to={useBaseUrl("docs/")}>
入门指南
<span className="ThingsGateway-version">v6.0</span>
</Link>
</div>
</div>
</div>
</div>
);
}
function Gitee() {
const { colorMode, setLightTheme, setDarkTheme } = useColorMode();
const isDarkTheme = colorMode === "dark";
return (
<div className="ThingsGateway-content">
<p className={"ThingsGateway-small-title" + (isDarkTheme ? " dark" : "")}>
开源免费/商业免费授权
</p>
<h1 className={"ThingsGateway-big-title" + (isDarkTheme ? " dark" : "")}>
Apache-2.0 开源协议代码在 Gitee/Github 平台托管
</h1>
<div className="ThingsGateway-gitee-log">
<div
className="ThingsGateway-log-item"
style={{ border: "6px solid #723cff" }}
>
<div
className={"ThingsGateway-log-jiao" + (isDarkTheme ? " dark" : "")}
></div>
<div className="ThingsGateway-log-number">
<div style={{ color: "#723cff" }}>750 +</div>
<span className={isDarkTheme ? " dark" : ""}>Stars</span>
</div>
</div>
<div
className="ThingsGateway-log-item"
style={{ border: "6px solid #3fbbfe" }}
>
<div
className={"ThingsGateway-log-jiao" + (isDarkTheme ? " dark" : "")}
></div>
<div className="ThingsGateway-log-number">
<div style={{ color: "#3fbbfe" }}>200 +</div>
<span className={isDarkTheme ? " dark" : ""}>Forks</span>
</div>
</div>
</div>
</div>
);
}
function CodeSection(props) {
let { language, replace, section, source } = props;
source = source.replace(/\/\/ <.*?\n/g, "");
if (replace) {
for (const [pattern, value] of Object.entries(replace)) {
source = source.replace(new RegExp(pattern, "gs"), value);
}
}
source = source.trim();
if (!source.includes("\n")) {
source += "\n";
}
return (
<components.pre>
<components.code
children={source}
className={`language-${language}`}
mdxType="code"
originalType="code"
parentName="pre"
/>
</components.pre>
);
}
function SystemWindow(systemWindowProps) {
const { children, className, ...props } = systemWindowProps;
return (
<div
{...props}
className={"system-window blue-accent preview-border " + className}
>
<div className="system-top-bar">
<span
className="system-top-bar-circle"
style={{ backgroundColor: "#8759ff" }}
/>
<span
className="system-top-bar-circle"
style={{ backgroundColor: "#3fc4fe" }}
/>
<span
className="system-top-bar-circle"
style={{ backgroundColor: "#42ffac" }}
/>
</div>
{children}
</div>
);
}
export default Home;

View File

@@ -1,25 +0,0 @@
.navbar {
background-color: #211b50;
}
.navbar__brand {
color: #fff;
}
.navbar__link {
color: #fff;
}
.navbar__link:hover,
.navbar__link--active {
color: yellow;
}
.navbar__items {
color: #fff;
}
.menu__list-item .navbar__link--active,
.menu__list-item .navbar__link:hover {
color: #743dff;
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1611298499508" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1165" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M878.3 721.7c-1.35 3.6-18.9 65.25-62.1 128.25-37.8 54.9-76.5 109.8-137.7 110.7-60.3 0.9-79.65-36-148.5-36s-90.45 35.1-147.6 36.9c-58.95 2.25-104.4-59.85-142.2-114.3C163.25 736.55 103.85 531.8 183.5 395c39.15-68.4 109.8-112.05 186.3-113.4 57.6-0.9 112.95 39.15 148.05 39.15 36 0 102.6-48.6 172.8-41.4 29.25 1.35 111.6 12.15 164.25 89.1-4.05 2.7-98.1 58.5-97.2 171.45 0.9 136.35 119.25 181.35 120.6 181.8m-234-515.25c31.5-38.7 52.65-91.8 46.8-144.45-45 1.8-100.35 30.15-132.75 68.4-28.8 33.3-54.45 87.3-47.25 139.5 49.95 2.7 101.7-26.55 133.2-63.45" fill="#ffffff" p-id="1166"></path></svg>

Before

Width:  |  Height:  |  Size: 965 B

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1611298487411" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1027" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M459.5 485.75V182.09375l-314.90625 67.5V485.75H459.5zM512 485.75h367.3125V92.1875l-367.3125 78.75V485.75zM459.5 538.25H144.6875v236.15625l314.90625 67.5V538.25zM512 538.25v314.90625l367.3125 78.75V538.25H512z" fill="#00adef" p-id="1028"></path></svg>

Before

Width:  |  Height:  |  Size: 627 B

View File

@@ -1,69 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import { ThemeClassNames } from '@docusaurus/theme-common';
import { useDoc } from '@docusaurus/theme-common/internal';
import LastUpdated from '@theme/LastUpdated';
import EditThisPage from '@theme/EditThisPage';
import TagsListInline from '@theme/TagsListInline';
import styles from './styles.module.css';
function TagsRow(props) {
return (
<div
className={clsx(
ThemeClassNames.docs.docFooterTagsRow,
'row margin-bottom--sm',
)}>
<div className="col">
<TagsListInline {...props} />
</div>
</div>
);
}
function EditMetaRow({
editUrl,
lastUpdatedAt,
lastUpdatedBy,
formattedLastUpdatedAt,
}) {
return (
<div className={clsx(ThemeClassNames.docs.docFooterEditMetaRow, 'row')}>
<div className="col">{editUrl && <EditThisPage editUrl={editUrl} />}</div>
<script src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<div className={clsx('col', styles.lastUpdated)}>
📖<span id="busuanzi_value_page_pv"></span><br/>
{(lastUpdatedAt || lastUpdatedBy) && (
<LastUpdated
lastUpdatedAt={lastUpdatedAt}
formattedLastUpdatedAt={formattedLastUpdatedAt}
lastUpdatedBy={lastUpdatedBy}
/>
)}
</div>
</div>
);
}
export default function DocItemFooter() {
const { metadata } = useDoc();
const { editUrl, lastUpdatedAt, formattedLastUpdatedAt, lastUpdatedBy, tags } =
metadata;
const canDisplayTagsRow = tags.length > 0;
const canDisplayEditMetaRow = !!(editUrl || lastUpdatedAt || lastUpdatedBy);
const canDisplayFooter = canDisplayTagsRow || canDisplayEditMetaRow;
if (!canDisplayFooter) {
return null;
}
return (
<footer
className={clsx(ThemeClassNames.docs.docFooter, 'docusaurus-mt-lg')}>
{canDisplayTagsRow && <TagsRow tags={tags} />}
{canDisplayEditMetaRow && (
<EditMetaRow
editUrl={editUrl}
lastUpdatedAt={lastUpdatedAt}
lastUpdatedBy={lastUpdatedBy}
formattedLastUpdatedAt={formattedLastUpdatedAt}
/>
)}
</footer>
);
}

Some files were not shown because too many files have changed in this diff Show More