package apacheplc4x
|
|
//
|
//import (
|
// "apsClient/model/common"
|
// "apsClient/pkg/logx"
|
// "context"
|
// "errors"
|
// "fmt"
|
// plc4go "github.com/apache/plc4x/plc4go/pkg/api"
|
// apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
|
// "github.com/spf13/cast"
|
// "time"
|
//)
|
//
|
//func newModbusRTUConnection(c *common.RTUConfig) (plc4go.PlcConnection, error) {
|
// ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
|
// // 创建一个新的 PLC 连接
|
// connectionString := fmt.Sprintf("modbus-rtu:serial://%s?baudrate=%d&databits=%d&stopbits=%d&parity=%s", c.SerialName, c.BaudRate, c.DataBit, c.StopBit, c.Parity.ToString())
|
// connectionRequestChanel := driverManager.GetConnection(connectionString)
|
// // 等待连接响应,同时考虑上下文的超时
|
// select {
|
// case connectionResult := <-connectionRequestChanel:
|
// cancel()
|
// if err := connectionResult.GetErr(); err != nil {
|
// return nil, err
|
// }
|
// return connectionResult.GetConnection(), nil
|
// case <-ctx.Done():
|
// cancel()
|
// return nil, errors.New("connect plc by modbusRTU timeout")
|
// }
|
//}
|
//
|
//func ReadHoldingRegisterByRTU(c *common.RTUConfig, address, length int) ([]byte, error) {
|
// connection, err := newModbusRTUConnection(c)
|
// if err != nil {
|
// return nil, err
|
// }
|
// defer connection.Close()
|
// if length > 1 {
|
// return readHoldingRegisterList(connection, address, length)
|
// }
|
//
|
// return readHoldingRegisterSingle(connection, address)
|
//}
|
//
|
//func WriteHoldingRegisterByRTU(c *common.RTUConfig, address int, value any) (string, error) {
|
// connection, err := newModbusRTUConnection(c)
|
// if err != nil {
|
// return "", err
|
// }
|
// defer connection.Close()
|
// tag := fmt.Sprintf("tag:%v:w", address)
|
// var tagAddress string
|
// if cast.ToInt32(value) > 2<<16 {
|
// tagAddress = getTagAddress(address, 2)
|
// } else {
|
// tagAddress = getTagAddress(address, 1)
|
// }
|
//
|
// // 写模式
|
// writeRequest, err := connection.WriteRequestBuilder().AddTagAddress(tag, tagAddress, value).Build()
|
// if err != nil {
|
// logx.Errorf("plc4x preparing read-request:%s\n", err.Error())
|
// return "", err
|
// }
|
//
|
// // 执行
|
// writeResult := <-writeRequest.Execute()
|
// if err := writeResult.GetErr(); err != nil {
|
// logx.Errorf("plc4x execute write-request:%s\n", err.Error())
|
// return "", err
|
// }
|
//
|
// // 判断响应码是否正确
|
// if writeResult.GetResponse().GetResponseCode(tag) != apiModel.PlcResponseCode_OK {
|
// logx.Errorf("plc4x response error code: %s", writeResult.GetResponse().GetResponseCode(tag).GetName())
|
// return "", errors.New("error code: " + writeResult.GetResponse().GetResponseCode(tag).GetName())
|
// }
|
//
|
// result := writeResult.GetResponse().String()
|
//
|
// return result, nil
|
//}
|