| | |
| | | if len(value) == 2 { |
| | | val = binary.BigEndian.Uint16(value) |
| | | } else if len(value) == 4 { |
| | | val = binary.BigEndian.Uint32(value) |
| | | low16Val := uint32(binary.BigEndian.Uint16(value[:2])) |
| | | high16 := uint32(binary.BigEndian.Uint16(value[2:])) << 16 |
| | | val = low16Val + high16 |
| | | } else { |
| | | logx.Errorf("plc read get an unknown int value: %v, address:%v", value, address) |
| | | return nil, errors.New(fmt.Sprintf("unknown int value:%v", value)) |
| | |
| | | |
| | | func ReadHoldingRegister(ipAddr string, address, length int) ([]byte, error) { |
| | | if conf.Conf.PLC.Package == constvar.PlcPackageApache { |
| | | return apacheplc4x.ReadHoldingRegister(ipAddr, address, length) |
| | | newLength := length / 2 |
| | | if newLength == 0 { |
| | | newLength = 1 |
| | | } |
| | | return apacheplc4x.ReadHoldingRegister(ipAddr, address, newLength) |
| | | } else if conf.Conf.PLC.Package == constvar.PlcPackageApacheLongConnection { |
| | | conn, err := plc.GetModbusConnection(ipAddr) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | return plc.ReadHoldingRegister(conn, address, length) |
| | | newLength := length / 2 |
| | | if newLength == 0 { |
| | | newLength = 1 |
| | | } |
| | | return plc.ReadHoldingRegister(conn, address, newLength) |
| | | } else { |
| | | return modbusx.Read(ipAddr, uint16(address), uint16(length)) |
| | | } |