using Flurl.Http; using Newtonsoft.Json; using Sln.Wcs.HikRoBotSdk.Config; using Sln.Wcs.HikRoBotSdk.Dto.CancelTask; using Sln.Wcs.HikRoBotSdk.Dto.ContinueTask; using Sln.Wcs.HikRoBotSdk.Dto.GbCancelTask; using Sln.Wcs.HikRoBotSdk.Dto.GbContinueTask; using Sln.Wcs.HikRoBotSdk.Dto.GbTaskSubmit; using Sln.Wcs.HikRoBotSdk.Dto.GenAgvSchedulingTask; using Sln.Wcs.HikRoBotSdk.Dto.TaskGroup; using Sln.Wcs.HikRoBotSdk.Dto.TaskPriority; using Sln.Wcs.HikRoBotSdk.Dto.ZonePause; using Sln.Wcs.HikRoBotSdk.Dto.ZoneHoming; using Sln.Wcs.HikRoBotSdk.Dto.ZoneBanish; using Sln.Wcs.HikRoBotSdk.Dto.ZoneBlockade; using Sln.Wcs.HikRoBotSdk.Dto.CarrierBind; using Sln.Wcs.HikRoBotSdk.Dto.CarrierUnbind; using Sln.Wcs.HikRoBotSdk.Dto.SiteBind; using Sln.Wcs.HikRoBotSdk.Dto.CarrierLock; using Sln.Wcs.HikRoBotSdk.Dto.SiteLock; using Sln.Wcs.HikRoBotSdk.Dto.PreTask; using Sln.Wcs.HikRoBotSdk.Dto.QueryTask; using Sln.Wcs.HikRoBotSdk.Dto.QueryRobot; using Sln.Wcs.HikRoBotSdk.Dto.QueryCarrier; using Sln.Wcs.HikRoBotSdk.Dto.MatLabelBind; using Sln.Wcs.HikRoBotSdk.Dto.MatLabelUnbind; using Sln.Wcs.HikRoBotSdk.Dto.EquipmentNotify; using System; using System.Collections.Generic; using System.Linq; using System.Security.Authentication; using System.Text; using System.Threading.Tasks; #region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2026 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:T14-GEN3-7895 * 命名空间:Sln.Wcs.HikRoBotSdk * 唯一标识:17e983b2-0c7e-4b27-ae05-e333d623b85d * * 创建者:WenJY * 电子邮箱: * 创建时间:2026-02-25 14:40:23 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> namespace Sln.Wcs.HikRoBotSdk { public class HIKRoBotSdk : IHIKRoBotSdk { private readonly HikRoBotConfig hikRoBotConfig; public HIKRoBotSdk(HikRoBotConfig hikRoBotConfig) { this.hikRoBotConfig = hikRoBotConfig; } /// /// GB标准-任务下发接口 /// /// 业务系统发送任务请求,物流机器人调度系统生成任务执行单并下发执行。 /// /// /// public GbTaskSubmitResultDto GbTaskSubmit(GbTaskSubmitDto gbTaskSubmit) { string url = $"{hikRoBotConfig.api}/task/submit"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); string json = JsonConvert.SerializeObject(gbTaskSubmit); Console.WriteLine($"请求报文:{json}"); return request.PostJsonAsync(gbTaskSubmit).Result.GetJsonAsync().Result; } /// /// GB标准-任务继续执行接口 /// /// 一个任务包含多个步骤,每个步骤完成后,通过此接口驱动下一个步骤执行。 /// /// /// public GbContinueTaskResultDto GbContinueTask(GbContinueTaskDto gbContinueTask) { string url = $"{hikRoBotConfig.api}/task/extend/continue"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(gbContinueTask).Result.GetJsonAsync().Result; } /// /// GB标准-任务取消接口 /// /// 取消指定任务,支持软取消(回库)和硬取消(直接丢弃)。 /// /// /// public GbCancelTaskResultDto GbCancelTask(GbCancelTaskDto gbCancelTask) { string url = $"{hikRoBotConfig.api}/task/cancel"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(gbCancelTask).Result.GetJsonAsync().Result; } /// /// 任务分组 /// /// 对多个任务进行分组,组内任务按优先级顺序执行。 /// /// /// public TaskGroupResultDto TaskGroup(TaskGroupDto taskGroup) { string url = $"{hikRoBotConfig.api}/task/group"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(taskGroup).Result.GetJsonAsync().Result; } /// /// 设置任务优先级 /// /// 修改指定任务的优先级。 /// /// /// public TaskPriorityResultDto SetTaskPriority(TaskPriorityDto taskPriority) { string url = $"{hikRoBotConfig.api}/task/priority"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(taskPriority).Result.GetJsonAsync().Result; } /// /// 区域暂停 /// /// 暂停指定区域内的所有AGV任务。 /// /// /// public ZonePauseResultDto ZonePause(ZonePauseDto zonePause) { string url = $"{hikRoBotConfig.api}/zone/pause"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(zonePause).Result.GetJsonAsync().Result; } /// /// 区域回库 /// /// 将指定区域内的AGV召回至充电桩/待命点。 /// /// /// public ZoneHomingResultDto ZoneHoming(ZoneHomingDto zoneHoming) { string url = $"{hikRoBotConfig.api}/zone/homing"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(zoneHoming).Result.GetJsonAsync().Result; } /// /// 区域驱赶 /// /// 将指定区域内的AGV驱赶出该区域。 /// /// /// public ZoneBanishResultDto ZoneBanish(ZoneBanishDto zoneBanish) { string url = $"{hikRoBotConfig.api}/zone/banish"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(zoneBanish).Result.GetJsonAsync().Result; } /// /// 区域封锁 /// /// 封锁指定区域,禁止AGV进入该区域。 /// /// /// public ZoneBlockadeResultDto ZoneBlockade(ZoneBlockadeDto zoneBlockade) { string url = $"{hikRoBotConfig.api}/zone/blockade"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(zoneBlockade).Result.GetJsonAsync().Result; } /// /// 载具绑定 /// /// 将载具(货架/料箱等)与指定库位进行绑定。 /// /// /// public CarrierBindResultDto CarrierBind(CarrierBindDto carrierBind) { string url = $"{hikRoBotConfig.api}/carrier/bind"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(carrierBind).Result.GetJsonAsync().Result; } /// /// 载具解绑 /// /// 解除载具(货架/料箱等)与库位的绑定关系。 /// /// /// public CarrierUnbindResultDto CarrierUnbind(CarrierUnbindDto carrierUnbind) { string url = $"{hikRoBotConfig.api}/carrier/unbind"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(carrierUnbind).Result.GetJsonAsync().Result; } /// /// 库位绑定 /// /// 将载具绑定到指定库位。 /// /// /// public SiteBindResultDto SiteBind(SiteBindDto siteBind) { string url = $"{hikRoBotConfig.api}/site/bind"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(siteBind).Result.GetJsonAsync().Result; } /// /// 载具锁定 /// /// 锁定指定载具,禁止AGV操作该载具。 /// /// /// public CarrierLockResultDto CarrierLock(CarrierLockDto carrierLock) { string url = $"{hikRoBotConfig.api}/carrier/lock"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(carrierLock).Result.GetJsonAsync().Result; } /// /// 库位锁定 /// /// 锁定指定库位,禁止AGV访问该库位。 /// /// /// public SiteLockResultDto SiteLock(SiteLockDto siteLock) { string url = $"{hikRoBotConfig.api}/site/lock"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(siteLock).Result.GetJsonAsync().Result; } /// /// 预占任务 /// /// 预占AGV资源,为后续任务执行做准备。 /// /// /// public PreTaskResultDto PreTask(PreTaskDto preTask) { string url = $"{hikRoBotConfig.api}/task/pretask"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(preTask).Result.GetJsonAsync().Result; } /// /// 查询任务状态 /// /// 根据任务编号查询任务的当前执行状态。 /// /// /// public QueryTaskResultDto QueryTaskStatus(QueryTaskDto queryTask) { string url = $"{hikRoBotConfig.api}/task/query"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(queryTask).Result.GetJsonAsync().Result; } /// /// 查询机器人状态 /// /// 查询指定机器人的当前运行状态信息。 /// /// /// public QueryRobotResultDto QueryRobotStatus(QueryRobotDto queryRobot) { string url = $"{hikRoBotConfig.api}/robot/query"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(queryRobot).Result.GetJsonAsync().Result; } /// /// 查询载具状态 /// /// 查询指定载具的当前位置和状态信息。 /// /// /// public QueryCarrierResultDto QueryCarrierStatus(QueryCarrierDto queryCarrier) { string url = $"{hikRoBotConfig.api}/carrier/query"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(queryCarrier).Result.GetJsonAsync().Result; } /// /// 物料标签绑定 /// /// 将物料与标签进行绑定关联。 /// /// /// public MatLabelBindResultDto MatLabelBind(MatLabelBindDto matLabelBind) { string url = $"{hikRoBotConfig.api}/matlabel/bind"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(matLabelBind).Result.GetJsonAsync().Result; } /// /// 物料标签解绑 /// /// 解除物料与标签的绑定关系。 /// /// /// public MatLabelUnbindResultDto MatLabelUnbind(MatLabelUnbindDto matLabelUnbind) { string url = $"{hikRoBotConfig.api}/matlabel/unbind"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(matLabelUnbind).Result.GetJsonAsync().Result; } /// /// 设备状态通知 /// /// 向上层系统通知设备(AGV/载具等)的状态变化。 /// /// /// public EquipmentNotifyResultDto EquipmentNotify(EquipmentNotifyDto equipmentNotify) { string url = $"{hikRoBotConfig.api}/spi/wcs/robot/eqpt/notify"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(equipmentNotify).Result.GetJsonAsync().Result; } /// /// 设备状态通知(国标) /// /// 以国标格式向上层系统通知设备状态变化。 /// /// /// public EquipmentNotifyResultDto EquipmentNotifyGbt(EquipmentNotifyDto equipmentNotify) { string url = $"{hikRoBotConfig.api}/spi/wcs/robot/eqpt/notifyGbt"; var request = url .WithHeader("Content-Type", hikRoBotConfig.contentType) .WithHeader("User-Agent", hikRoBotConfig.userAgent) .WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N")) .WithHeader("X-lr-version", hikRoBotConfig.xlrVersion) .WithTimeout(TimeSpan.FromSeconds(15)); return request.PostJsonAsync(equipmentNotify).Result.GetJsonAsync().Result; } } }