From b466b3135cd7f3b08f570efda0ffb691daff5270 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期五, 05 十二月 2025 18:15:16 +0800
Subject: [PATCH] 一期输送线代码及AGV请求等
---
项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskReqContent.cs | 65 +++++++++++++
项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs | 3
项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs | 2
项目代码/WCSServices/WIDESEAWCS_Tasks/一期线体/ConveyorLineJob1.cs | 71 ++++++++++++-
项目资料/一期对接相关资料/哈尔滨一期输送线对接协议modbusTcp协议V1.1.xlsx | 0
项目资料/AGV通信文档/WCS与RCS安全交互接口文档V1.6_11_13.pdf | 0
项目代码/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs | 31 ++++-
项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskRequestDTO.cs | 50 ++++++++++
项目代码/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs | 68 +++++++++++++
9 files changed, 275 insertions(+), 15 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs"
index e38c2ff..3cb9f1a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs"
@@ -6,6 +6,9 @@
namespace WIDESEAWCS_DTO.Agv
{
+ /// <summary>
+ /// AGV浠诲姟鏀捐
+ /// </summary>
public class AgvTaskFlowDTO
{
/// <summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskReqContent.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskReqContent.cs"
new file mode 100644
index 0000000..2aafa3b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskReqContent.cs"
@@ -0,0 +1,65 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core;
+
+namespace WIDESEAWCS_DTO.Agv
+{
+ public class DataResult
+ {
+ /// <summary>
+ /// 璇锋眰缁撴灉锛�0銆佺姝紱1銆佸厑璁革紱
+ /// </summary>
+ public string Result { get; set; }
+ }
+ /// <summary>
+ /// AGV浠诲姟璇锋眰杩斿洖(鍙栨斁)
+ /// </summary>
+ public class AgvTaskReqContent
+ {
+ /// <summary>
+ /// 璇锋眰缂栧彿
+ /// </summary>
+ public string ReqCode { get; set; }
+ /// <summary>
+ /// 杩斿洖鐮�, 鎴愬姛 0锛屽け璐� 1
+ /// </summary>
+ public string Code { get; set; }
+ /// <summary>
+ /// success 鎴栬�呭紓甯稿師鍥�
+ /// </summary>
+ public string Message { get; set; }
+ /// <summary>
+ /// 缁撴灉瀵硅薄
+ /// </summary>
+ public DataResult Data { get; set; }
+
+ public AgvTaskReqContent()
+ {
+
+ }
+ public AgvTaskReqContent OK()
+ {
+ Code = "0";
+ Message = "success";
+ Data = new DataResult()
+ {
+ Result = "1"
+ };
+ return this;
+ }
+
+ public AgvTaskReqContent Error(string message = "")
+ {
+ Code = "1";
+ Message = message;
+ Data = new DataResult()
+ {
+ Result = "0"
+ };
+ return this;
+ }
+ }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskRequestDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskRequestDTO.cs"
new file mode 100644
index 0000000..4f4b05f
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskRequestDTO.cs"
@@ -0,0 +1,50 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.Agv
+{
+ /// <summary>
+ /// AGV浠诲姟璇锋眰(鍙栨斁)
+ /// </summary>
+ public class AgvTaskRequestDTO
+ {
+ /// <summary>
+ /// 璇锋眰缂栧彿
+ /// </summary>
+ public string ReqCode { get; set; }
+ /// <summary>
+ /// 璇锋眰鏃堕棿鎴�
+ /// </summary>
+ public string ReqTime { get; set; }
+ /// <summary>
+ /// 浠诲姟缂栧彿
+ /// </summary>
+ public string TaskId { get; set; }
+ /// <summary>
+ /// 鏈哄櫒浜虹紪鍙�
+ /// </summary>
+ public string RobotId { get; set; }
+ /// <summary>
+ /// 浣嶇疆缂栧彿
+ /// </summary>
+ public string PositionId { get; set; }
+ /// <summary>
+ /// 鏂欑缂栧彿
+ /// </summary>
+ public string ContainerCode { get; set; }
+ /// <summary>
+ /// 璇锋眰鑺傜偣
+ /// 1锛氬甫杞借姹傝繘鍏ワ紙鑳岀潃鏂欒溅杩涘叆锛夛紱<br/>
+ /// 2锛氱┖杞借姹傝繘鍏ワ紙涓嶅甫鏂欒溅杩涘叆锛夛紱<br/>
+ /// 3锛氳姹傜寮�锛�<br/>
+ /// 4锛氳姹傛斁鏂欙紱<br/>
+ /// 5锛氳姹傚彇鏂欙紱<br/>
+ /// 6锛氶�氱煡 PLC 鎶曟枡锛�<br/>
+ /// 7锛氶�氱煡 PLC 鎺ユ枡锛�<br/>
+ /// </summary>
+ public string Action { get; set; }
+ }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
index 9dac38a..8b7602e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
@@ -15,6 +15,7 @@
using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.Agv;
+using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
@@ -86,6 +87,73 @@
}
return content;
}
+ /// <summary>
+ /// AGV浠诲姟璇锋眰
+ /// </summary>
+ /// <returns></returns>
+ [HttpPost, HttpGet, Route("WorkRequest"), AllowAnonymous]
+ public AgvTaskReqContent WorkRequest([FromBody] AgvTaskRequestDTO agvTaskRequestDTO)
+ {
+ AgvTaskReqContent content = new AgvTaskReqContent();
+ try
+ {
+ //鑾峰彇浠诲姟
+ Dt_Task? taskExist = _taskRepository.QueryFirst(x=>x.PalletCode==agvTaskRequestDTO.ContainerCode) ?? throw new Exception($"鏈壘鍒版枡绠眥agvTaskRequestDTO.ContainerCode}浠诲姟");
+ //鑾峰彇绔欏彴
+ Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == agvTaskRequestDTO.PositionId) ?? throw new Exception($"鏈壘鍒皗agvTaskRequestDTO.PositionId}绔欏彴浣嶇疆");
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode) ?? throw new Exception($"鏈壘鍒板搴旇澶噞stationManger.StationDeviceCode}");
+ OtherDevice commonConveyorLine = (OtherDevice)device;
+
+ if (stationManger.StationType==StationTypeEnum.StationType_OnlyOutbound.ObjToInt())
+ {
+ short IsPut = commonConveyorLine.Communicator.Read<short>("0");
+ if (IsPut != 256) throw new Exception($"{agvTaskRequestDTO.PositionId}绂佹鏀剧");
+ }
+ else
+ {
+ short IsTake = commonConveyorLine.Communicator.Read<short>("11");
+ if (IsTake != 256) throw new Exception($"{agvTaskRequestDTO.PositionId}绂佹鍙栫");
+ }
+ content.OK();
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ /// <summary>
+ /// AGV浣滀笟瀹屾垚
+ /// </summary>
+ /// <returns></returns>
+ [HttpPost, HttpGet, Route("WorkFinish"), AllowAnonymous]
+ public AgvTaskReqContent WorkFinish([FromBody] AgvTaskRequestDTO agvTaskRequestDTO)
+ {
+ AgvTaskReqContent content = new AgvTaskReqContent();
+ try
+ {
+ //鑾峰彇绔欏彴
+ Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == agvTaskRequestDTO.PositionId) ?? throw new Exception($"鏈壘鍒皗agvTaskRequestDTO.PositionId}绔欏彴浣嶇疆");
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode) ?? throw new Exception($"鏈壘鍒板搴旇澶噞stationManger.StationDeviceCode}");
+
+ OtherDevice commonConveyorLine = (OtherDevice)device;
+
+ if (stationManger.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())
+ {
+ commonConveyorLine.Communicator.Write("21", (short)256);
+ }
+ else
+ {
+ commonConveyorLine.Communicator.Write("23", (short)256);
+ }
+ content.OK();
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
}
}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
index 64f2b29..6c5807b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
@@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
+using System.Text;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
@@ -71,15 +72,31 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶噞stationManger.StationDeviceCode}");
}
- CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
- string PickBarCode = commonConveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.R_PickBarCode, stationManger.StationCode).Trim();
- if (containerFlowDTO.ContainerCode!= PickBarCode) throw new Exception($"浼犲叆鏂欑鐮亄containerFlowDTO.ContainerCode}锛岃緭閫佹枡绠辩爜{PickBarCode}鏁版嵁閿欒");
- if (containerFlowDTO.Direction=="100")
+ if (stationManger.StationDeviceCode== "CL1" || stationManger.StationDeviceCode == "CL2")
{
- WebResponseContent responseContent = Service.ContainerFlow(containerFlowDTO, stationManger.StationDeviceCode);
- if (!responseContent.Status) throw new Exception(responseContent.Message);
+ OtherDevice commonConveyorLine = (OtherDevice)device;
+ byte[] bytesPick = commonConveyorLine.Communicator.Read("12", 5);
+ string PickBarCode = Encoding.UTF8.GetString(bytesPick).Replace("\0", "").Replace("\\0", "");
+ if (containerFlowDTO.ContainerCode != PickBarCode) throw new Exception($"浼犲叆鏂欑鐮亄containerFlowDTO.ContainerCode}锛岃緭閫佹枡绠辩爜{PickBarCode}鏁版嵁閿欒");
+ if (containerFlowDTO.Direction == "100")
+ {
+ WebResponseContent responseContent = Service.ContainerFlow(containerFlowDTO, stationManger.StationDeviceCode);
+ if (!responseContent.Status) throw new Exception(responseContent.Message);
+ }
+ commonConveyorLine.Communicator.Write("22", (short)(containerFlowDTO.Direction == "100" ? 256 : 512));
}
- commonConveyorLine.SetValue(ConveyorLineDBName.W_PickToHode,(short)containerFlowDTO.Direction.ObjToInt(), stationManger.StationCode);
+ else
+ {
+ CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
+ string PickBarCode = commonConveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.R_PickBarCode, stationManger.StationCode).Trim();
+ if (containerFlowDTO.ContainerCode != PickBarCode) throw new Exception($"浼犲叆鏂欑鐮亄containerFlowDTO.ContainerCode}锛岃緭閫佹枡绠辩爜{PickBarCode}鏁版嵁閿欒");
+ if (containerFlowDTO.Direction == "100")
+ {
+ WebResponseContent responseContent = Service.ContainerFlow(containerFlowDTO, stationManger.StationDeviceCode);
+ if (!responseContent.Status) throw new Exception(responseContent.Message);
+ }
+ commonConveyorLine.SetValue(ConveyorLineDBName.W_PickToHode, (short)containerFlowDTO.Direction.ObjToInt(), stationManger.StationCode);
+ }
content.OK();
}
catch (Exception ex)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index b640cce..f501dc9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -223,7 +223,7 @@
{
lock (lock_requestInTask)
{
- Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt());
+ Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.TaskType==TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt());
if (task == null) throw new Exception($"{barCode}鏂欑鏈壘鍒颁换鍔�!");
Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation();
if (locationInfo == null) throw new Exception($"鍙敤璐т綅涓嶈冻!");
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\270\200\346\234\237\347\272\277\344\275\223/ConveyorLineJob1.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\270\200\346\234\237\347\272\277\344\275\223/ConveyorLineJob1.cs"
index 35a4301..e821c77 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\270\200\346\234\237\347\272\277\344\275\223/ConveyorLineJob1.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\270\200\346\234\237\347\272\277\344\275\223/ConveyorLineJob1.cs"
@@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz;
using System;
using System.Collections.Generic;
@@ -9,6 +10,7 @@
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
+using System.Text.Unicode;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.Helper;
@@ -54,7 +56,16 @@
_routerService = routerService;
_routerExtension = routerExtension;
}
-
+ /*
+ 1鍙蜂綅鍑哄簱鍙e厑璁告斁绠� 0
+ 1鍙蜂綅鏀剧瀹屾垚淇″彿 21
+ 6鍙蜂綅鎷i�変綅鏂欑鍒拌揪 1
+ 6鍙蜂綅鎷i�変綅鏂欑鏉$爜 2
+ 6鍙蜂綅鎷i�変綅鏂欑娴佸姩 22
+ 8鍙蜂綅鍏ュ簱鍙e厑璁稿彇绠� 11
+ 8鍙蜂綅鍏ュ簱鍙f枡绠辨潯鐮� 12
+ 8鍙蜂綅鏈哄櫒浜哄彇绠卞畬鎴� 23
+ */
public Task Execute(IJobExecutionContext context)
{
try
@@ -65,13 +76,59 @@
OtherDevice device = (OtherDevice)value;
List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
- foreach (var item in stationMangers)
+ foreach (var station in stationMangers)
{
- byte[] bytesPut = device.Communicator.Read("22", 1);
- ;
- device.Communicator.Write("22", new byte[] { 2, 0 });
- byte[] bytesPuted = device.Communicator.Read("22",1);
- device.Communicator.Write("22", new byte[] { 0, 0 });
+ if (station.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())
+ {
+
+ //鎷i�夌敵璇�
+ short pickArrived = device.Communicator.Read<short>("1");
+ if (pickArrived == 256)
+ {
+ byte[] bytesPick = device.Communicator.Read("2", 5);
+ string pickBarCode = Encoding.UTF8.GetString(bytesPick).Replace("\0", "").Replace("\\0", "");
+ //涓婃姤WMS鏂欑鍒拌揪
+ if (pickBarCode.IsNotEmptyOrNull())
+ {
+ WebResponseContent content = _taskService.WMSPickUp(station.PickStationCode, pickBarCode);
+ if (content.Status)
+ {
+ WriteInfo(device.DeviceCode, $"{station.PickStationCode}鎷i�夌敵璇蜂笂鎶ユ垚鍔焮pickBarCode}");
+ }
+ else
+ {
+ WriteError(device.DeviceCode, $"{station.PickStationCode}鎷i�夌敵璇蜂笂鎶MS閿欒{pickBarCode}锛屼俊鎭瘂content.Message}");
+ }
+ }
+ else
+ {
+ WriteError(device.DeviceCode, $"{station.PickStationCode}鎷i�夌敵璇蜂负{pickArrived}鏉$爜涓虹┖鍊�");
+ }
+ }
+ }
+ else
+ {
+ //鍏ュ簱鐢宠
+ short InTake = device.Communicator.Read<short>("11");
+ byte[] bytesIn = device.Communicator.Read("12", 5);
+ string InBarCode = Encoding.UTF8.GetString(bytesIn).Replace("\0", "").Replace("\\0", "");
+ if (InTake==256 && InBarCode.IsNotEmptyOrNull())
+ {
+ //鐢宠鍏ュ簱浠诲姟
+ Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == InBarCode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt() && x.TaskState != TaskStatusEnum.CL_Executing.ObjToInt());
+ if (task != null) continue;
+
+ WebResponseContent content = _taskService.RequestInTask(station.StationCode, InBarCode);
+ if (content.Status)
+ {
+ WriteInfo(device.DeviceCode, $"绔欏彴{station.StationCode}鏂欑{InBarCode}鐢宠鍏ュ簱鎴愬姛");
+ }
+ else
+ {
+ WriteError(device.DeviceCode, $"绔欏彴{station.StationCode}鏂欑{InBarCode}鐢宠鍏ュ簱浠诲姟閿欒锛屼俊鎭瘂content.Message}");
+ }
+ }
+ }
}
}
}
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/WCS\344\270\216RCS\345\256\211\345\205\250\344\272\244\344\272\222\346\216\245\345\217\243\346\226\207\346\241\243V1.6_11_13.pdf" "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/WCS\344\270\216RCS\345\256\211\345\205\250\344\272\244\344\272\222\346\216\245\345\217\243\346\226\207\346\241\243V1.6_11_13.pdf"
new file mode 100644
index 0000000..9e2b48d
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/WCS\344\270\216RCS\345\256\211\345\205\250\344\272\244\344\272\222\346\216\245\345\217\243\346\226\207\346\241\243V1.6_11_13.pdf"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx"
index 910f2e3..8d4f950 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx"
Binary files differ
--
Gitblit v1.9.3