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.

56 lines
1.8 KiB

package ADL200
import (
"github.com/towgo/towgo/errors/terror"
"tgk-touch/internal/global"
"tgk-touch/internal/module/maincontrollerClient"
)
// pushCmd 发送命令到设备并获取响应
func pushCmd(commUid string, cmd []byte, detail string) ([]byte, error) {
var result []byte
err := maincontrollerClient.DeviceCallByDeviceID(commUid, "", "", cmd, &result,
func(deviceID, method string, params, result interface{}) (deviceType, cmdDetail, cmdDisplay, resultDisplay string) {
deviceType = "ADL200"
cmdDetail = detail
return
})
if err != nil {
return nil, terror.Wrapf(err, "DeviceCallByDeviceID err ")
}
return result, nil
}
// readCmd 读取保持寄存器
func readCmd(commUid string, address byte, startAddr, quantity uint16, detail string) ([]uint16, error) {
cmd := ReadHoldingRegistersBuilder(address, startAddr, quantity)
g.Log().Debugf("ADL200 Modbus 下发 读取命令 = % X", cmd)
result, err := pushCmd(commUid, cmd, detail)
if err != nil {
return nil, terror.Wrapf(err, "下发[% X]", cmd)
}
g.Log().Debugf("ADL200 Modbus 响应 读取命令 = % X", result)
r, err := ReadHoldingRegisterParse(result, address, quantity)
if err != nil {
return nil, terror.Wrapf(err, "下发[% X],响应[% X]", cmd, result)
}
return r, nil
}
// writeCmd 写入多个保持寄存器
func writeCmd(commUid string, address byte, startAddr uint16, data []uint16, detail string) error {
writeData, q := WriteMultipleRegistersBuilder(address, startAddr, data)
g.Log().Debugf("ADL200 Modbus 下发 写入命令 = % X", writeData)
result, err := pushCmd(commUid, writeData, detail)
if err != nil {
return err
}
g.Log().Debugf("ADL200 Modbus 响应 写入命令 = % X", result)
err = WriteMultipleRegistersParse(address, startAddr, q, result)
if err != nil {
return err
}
return nil
}