SendCommandHelper.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package wei.yigulu.iec104.util;
  2. import lombok.extern.slf4j.Slf4j;
  3. import wei.yigulu.iec104.apdumodel.Apdu;
  4. import wei.yigulu.iec104.apdumodel.Asdu;
  5. import wei.yigulu.iec104.asdudataframe.ShortFloatCommand;
  6. import wei.yigulu.iec104.asdudataframe.typemodel.IecDataInterface;
  7. import wei.yigulu.netty.AbstractMasterBuilder;
  8. import java.util.ArrayList;
  9. import java.util.Collections;
  10. import java.util.List;
  11. /**
  12. * 发送控制命令的工具类
  13. *
  14. * @author: xiuwei
  15. * @version:
  16. */
  17. @Slf4j
  18. public class SendCommandHelper {
  19. private static List<CommandWaiter> commandWaiters = Collections.synchronizedList(new ArrayList());
  20. public static boolean sendShortCommand(AbstractMasterBuilder masterBuilder, Integer sourceAddress, Integer commonAddress, Integer dataAddress, Float value) throws Exception {
  21. ShortFloatCommand command = new ShortFloatCommand(dataAddress, value);
  22. Apdu apdu = new Apdu();
  23. Asdu asdu = command.generateBack();
  24. asdu.setCommonAddress(commonAddress);
  25. asdu.setOriginatorAddress(sourceAddress);
  26. asdu.getCot().setNot(6);
  27. apdu.setAsdu(asdu);
  28. SendAndReceiveNumUtil.sendIFrame(apdu, masterBuilder.getFuture().channel(), masterBuilder.getLog());
  29. CommandWaiter commandWaiter = new CommandWaiter(masterBuilder.getFuture().channel().id(), apdu, 0);
  30. commandWaiters.add(commandWaiter);
  31. IecDataInterface data = commandWaiter.get();
  32. if (value.equals(data.getIecValue())) {
  33. return true;
  34. } else {
  35. return false;
  36. }
  37. }
  38. public static void setIecValue(CommandWaiter commandWaiter) {
  39. int i = commandWaiters.indexOf(commandWaiter);
  40. System.out.println(i);
  41. if (i != -1) {
  42. commandWaiters.get(i).set(commandWaiter.getData());
  43. } else {
  44. }
  45. }
  46. }