常见问题
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时,报警生效
//新建testInt1,testInt2两个变量
//在testInt1的高高报警值为1,开启使能
//在testInt1的高高报警约束中定义testInt2>10
//testInt1为8,testInt2为11时,产生testInt1报警
//testInt1为8,testInt2为10时,不会产生testInt1报警
5、启动项目之后,驱动调试页面没有任何信息,设备选择插件时也不出现任何选择项
网关插件未编译,需要编译解决方案,查看入门指南;或者插件未能成功拷贝到插件目录(Plugins)
6、linux部署时发现无法启动,报错:The type initializer for 'Microsoft.Data.sqlite.Sqliteconnection' threw an exception.
根据微软官方提供的dotnet8.0 支持的操作系统列表
选择一种解决方案:
1、升 级操作系统,
2、升级sqlite版本,(感谢群友的文章)查看博客 (https://blog.csdn.net/qq_40817472/article/details/141648765)
3、使用net6发布ThingsGateway项目
7、我想在当前设备中添加变量,该变量表示设备是否在线,不参与通讯
在变量地址中填写DeviceStatus
,固定值为DeviceStatusEnum
类型,如果需要bool类型,还可以在读取表达式中写
(DeviceStatusEnum)raw==DeviceStatusEnum.OnLine
8、我想在当前设备中添加变量,该变量作为计算点,不参与通讯
在变量地址中填写Script
,在读取表达式中填写所需计算过程
不限制是否当前设备,只要变量名称存在,就可以正常运算
下面示例是 两个变量值相加
GlobalData.ReadOnlyVariables["变量名称1"].Value.ToInt()+GlobalData.ReadOnlyVariables["变量名称2"].Value.ToInt()
同理,在内存变量插件中,也可以这样写。
9、变量单独设置大小端解析顺序
在变量地址中填写Data=ABCD
,表示大端顺序
例如modbus读取浮点数 保持寄存器0,大端顺序
400001;DATA=ABCD;