@@ -172,14 +172,20 @@ protected ModbusPDU getWriteRequestPdu(PlcTag tag, PlcValue plcValue) {
172172 if (holdingRegister .getByteOrder () != null ) {
173173 byteOrder = holdingRegister .getByteOrder ();
174174 }
175- ModbusPDUWriteMultipleHoldingRegistersRequest request =
176- new ModbusPDUWriteMultipleHoldingRegistersRequest (holdingRegister .getAddress (),
177- holdingRegister .getLengthWords (), fromPlcValue (tag , plcValue , byteOrder ));
178- if (request .getValue ().length == holdingRegister .getLengthWords () * 2 ) {
179- return request ;
175+ byte [] bytes = fromPlcValue (tag , plcValue , byteOrder );
176+ if (bytes .length == 2 ) {
177+ int value = ((bytes [0 ] & 0xFF ) << 8 ) | (bytes [1 ] & 0xFF );
178+ return new ModbusPDUWriteSingleRegisterRequest (holdingRegister .getAddress (), value );
180179 } else {
181- throw new PlcRuntimeException ("Number of requested values (" + request .getValue ().length / 2 +
182- ") doesn't match number of requested addresses (" + holdingRegister .getLengthWords () + ")" );
180+ ModbusPDUWriteMultipleHoldingRegistersRequest request =
181+ new ModbusPDUWriteMultipleHoldingRegistersRequest (holdingRegister .getAddress (),
182+ holdingRegister .getLengthWords (), bytes );
183+ if (request .getValue ().length == holdingRegister .getLengthWords () * 2 ) {
184+ return request ;
185+ } else {
186+ throw new PlcRuntimeException ("Number of requested values (" + request .getValue ().length / 2 +
187+ ") doesn't match number of requested addresses (" + holdingRegister .getLengthWords () + ")" );
188+ }
183189 }
184190 } else if (tag instanceof ModbusTagExtendedRegister ) {
185191 ModbusTagExtendedRegister extendedRegister = (ModbusTagExtendedRegister ) tag ;
0 commit comments