You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.0 KiB

package m9z
import (
"fmt"
)
// 读取设备输出状态参数
type OutStatus struct {
BackupByte2 byte `json:"backup_byte1"` //备用字节下标2
Loops []Loop `json:"loops"` //回路数据
}
func DeviceOutStatusRead(deviceId string) (*OutStatus, error) {
out := &OutStatus{}
readResp, err := ReadCmd(deviceId, deviceOutStatus, "读取设备输出状态参数")
if err != nil {
return nil, err
}
// 解析10路的继电器动作状态
relayBits := BytesToUint16LE(readResp.Data[0:2])
//log.Printf("继电器状态(二进制): %016b,% X", relayBits, readResp.Data[0:2]) // 补零显示16位
loops := make([]Loop, 10)
for i := 0; i < 10; i++ {
var loop Loop
bit := (relayBits >> i) & 0x01 // 取第i位的值
loop.IsOpen = bit == 1
loop.Index = i
loop.Name = fmt.Sprintf("#%+v", i+1)
loops[i] = loop
}
out.BackupByte2 = readResp.Data[2]
pwms := readResp.Data[3 : len(readResp.Data)-1]
for index, pwm := range pwms {
loops[index].Pwm = hexToPercent(pwm)
}
out.Loops = loops
return out, err
}