iotmodel.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package models
  2. type IotModel struct {
  3. TID uint16 `gorm:"primary_key" sql:"type:INT(11) UNSIGNED NOT NULL"` //物模型ID
  4. Version uint8 `gorm:"type:int"` //物模型版本
  5. Device string `gorm:"type:varchar(40)"` //设备名称
  6. Model string `gorm:"type:varchar(18)"` //设备型号
  7. Protocol string `gorm:"type:varchar(18)"` //协议类型,一般为modbus-RTU
  8. File string `gorm:"type:text"` //模型文件内容
  9. LcModel
  10. }
  11. func (IotModel) TableName() string {
  12. return "t_iot_model"
  13. }
  14. //上报数据项
  15. type IotModelDataUp struct {
  16. TID uint16 `gorm:"primary_key" sql:"type:INT(11) UNSIGNED NOT NULL"` //物模型ID
  17. Version uint8 `gorm:"type:int"` //物模型版本
  18. Device string `gorm:"type:varchar(40)"` //设备名称
  19. Model string `gorm:"type:varchar(18)"` //设备型号
  20. Protocol string `gorm:"type:varchar(18)"` //协议类型,一般为modbus-RTU
  21. SID uint16 `gorm:"primary_key" sql:"type:INT(10) UNSIGNED NOT NULL"`
  22. Name string `gorm:"type:varchar(18)"` //英文名称
  23. NameZh string `gorm:"type:varchar(18)"` //中文名称
  24. Unit string `gorm:"type:varchar(8)"` //单位
  25. Endian uint8 `gorm:"type:int"` //大小端规则,0,大端,1小端
  26. Type uint8 `gorm:"type:int"` //数据类型,0:uint; 1:int; 2:float; 3:double;4 string
  27. Ratio float32 `gorm:"type:float"` //比率系数
  28. Base float32 `gorm:"type:float"` //基数
  29. UpLimit float32 `gorm:"type:float"` //上限,用于告警判断
  30. LowLimit float32 `gorm:"type:float"` //下限,用于告警判断
  31. Cid uint8 `gorm:"type:int"` //采集命令
  32. Start uint8 `gorm:"type:int"` //从返回的数据0字节开始算起的字节数
  33. Len uint8 `gorm:"type:int"` //数据项占几个字节
  34. Alarm uint8 `gorm:"type:int"` //是否告警,0,不告警;1,告警
  35. Duration uint8 `gorm:"type:int"` //持续时间才告警,防止误判
  36. Desc string `gorm:"type:varchar(40)"` //遥信用,状态描述,类似0表示开,1表示关之类的描述
  37. Bit uint8 `gorm:"type:int"` //遥信用,该字节的多少位
  38. LcModel
  39. }
  40. func (IotModelDataUp) TableName() string {
  41. return "t_iot_model_dataup"
  42. }
  43. //下控数据项
  44. type IotModelCmdDown struct {
  45. TID uint16 `gorm:"primary_key" sql:"type:INT(11) UNSIGNED NOT NULL"` //物模型ID
  46. Version uint8 `gorm:"type:int"` //物模型版本
  47. Device string `gorm:"type:varchar(40)"` //设备名称
  48. Model string `gorm:"type:varchar(18)"` //设备型号
  49. Protocol string `gorm:"type:varchar(18)"` //协议类型,一般为modbus-RTU
  50. SID uint16 `gorm:"primary_key" sql:"type:INT(10) UNSIGNED NOT NULL"`
  51. Name string `gorm:"type:varchar(18)"`
  52. NameZh string `gorm:"type:varchar(18)"` //中文名称
  53. Unit string `gorm:"type:varchar(8)"`
  54. Endian uint8 `gorm:"type:int"` //大小端规则,0,大端,1小端
  55. Type uint8 `gorm:"type:int"` //数据类型,0:uint; 1:int; 2:float; 3:double;4 string
  56. Ratio float32 `gorm:"type:float"` //比率系数
  57. Base float32 `gorm:"type:float"` //基数
  58. Code uint8 `gorm:"type:int"` //功能码
  59. Addr uint16 `gorm:"type:int"` //地址
  60. Quantity uint16 `gorm:"type:int"` //数量
  61. Vallen uint8 `gorm:"type:int"` //字节数
  62. Maxval float32 `gorm:"type:float"`
  63. Minval float32 `gorm:"type:float"`
  64. Desc string `gorm:"type:varchar(40)"`
  65. LcModel
  66. }
  67. func (IotModelCmdDown) TableName() string {
  68. return "t_iot_model_cmddown"
  69. }
  70. type IotModelInfo struct {
  71. ID string
  72. TID uint16
  73. SID uint16
  74. Name string
  75. NameZh string
  76. Unit string
  77. Type uint8
  78. }
  79. func GetMutilIotModelInfo(codes []string, tp int) ([]IotModelInfo, error) {
  80. var (
  81. sql0 string
  82. sql1 string
  83. maintable string
  84. )
  85. switch tp {
  86. case 1: //环境监测仪
  87. maintable = "t_device_environment"
  88. case 2: //单灯控制器
  89. maintable = "t_device_lampcontroller"
  90. case 3: //液位计
  91. maintable = "t_device_sensor"
  92. case 4: //路面状态传感器
  93. maintable = "t_device_sensor"
  94. default: //默认未归类的设备
  95. maintable = "t_gateway_device"
  96. }
  97. sql0 = "SELECT a.id,b.t_id,b.s_id,b.name,b.name_zh,b.unit,0 AS 'type' FROM " + maintable + " a,t_iot_model_dataup b WHERE a.id IN (?) AND a.t_id = b.t_id"
  98. sql1 = "SELECT a.id,b.t_id,b.s_id, b.name, b.name_zh, b.unit,1 AS 'type' FROM " + maintable + " a,t_iot_model_cmddown b WHERE a.id IN (?) AND a.t_id = b.t_id"
  99. var arr1 []IotModelInfo
  100. if err := G_db.Raw(sql0, codes).Scan(&arr1).Error; err != nil {
  101. return nil, err
  102. }
  103. var arr2 []IotModelInfo
  104. if err := G_db.Raw(sql1, codes).Scan(&arr2).Error; err != nil {
  105. return nil, err
  106. }
  107. arr1 = append(arr1, arr2...)
  108. return arr1, nil
  109. }