跳到主要内容

常见问题

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;