zhangzengfei
2023-08-04 88da1e13a073e8b5656387a246d827593fbd6163
collector/plc4x.go
@@ -35,8 +35,45 @@
   return connectionResult.GetConnection(), nil
}
func ReadHoldingRegister(connection plc4go.PlcConnection, address int) ([]byte, error) {
   tagAddress := fmt.Sprintf("holding-register:%d:DINT", address)
func ReadHoldingRegister(connection plc4go.PlcConnection, address, length int) ([]byte, error) {
   if length > 1 {
      return ReadHoldingRegisterList(connection, address, length)
   }
   return ReadHoldingRegisterSingle(connection, address)
}
func ReadHoldingRegisterSingle(connection plc4go.PlcConnection, address int) ([]byte, error) {
   tagAddress := fmt.Sprintf("holding-register:%d:UINT", address)
   // 读模式
   readRequest, err := connection.ReadRequestBuilder().AddTagAddress("tag", tagAddress).Build()
   if err != nil {
      fmt.Printf("preparing read-request:%s\n", err.Error())
      return nil, err
   }
   // 执行
   readResult := <-readRequest.Execute()
   if err := readResult.GetErr(); err != nil {
      fmt.Printf("execting read-request:%s\n", err.Error())
      return nil, err
   }
   // 判断响应码是否正确
   if readResult.GetResponse().GetResponseCode("tag") != apiModel.PlcResponseCode_OK {
      fmt.Printf("error an non-ok return code: %s", readResult.GetResponse().GetResponseCode("tag").GetName())
      return nil, nil
   }
   value := readResult.GetResponse().GetValue("tag")
   return value.GetRaw(), err
}
func ReadHoldingRegisterList(connection plc4go.PlcConnection, address, length int) ([]byte, error) {
   tagAddress := fmt.Sprintf("holding-register:%d:UINT[%d]", address, length)
   // 读模式
   readRequest, err := connection.ReadRequestBuilder().AddTagAddress("tag", tagAddress).Build()