private MTO_376 PutInCommandItem(
      Map datacellParams,
      CircleDataItems circleDataItems,
      String commandItemCode,
      String LogicAddress,
      int MpSn) {
    MTO_376 MTO = new MTO_376();
    CollectObject object = new CollectObject();
    CommandItem citem = new CommandItem();
    if (datacellParams != null) citem.setDatacellParam(datacellParams);
    if (circleDataItems != null) {
      citem.setCircleDataItems(circleDataItems);
      citem.setCircleLevel(1);
    }

    citem.setIdentifier(commandItemCode); // 终端上行通信口通信参数设置
    object.AddCommandItem(citem);
    object.setLogicalAddr(LogicAddress);
    object.setEquipProtocol("01");
    object.setMpSn(new int[] {MpSn});

    MTO.getCollectObjects().add(object);

    return MTO;
  }
  //  @Test
  public void testReadRealtimeData() throws Exception {
    System.out.println("ReadRealtimeData");

    CommandItem commandItem = new CommandItem();
    commandItem.setIdentifier("100C0025");

    CollectObject obj = new CollectObject();
    obj.setLogicalAddr("96123456");
    obj.setMpSn(new int[] {1});
    obj.AddCommandItem(commandItem);

    MTO_376 MTO3 = new MTO_376();
    MTO3.addCollectObject(obj);

    RealTimeProxy376 instance = proxy;
    long SequenceCode = instance.readData(MTO3);
    RealTimeTaskDAO task = taskService.getTask(SequenceCode);
    PmPacket376 packet = new PmPacket376();
    packet.setValue(BcdUtils.stringToByteArray(task.getSendmsg()), 0);
    assertTrue(packet.getAddress().getRtua().equals("96123456"));
    assertTrue(packet.getAfn() == 0x0C);
    PmPacket376DA da = new PmPacket376DA();
    PmPacket376DT dt = new PmPacket376DT();
    packet.getDataBuffer().rewind();
    packet.getDataBuffer().getDA(da);
    packet.getDataBuffer().getDT(dt);
    assertTrue(da.getPn() == 1);
    assertTrue(dt.getFn() == 25);
  }
  //  @Test
  public void testReadEquipmentParametersF9() throws Exception {
    CommandItem commandItem = new CommandItem();
    commandItem.setIdentifier("10040009");

    CollectObject obj = new CollectObject();
    obj.setLogicalAddr("96123456");
    obj.setMpSn(new int[] {0});
    obj.AddCommandItem(commandItem);

    MTO_376 MTO3 = new MTO_376();
    MTO3.addCollectObject(obj);

    RealTimeProxy376 instance = proxy;
    long SequenceCode = instance.readParameters(MTO3);

    this.taskService.insertRecvMsg(
        SequenceCode,
        "96123456",
        "55 68 72 00 72 00 68 98 12 96 56 34 00 0A 60 00 00 01 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 26 16 55 ");

    Map<String, Map<String, String>> expResult = new HashMap();
    Map<String, String> MapDataItem = new HashMap();

    MapDataItem.put(
        "1004000901",
        "1111111111111111111111111111111111111111111111111111111111111111"); // 主用IP地址和端口
    MapDataItem.put(
        "1004000902",
        "1111111111111111111111111111111111111111111111111111111111111111"); // 事件重要性等级标志位

    expResult.put("96123456#0#10040009", MapDataItem);
    Map result = instance.getReturnByReadParameter(SequenceCode);
    assertEquals(expResult, result);
  }
  //  @Test
  public void testReadEquipmentParametersF3() throws Exception {
    CommandItem commandItem = new CommandItem();
    commandItem.setIdentifier("10040003");

    CollectObject obj = new CollectObject();
    obj.setLogicalAddr("96123456");
    obj.setMpSn(new int[] {0});
    obj.AddCommandItem(commandItem);

    MTO_376 MTO3 = new MTO_376();
    MTO3.addCollectObject(obj);

    RealTimeProxy376 instance = proxy;
    long SequenceCode = instance.readParameters(MTO3);

    this.taskService.insertRecvMsg(
        SequenceCode,
        "96123456",
        "55 68 A2 00 A2 00 68 98 12 96 56 34 00 0A 60 00 00 04 00 C0 A8 00 01 90 1F C0 A8 00 02 90 1F 5A 4A 44 4C 2E 5A 4A 00 00 00 00 00 00 00 00 00 6F 16 55 ");

    Map<String, Map<String, String>> expResult = new HashMap();
    Map<String, String> MapDataItem = new HashMap();

    MapDataItem.put("1004000301", "192.168.0.1:8080"); // 主用IP地址和端口
    MapDataItem.put("1004000302", "192.168.0.2:8080"); // 备用IP地址和端口
    MapDataItem.put("1004000303", "ZJDL.ZJ"); // APN

    expResult.put("96123456#0#10040003", MapDataItem);
    Map result = instance.getReturnByReadParameter(SequenceCode);
    assertEquals(expResult, result);
  }
  //  @Test
  public void testReadEquipmentParametersF1() throws Exception {
    CommandItem commandItem = new CommandItem();
    commandItem.setIdentifier("10040001");

    CollectObject obj = new CollectObject();
    obj.setLogicalAddr("96123456");
    obj.setMpSn(new int[] {0});
    obj.AddCommandItem(commandItem);

    MTO_376 MTO3 = new MTO_376();
    MTO3.addCollectObject(obj);

    RealTimeProxy376 instance = proxy;
    long SequenceCode = instance.readParameters(MTO3);

    this.taskService.insertRecvMsg(
        SequenceCode,
        "96123456",
        "55 68 4A 00 4A 00 68 98 12 96 56 34 00 0A 60 00 00 01 00 0A 14 1E 03 07 0F 8A 16 55  ");

    Map<String, Map<String, String>> expResult = new HashMap();
    Map<String, String> MapDataItem = new HashMap();

    MapDataItem.put("1004000101", "10"); // 终端数传机延时时间RTS
    MapDataItem.put("1004000102", "20"); // 终端作为启动站允许发送传输延时时间
    MapDataItem.put("1004000103", "30"); // 终端等待从动站响应的超时时间
    MapDataItem.put("1004000104", "3"); // 终端等待从动站响应的重发次数
    MapDataItem.put("1004000106", "11100000"); // 需要主站确认的通信服务(CON=1)的标志
    MapDataItem.put("1004000107", "15"); // 心跳周期

    expResult.put("96123456#0#10040001", MapDataItem);
    Map result = instance.getReturnByReadParameter(SequenceCode);
    assertEquals(expResult, result);
  }
  //  @Test
  public void testReadEquipmentParametersF26() throws Exception {
    CommandItem commandItem = new CommandItem();
    commandItem.setIdentifier("10040026");

    CollectObject obj = new CollectObject();
    obj.setLogicalAddr("96123455");
    obj.setMpSn(new int[] {0});
    obj.AddCommandItem(commandItem);

    MTO_376 MTO3 = new MTO_376();
    MTO3.addCollectObject(obj);

    RealTimeProxy376 instance = proxy;
    //    long SequenceCode = instance.readParameters(MTO3);

    Map result = instance.getReturnByReadParameter(3616);
    // assertEquals(expResult, result);
  }
  /**
   * 一键设置终端参数F10
   *
   * @param mapCO *<"logicalAddr", String> : 逻辑地址 C_TERMINAL.LOGICAL_ADDR *<"equipProtocol", String>
   *     : 设备规约号 C_TERMINAL.PROTOCOL_NO
   *     --------------------------------------------------------------------- <"channelType",
   *     String> : 通道类型 【默认为1(TCP)】 <"pwAlgorith", String> : 密码算法 【默认为0】 <"pwContent", String> :
   *     密码内容 【默认为8888】 <"mpExpressMode", String> : 测量点表示方式 【默认为3(列表方式)】 <"mpSn", String> : 测量点序号组
   *     【默认为[0]】 ---------------------------------------------------------------------
   * @param mapParams *<"1004001001", String> : 本次电能表/交流采样装置配置数量 *<"10040010020001", String> :
   *     本次配置第0001块电能表/交流采样装置序号 【默认与所属测量点号相同】 *<"10040010030001", String> :
   *     本次配置第0001块电能表/交流采样装置所属测量点号 *<"10040010040001", String> : 本次配置第0001块电能表/交流采样装置通信波特率
   *     C_METER.BAUDRATE *<"10040010050001", String> : 本次配置第0001块电能表/交流采样装置通信端口号 C_GP.PORT
   *     *<"10040010060001", String> : 本次配置第0001块电能表/交流采样装置通信协议类型 C_GP.PROTOCOL_NO
   *     *<"10040010070001", String> : 本次配置第0001块电能表/交流采样装置通信地址 C_GP.GP_ADDR
   *     --------------------------------------------------------------------- <"10040010080001",
   *     String> : 本次配置第0001块电能表/交流采样装置通信密码 【默认为000000000000】 <"10040010100001", String> :
   *     本次配置第0001块电能表/交流采样装置电能费率个数 【默认为000100(4个费率)】 <"10040010120001", String> :
   *     本次配置第0001块电能表/交流采样装置有功电能示值的整数位个数 【默认为10(6位)】 <"10040010130001", String> :
   *     本次配置第0001块电能表/交流采样装置有功电能示值的小数位个数 【默认为11(4位)】 <"10040010140001", String> :
   *     本次配置第0001块电能表/交流采样装置所属采集器通信地址 【默认为000000000000】 <"10040010150001", String> :
   *     本次配置第0001块电能表/交流采样装置所属的用户大类号 【默认为0000】 <"10040010160001", String> :
   *     本次配置第0001块电能表/交流采样装置所属的用户小类号 【默认为0000】
   *     ---------------------------------------------------------------------
   * @return map <"collectId", Integer> : 采集ID
   */
  public Map<String, Object> akeySetupTermParamF10(
      Map<String, Object> mapCO, Map<String, String> mapParams) {
    Map<String, Object> map = new HashMap<String, Object>();

    MTO_376 mto376 = new MTO_376();
    CollectObject co = new CollectObject();
    co.setLogicalAddr((String) mapCO.get("logicalAddr"));
    co.setEquipProtocol((String) mapCO.get("equipProtocol"));
    co.setChannelType("1");
    co.setPwAlgorith("0");
    co.setPwContent("8888");
    co.setMpExpressMode(3);
    int[] mpSn = {0};
    co.setMpSn(mpSn);
    CommandItem ci = new CommandItem();
    ci.setIdentifier("10040010");
    ci.setDatacellParam(mapParams);
    co.AddCommandItem(ci);
    mto376.addCollectObject(co);

    return map;
  }
  //  @Test
  public void testReadEquipmentParametersF10() throws Exception {
    Map datacellParams10 = new TreeMap();
    datacellParams10.put("1004001001", "1"); // 主用IP地址和端口

    CircleDataItems circleDataItems = new CircleDataItems();
    for (int i = 1; i <= 3; i++) {
      DataItemGroup group = new DataItemGroup();
      group.AddDataItem(
          new DataItem("1004001002000" + i, String.valueOf(i))); // 本次配置第0001块电能表/交流采样装置序号
      circleDataItems.AddDataItemGroup(group);
    }

    CommandItem commandItem = new CommandItem();
    commandItem.setIdentifier("10040010");
    commandItem.setDatacellParam(datacellParams10);
    commandItem.setCircleDataItems(circleDataItems);

    CollectObject obj = new CollectObject();
    obj.setLogicalAddr("96123456");
    obj.setMpSn(new int[] {0});
    obj.AddCommandItem(commandItem);

    MTO_376 MTO3 = new MTO_376();
    MTO3.addCollectObject(obj);

    RealTimeProxy376 instance = proxy;
    long SequenceCode = instance.readParameters(MTO3);

    //        this.taskService.insertRecvMsg(SequenceCode, "96123456", "55 68 A2 00 A2 00 68 98 12
    // 96 56 34 00 0A 60 00 00 04 00 C0 A8 00 01 90 1F C0 A8 00 02 90 1F 5A 4A 44 4C 2E 5A 4A 00 00
    // 00 00 00 00 00 00 00 6F 16 55 ");
    //        this.taskService.insertRecvMsg(SequenceCode, "96123456", "55 68 A2 00 A2 00 68 98 12
    // 96 56 34 00 0A 60 00 00 04 00 C0 A8 00 01 90 1F C0 A8 00 02 90 1F 5A 4A 44 4C 2E 5A 4A 00 00
    // 00 00 00 00 00 00 00 6F 16 55 ");

    //        Map datacellParams10 = new TreeMap();
    //        datacellParams10.put("1004001001","1");//本次电能表/交流采样装置配置数量
    //        CircleDataItems circleDataItems = new CircleDataItems();
    //        DataItemGroup diGroup1 = new DataItemGroup();
    //        diGroup1.AddDataItem(new DataItem("10040010020001","1"));//本次配置第0001块电能表/交流采样装置序号
    //        diGroup1.AddDataItem(new DataItem("10040010030001","1"));//本次配置第0001块电能表/交流采样装置所属测量点号
    //        diGroup1.AddDataItem(new DataItem("10040010040001","6"));//本次配置第0001块电能表/交流采样装置通信波特率
    //        diGroup1.AddDataItem(new DataItem("10040010050001","1"));//本次配置第0001块电能表/交流采样装置通信端口号
    //        diGroup1.AddDataItem(new
    // DataItem("10040010060001","100"));//本次配置第0001块电能表/交流采样装置通信协议类型
    //        diGroup1.AddDataItem(new DataItem("10040010070001","0"));//本次配置第0001块电能表/交流采样装置通信地址
    //        diGroup1.AddDataItem(new DataItem("10040010080001","0"));//本次配置第0001块电能表/交流采样装置通信密码
    //        diGroup1.AddDataItem(new
    // DataItem("10040010100001","000001"));//本次配置第0001块电能表/交流采样装置电能费率个数
    //        diGroup1.AddDataItem(new
    // DataItem("10040010120001","00"));//本次配置第0001块电能表/交流采样装置有功电能示值的整数位个数
    //        diGroup1.AddDataItem(new
    // DataItem("10040010130001","00"));//本次配置第0001块电能表/交流采样装置有功电能示值的小数位个数
    //        diGroup1.AddDataItem(new
    // DataItem("10040010140001","999999999999"));//本次配置第0001块电能表/交流采样装置所属采集器通信地址
    //        diGroup1.AddDataItem(new
    // DataItem("10040010150001","0000"));//本次配置第0001块电能表/交流采样装置所属的用户大类号
    //        diGroup1.AddDataItem(new
    // DataItem("10040010160001","0000"));//本次配置第0001块电能表/交流采样装置所属的用户小类号

    //        expResult.put("96123456#0#10040010",MapDataItem);
    //        Map result = instance.getReturnByREP(SequenceCode);
    //        assertEquals(expResult, result);
  }