ConvPlc04.cs 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942
  1. using SqlSugar;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading;
  6. using WCS.Data;
  7. using WCS.Data.Models;
  8. using WCS.Data.Utils;
  9. using WCS.PLC;
  10. using WCS.PLC.Model.Equipment;
  11. namespace WCS.Workflow
  12. {
  13. public class ConvPlc04 : Base_Conv
  14. {
  15. #region 只读变量
  16. private readonly string Conv_1143 = "1143";//4堆垛机出口
  17. private readonly string Conv_1141 = "1141";//5堆垛机出口
  18. private readonly string Conv_1508 = "1508";//熟化房一
  19. private readonly string Conv_1509 = "1509";//熟化房二
  20. private readonly string Conv_1164 = "1164";//熟化房一
  21. private readonly string Conv_1165 = "1165";//熟化房二
  22. private readonly string Conv_1136 = "1136";//熟化房入口一
  23. private readonly string Conv_1138 = "1138";//熟化房入口二
  24. private readonly string Conv_1137 = "1137";//熟化房出口一
  25. private readonly string Conv_1139 = "1139";//熟化房出口二
  26. private readonly string Conv_1161 = "1161";//2号堆垛机出库(3楼男面)
  27. private readonly string Conv_1159 = "1159";//3号堆垛机出库(3楼男面)
  28. private readonly string Conv_1160 = "1160";//3号堆垛机出库(3楼男面)
  29. private readonly string Conv_1152 = "1152";//4号堆垛机出库(3楼男面)
  30. private readonly string Conv_1151 = "1151";//5号堆垛机出库(3楼男面)
  31. private readonly string Conv_1155 = "1155";
  32. private readonly string Conv_1156 = "1156";
  33. private readonly string Conv_1157 = "1157";
  34. private readonly string Conv_1158 = "1158";
  35. #endregion 只读变量
  36. #region 重载实现
  37. public override void Run()
  38. {
  39. //刷新任务数据
  40. WCSWorkflow.RefreshData();
  41. //上传熟化开始结束时间信息
  42. UploadMatureTimeInfo(Conv_1164);
  43. UploadMatureTimeInfo(Conv_1165);
  44. //MatureSignalGet();
  45. //更新熟化连续模式
  46. ThreadHelper.TaskThread(UploadMatureMode);
  47. //堆垛机出口执行
  48. SrmOutConvExeTask();
  49. //输送线执行
  50. ConveyorWriteTaskExecute();
  51. //扫描入库
  52. Conv_ScanBarCodeExeTask();
  53. //更新熟化房当前信息到数据库
  54. ThreadHelper.TaskThread(MatureRoomRefresh);
  55. //任务完成
  56. ConvTaskFinish();
  57. //熟化房申请出库熟化
  58. ThreadHelper.TaskThread(ReqestInByMatureRoom);
  59. //进入熟化房请求确认
  60. RequestInByMatureConv(Conv_1136, Conv_1508);
  61. RequestInByMatureConv(Conv_1138, Conv_1509);
  62. //熟化房完成
  63. MatureConvFinish(Conv_1137, Conv_1508);
  64. MatureConvFinish(Conv_1139, Conv_1509);
  65. //熟化房输送线请求入库
  66. RequestOutByMatureConv(Conv_1137, Conv_1508);
  67. RequestOutByMatureConv(Conv_1139, Conv_1509);
  68. }
  69. #endregion 重载实现
  70. #region 功能实现
  71. private static int _atureRoomRefresh = 0;
  72. private void MatureRoomRefresh()
  73. {
  74. if (Interlocked.Exchange(ref _atureRoomRefresh, 1) == 0)
  75. {
  76. try
  77. {
  78. Thread.Sleep(6000);
  79. var matureRoomSet = SugarBase.DB.Queryable<MatureRoomInfo>().ToList();
  80. List<string> list = new List<string>() { Conv_1508, Conv_1509 };
  81. foreach (var item in list)
  82. {
  83. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  84. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item);
  85. var cs = conveyor.EquSignal_Conv;
  86. bool isOnLine = cs.DB521_Goodstype == 0 ? false : true;
  87. string faultMsg = cs.MatureRoomFault.ToString();
  88. var matureRoom = matureRoomSet.FirstOrDefault(v => v.MatureRoomNo == item);
  89. //修改熟化房的状态
  90. SugarBase.DB.Updateable<MatureRoomInfo>(it => new MatureRoomInfo()
  91. {
  92. MatureRoomTemperat = cs.DB521_Res04,
  93. MatureRoomDate = cs.DB521_Goodssize,
  94. MatureRoomIsOnLine = isOnLine,
  95. MatureRoomMode = cs.DB521_Goodsstart,
  96. MatureRoomTangentStatus = cs.DB521_Goodsend,
  97. MatureRoomAlaramsMsg = faultMsg
  98. })
  99. .Where(it => it.MatureRoomNo == item)
  100. .ExecuteCommand();
  101. }
  102. }
  103. catch (Exception ex)
  104. {
  105. LogMessageHelper.RecordLogMessage(ex);
  106. }
  107. finally
  108. {
  109. Interlocked.Exchange(ref _atureRoomRefresh, 0);
  110. }
  111. }
  112. }
  113. private static int _matureSignalGet = 0;
  114. private static int _uploadMode = 0;
  115. private void UploadMatureMode()
  116. {
  117. if (Interlocked.Exchange(ref _uploadMode, 1) == 0)
  118. {
  119. try
  120. {
  121. List<string> list = new List<string>() { Conv_1164, Conv_1165 };
  122. string s = "BakeMode_";
  123. foreach (var item in list)
  124. {
  125. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  126. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item);
  127. var cs = conveyor.EquSignal_Conv;
  128. string matureNo = item == "1164" ? "A" : "B";
  129. var value = s + matureNo;
  130. //获取连续模式值
  131. var plcValue = cs.DB521_F_Outside ? "1" : "0";
  132. var sysset = SugarBase.DB.Queryable<WCS_SYSSET>().Where(v => v.SET_ID == value).First();
  133. if (sysset != null)
  134. {
  135. if (plcValue != sysset.SET_VALUE)
  136. {
  137. string result = TryCachHelper.TryTranExecute((db) =>
  138. {
  139. db.Updateable<WCS_SYSSET>(it => new WCS_SYSSET()
  140. {
  141. SET_VALUE = plcValue,
  142. })
  143. .Where(it => it.SET_ID == value)
  144. .ExecuteCommand();
  145. });
  146. if (!string.IsNullOrWhiteSpace(result))
  147. {
  148. throw new Exception(result);
  149. }
  150. }
  151. }
  152. }
  153. }
  154. catch (Exception ex)
  155. {
  156. LogMessageHelper.RecordLogMessage(ex);
  157. }
  158. finally
  159. {
  160. Interlocked.Exchange(ref _uploadMode, 0);
  161. }
  162. }
  163. }
  164. private void Conv_ScanBarCodeExeTask()
  165. {
  166. Conv_ScanningIn(Conv_1155, Conv_1155);
  167. //Conv_ScanningIn(Conv_1156, Conv_1156);
  168. //Conv_ScanningIn(Conv_1157, Conv_1157);
  169. Conv_ScanningIn(Conv_1158, Conv_1158);
  170. }
  171. private void ConvTaskFinish()
  172. {
  173. ConveyorTaskFinish(PlcName, Conv_1155, false, true);
  174. ConveyorTaskFinish(PlcName, Conv_1156, false, true);
  175. ConveyorTaskFinish(PlcName, Conv_1157, false, true);
  176. ConveyorTaskFinish(PlcName, Conv_1158, false, true);
  177. }
  178. protected override WCS_TASK ScanningCallWmsInterface(GetInTaskParam param)
  179. {
  180. if (param.EquipmentNo == Conv_1155 || param.EquipmentNo == Conv_1156 || param.EquipmentNo == Conv_1157 || param.EquipmentNo == Conv_1158)
  181. {
  182. param.Memo1 = "1";
  183. }
  184. return base.ScanningCallWmsInterface(param);
  185. }
  186. private void Conv_ScanningIn(string convNo, string exceptionConvNo, bool isCurAddressByNext = true)
  187. {
  188. try
  189. {
  190. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  191. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  192. var cs = conveyor.EquSignal_Conv;
  193. if (!cs.DB521_Request) return;
  194. if (cs.DB520_Confirm) return;
  195. var task = QueryTaskByBarcode(cs, convNo);
  196. if ((convNo == Conv_1155 || convNo == Conv_1158) && cs.DB521_Goodstype == 0)
  197. {
  198. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]外捡高度为零,WCS默认标识为1", convNo), true, LogLevelEnum.INFO.ToString());
  199. }
  200. if (task == null)
  201. {
  202. if (WcsScanConvIsUsed(convNo))
  203. {
  204. var param = new GetInTaskParam();
  205. param.ContainerBarCode = cs.BarCodeStr;
  206. param.ContainerType = cs.DB521_Goodstype > 0 ? cs.DB521_Goodstype : 1;
  207. param.MatBarCode = string.Empty;
  208. param.WareHouseId = Current.Pvchouseputong;
  209. param.EquipmentNo = convNo;
  210. param.EndPostion = srm;
  211. param.Memo1 = "1";
  212. param.Memo2 = exceptionConvNo;
  213. task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  214. }
  215. }
  216. //判断任务是否存在,或已经执行
  217. if (task == null || task.TASK_WKSTATUS >= 2) return;
  218. var converywrite = new WCSWriteToConveyorSignal();
  219. converywrite.Plc = plc.Plc;
  220. converywrite.DBName = plc.WriteDBName;
  221. converywrite.ConveyorNo = convNo;
  222. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  223. converywrite.Tasknum = task.TASK_NO;
  224. converywrite.Goodssize = 0;//
  225. converywrite.Goodsstart = Convert.ToInt32(convNo);
  226. if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
  227. {
  228. converywrite.Notask = true;
  229. converywrite.Goodsend = Convert.ToInt32(exceptionConvNo);
  230. }
  231. else if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && v.TASK_POSIDNEXT == convNo))
  232. {
  233. converywrite.Notask = true;
  234. converywrite.Goodsend = Convert.ToInt32(exceptionConvNo);
  235. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]条码[{1}]不能入库,存在出库到该位置的任务。", convNo, cs.BarCodeStr), true, LogLevelEnum.INFO.ToString());
  236. }
  237. else
  238. {
  239. if (isCurAddressByNext)
  240. {
  241. converywrite.Goodsend = Convert.ToInt32(convNo);
  242. }
  243. else
  244. {
  245. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  246. var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == convNo);
  247. converywrite.Goodsend = Convert.ToInt32(route.ROUTE_SONPOS);
  248. }
  249. }
  250. if (convNo == Conv_1155)
  251. {
  252. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]任务[{1}]条码[{2}]外检高度[{3}](零值默认为1)。", convNo, task.TASK_NO, cs.BarCodeStr, cs.DB521_Goodstype), true, LogLevelEnum.INFO.ToString());
  253. }
  254. WriteInfoToConv(cs, converywrite);
  255. }
  256. catch (Exception ex)
  257. {
  258. LogMessageHelper.RecordLogMessage(ex);
  259. }
  260. }
  261. private void MatureConvFinish(string convNo, string matureRoomNo)
  262. {
  263. try
  264. {
  265. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  266. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  267. var cs = conveyor.EquSignal_Conv;
  268. if (!cs.DB521_Request) return;
  269. if (cs.DB523_Fault) return;
  270. if (cs.DB521_Tasknum > 10000) return;
  271. //if (cs.DB521_BCR_Noread) throw new Exception(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  272. //if (string.IsNullOrWhiteSpace(cs.BarCodeStr)) throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  273. MatureRoomCache atureRooCache = null;
  274. string barcode = cs.BarCodeStr;
  275. if (barcode.ToUpper().Contains("ERROR") ||
  276. barcode.ToUpper().Contains("N") ||
  277. barcode.Contains("?") ||
  278. string.IsNullOrWhiteSpace(barcode))
  279. {
  280. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 1 && v.TASK_POSIDFROM == matureRoomNo &&
  281. (v.TASK_WKSTATUS <= 1 || v.TASK_WKSTATUS == 7 || v.TASK_WKSTATUS == 9 || (v.TASK_WKSTATUS == 2 && v.TASK_POSIDNEXT == convNo))))
  282. {
  283. throw new Exception(string.Format("扫码失败,熟化房[{0}]输送线[{1}]存在未完成的任务,不能重复请求生成任务,请检查熟化房与输送线对接是否存在问题。", matureRoomNo, convNo));
  284. }
  285. if (Current.TaskSet.Any(v => v.TASK_COMTYPE == 1 && v.TASK_OutMatureRoomDate != null &&
  286. (v.TASK_WKSTATUS <= 1 || v.TASK_WKSTATUS == 7 || v.TASK_WKSTATUS == 9 || (v.TASK_WKSTATUS == 2 && v.TASK_POSIDNEXT == convNo))))
  287. {
  288. throw new Exception(string.Format("扫码失败,熟化房[{0}]输送线[{1}]存在未完成的任务,不能重复请求生成任务,请检查熟化房与输送线对接是否存在问题。", matureRoomNo, convNo));
  289. }
  290. atureRooCache = SugarBase.DB.Queryable<MatureRoomCache>().Where(v => v.MatureRoomNo.Contains(matureRoomNo) && SqlFunc.IsNullOrEmpty(v.Remark)).OrderBy(v => v.InMatureRoomDate).First();
  291. barcode = atureRooCache.BARCODE;
  292. //throw new Exception(string.Format("扫码失败,熟化房[{0}]输送线[{1}]请求入库查询到队列中的条码[{2}]", matureRoomNo, convNo, barcode));
  293. LogMessageHelper.RecordLogMessage(string.Format("扫码失败,熟化房[{0}]输送线[{1}]请求入库查询到队列中的条码[{2}]", matureRoomNo, convNo, barcode), true);
  294. }
  295. else
  296. {
  297. atureRooCache = SugarBase.DB.Queryable<MatureRoomCache>().Where(v => v.MatureRoomNo.Contains(matureRoomNo) && SqlFunc.IsNullOrEmpty(v.Remark)).OrderBy(v => v.InMatureRoomDate).First();
  298. if (barcode != atureRooCache.BARCODE)
  299. {
  300. throw new Exception(string.Format("扫码成功,熟化房[{0}]读取到条码[{1}]但是与熟化房队列条码[{2}]不一致,请检查是否存在问题。", matureRoomNo, barcode, atureRooCache.BARCODE));
  301. }
  302. LogMessageHelper.RecordLogMessage(string.Format("扫码成功,读取到条码[{0}]熟化房[{1}]", barcode, matureRoomNo));
  303. }
  304. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == barcode);
  305. if (task == null) return;
  306. if (task.TASK_WKSTATUS == (int)WkStatus.熟化房熟化完成) return;
  307. if (task.TASK_WKSTATUS == (int)WkStatus.完成任务) return;
  308. if (task.TASK_WKSTATUS != (int)WkStatus.熟化房熟化中) return;
  309. if (task.TASK_WKSTATUS <= 1) return;
  310. //var matureTask = Current.TaskSet.Where(v => v.TASK_WKSTATUS == (int)WkStatus.熟化房熟化中).OrderBy(v => v.TASK_InMatureRoomDate).FirstOrDefault();
  311. //if (task.TASK_BOXBARCODE.Trim() != matureTask.TASK_BOXBARCODE.Trim())
  312. //{
  313. // throw new Exception(string.Format("熟化房[{0}]出口[{1}]扫描条码[{2}]与任务列表中条码[{3}]不一致,请检查条码问题。", matureRoomNo, convNo, cs.BarCodeStr, matureTask.TASK_BOXBARCODE));
  314. //}
  315. var roomNo = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == matureRoomNo);
  316. var roomNocs = roomNo.EquSignal_Conv;
  317. int hours = roomNocs.DB521_Goodssize - 4;
  318. //DateTime inMaturedate = task.TASK_InMatureRoomDate.GetValueOrDefault().AddHours(hours);
  319. //if (inMaturedate > SugarBase.DB.GetDate())
  320. //{
  321. // throw new Exception(string.Format("条码[{0}]开始熟化时间[{1}]比要求烘烤时间低于4小时以上(严重错误),不能出库完成,请检查熟化是否存在问题。", task.TASK_BOXBARCODE, task.TASK_InMatureRoomDate, hours));
  322. //}
  323. //修改状态
  324. string result = TryCachHelper.TryTranExecute((db) =>
  325. {
  326. DateTime dt = db.GetDate();
  327. int wkstatus = task.TASK_COMTYPE == 1 ? 14 : 99;
  328. if (atureRooCache.CurrentMatureNum < atureRooCache.MatureNum)
  329. {
  330. wkstatus = 14;
  331. //修改任务的状态
  332. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  333. {
  334. TASK_WKSTATUS = wkstatus,
  335. TASK_POSIDCUR = convNo,
  336. TASK_EDITUSERNO = "WCS",
  337. TASK_EDITDATETIME = DateTime.Now
  338. })
  339. .Where(it => it.TASK_NO == task.TASK_NO)
  340. .ExecuteCommand();
  341. }
  342. else
  343. {
  344. //修改任务的状态
  345. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  346. {
  347. TASK_WKSTATUS = wkstatus,
  348. TASK_POSIDCUR = convNo,
  349. TASK_OutMatureRoomDate = dt,
  350. TASK_EDITUSERNO = "WCS",
  351. TASK_EDITDATETIME = DateTime.Now
  352. })
  353. .Where(it => it.TASK_NO == task.TASK_NO)
  354. .ExecuteCommand();
  355. }
  356. //添加修改明细
  357. string msg = string.Format("任务[{0}]熟化房熟化完成", task.TASK_NO);
  358. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  359. });
  360. if (!string.IsNullOrWhiteSpace(result))
  361. {
  362. throw new Exception(result);
  363. }
  364. }
  365. catch (Exception ex)
  366. {
  367. LogMessageHelper.RecordLogMessage(ex);
  368. }
  369. }
  370. private void RequestOutByMatureConv(string convNo, string matureRoomNo)
  371. {
  372. try
  373. {
  374. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  375. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  376. var cs = conveyor.EquSignal_Conv;
  377. if (!cs.DB521_Request) return;
  378. if (cs.DB523_Fault) return;
  379. if (cs.DB521_Tasknum > 10000) return;
  380. //if (cs.DB521_BCR_Noread) throw new Exception(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  381. //if (string.IsNullOrWhiteSpace(cs.BarCodeStr)) throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  382. string barcode = cs.BarCodeStr;
  383. WCS_TASK task = null;
  384. if (cs.BarCodeStr.ToUpper().Contains("ERROR") ||
  385. cs.BarCodeStr.ToUpper().Contains("N") ||
  386. cs.BarCodeStr.Contains("?") ||
  387. string.IsNullOrWhiteSpace(cs.BarCodeStr))
  388. {
  389. task = Current.TaskSet.SingleOrDefault(v => v.TASK_COMTYPE == 1 && v.TASK_POSIDFROM == matureRoomNo && (v.TASK_POSIDCUR == matureRoomNo || v.TASK_POSIDCUR == convNo));
  390. if (task == null)
  391. {
  392. task = Current.TaskSet.SingleOrDefault(v => v.TASK_WKSTATUS == (int)WkStatus.熟化房熟化完成 && (v.TASK_POSIDCUR == convNo || v.TASK_POSIDCUR == matureRoomNo));
  393. }
  394. }
  395. else
  396. {
  397. task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == barcode && v.TASK_COMTYPE == 1);
  398. if (task == null)
  399. {
  400. var matureRoom = SugarBase.DB.Queryable<MatureRoomCache>().First(v => v.BARCODE == barcode);
  401. if (matureRoom.MatureNum > 1 && matureRoom.CurrentMatureNum < matureRoom.MatureNum)
  402. {
  403. //是多次熟化任务(只支持48小时多次熟化)
  404. task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == barcode && v.MatureNum.GetValueOrDefault() == 4 && v.TASK_COMTYPE == 2);
  405. }
  406. }
  407. }
  408. if (task == null || task.TASK_POSIDNEXT == convNo) return;
  409. //下发任务
  410. var converywrite = new WCSWriteToConveyorSignal();
  411. converywrite.Plc = plc.Plc;
  412. converywrite.DBName = plc.WriteDBName;
  413. converywrite.ConveyorNo = convNo;
  414. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  415. converywrite.Tasknum = task.TASK_NO;
  416. converywrite.Goodssize = 0;//
  417. converywrite.Goodsstart = Convert.ToInt32(convNo);
  418. converywrite.Goodsend = converywrite.Goodsstart;
  419. WriteInfoToConvMRoom(cs, converywrite);
  420. }
  421. catch (Exception ex)
  422. {
  423. LogMessageHelper.RecordLogMessage(ex);
  424. }
  425. }
  426. private void ConveyorWriteTaskExecute()
  427. {
  428. }
  429. private void SrmOutConvExeTask()
  430. {
  431. SrmOutConvExeTask(Conv_1143, true);
  432. SrmOutConvExeTask(Conv_1141, true);
  433. SrmOutConvExeTask(Conv_1161, true);
  434. SrmOutConvExeTask(Conv_1160, false);
  435. SrmOutConvExeTask(Conv_1152, true);
  436. SrmOutConvExeTask(Conv_1151, true);
  437. }
  438. /// <summary>
  439. /// 堆垛机出口输送线任务执行(任务目标地址的下个地址只支持单一地址)
  440. /// </summary>
  441. private void SrmOutConvExeTask(string convNo, bool endPosIsCurConv = false)
  442. {
  443. try
  444. {
  445. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  446. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  447. var cs = conveyor.EquSignal_Conv;
  448. if (!cs.DB521_Request) return;
  449. if (cs.DB523_Fault) return;
  450. var taskSet = Current.TaskSet.Where(v => v.TASK_POSIDNEXT == convNo).ToList();
  451. var task = taskSet.SingleOrDefault(v => v.TASK_WKSTATUS == (int)WkStatus.堆垛机完成);
  452. if (task == null)
  453. {
  454. throw new Exception(string.Format("堆垛机出口输送线[{0}]存在请求信号,但没查询到任务信息。", convNo));
  455. }
  456. var converywrite = new WCSWriteToConveyorSignal();
  457. converywrite.Plc = plc.Plc;
  458. converywrite.DBName = plc.WriteDBName;
  459. converywrite.ConveyorNo = convNo;
  460. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  461. converywrite.Tasknum = task.TASK_NO;
  462. converywrite.Goodscode = 0;
  463. converywrite.Goodstype = 0;
  464. converywrite.Goodssize = 0;
  465. converywrite.Goodsstart = Convert.ToInt32(convNo);
  466. if (endPosIsCurConv)
  467. {
  468. converywrite.Goodsend = converywrite.Goodsstart;
  469. }
  470. else
  471. {
  472. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  473. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  474. if (routes.Count == 1)
  475. {
  476. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  477. }
  478. else
  479. {
  480. throw new Exception(string.Format("输送线[{0}]任务[{1}]请求该函数不支持多个分支输送地址,请编写扩展函数。", convNo, task.TASK_NO));
  481. }
  482. }
  483. WriteInfoToConv(cs, converywrite);
  484. }
  485. catch (Exception ex)
  486. {
  487. LogMessageHelper.RecordLogMessage(ex);
  488. }
  489. }
  490. private static int _reqestInByMatureRoom = 0;
  491. /// <summary>
  492. /// 熟化房申请出库熟化
  493. /// </summary>
  494. private void ReqestInByMatureRoom()
  495. {
  496. if (Interlocked.Exchange(ref _reqestInByMatureRoom, 1) == 0)
  497. {
  498. try
  499. {
  500. Thread.Sleep(60000);
  501. if (Current.SysSets.FirstOrDefault(v => v.SET_ID == Conv_1508).SET_VALUE == "0")
  502. {
  503. //1164 f outside
  504. var conv_1164 = ConveyorHelper.GetConveyorSignal(PlcName, "1164");
  505. if (conv_1164.DB521_F_Outside) return;
  506. ReqestInByMatureRoomItem(Conv_1508, Conv_1136);
  507. }
  508. if (Current.SysSets.FirstOrDefault(v => v.SET_ID == Conv_1509).SET_VALUE == "0")
  509. {
  510. //1165 f outside
  511. var conv_1165 = ConveyorHelper.GetConveyorSignal(PlcName, "1165");
  512. if (conv_1165.DB521_F_Outside) return;
  513. ReqestInByMatureRoomItem(Conv_1509, Conv_1138);
  514. }
  515. }
  516. catch (Exception ex)
  517. {
  518. LogMessageHelper.RecordLogMessage(ex);
  519. }
  520. finally
  521. {
  522. Interlocked.Exchange(ref _reqestInByMatureRoom, 0);
  523. }
  524. }
  525. }
  526. private void ReqestInByMatureRoomItem(string convNo, string matureInConvNo)
  527. {
  528. bool a = false;
  529. //检测是否存在去熟化房的未执行任务
  530. TryCachHelper.TryTranExecute((db) =>
  531. {
  532. a = db.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == convNo && v.TASK_WKSTATUS < 13);
  533. });
  534. if (a) return;
  535. var matureinConvNo = ConveyorHelper.GetConveyorSignal(PlcName, matureInConvNo);
  536. //if (matureinConvNo.DB521_Tasknum > 0 || matureinConvNo.CvDB51_PH_Status) return;
  537. var conv_1141 = ConveyorHelper.GetConveyorSignal(PlcName, "1141");
  538. var conv_1143 = ConveyorHelper.GetConveyorSignal(PlcName, "1143");
  539. if ((conv_1141.DB521_Tasknum > 0 || conv_1141.CvDB51_PH_Status) && (conv_1143.DB521_Tasknum > 0 || conv_1143.CvDB51_PH_Status)) return;
  540. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  541. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  542. var cs = conveyor.EquSignal_Conv;
  543. if (cs.DB521_Goodstype != 1) return;//检测是否在线
  544. if (cs.DB521_Goodssize < 2) return;//检测烘烤时间是否正确
  545. //if (cs.DB521_Goodsstart != 1) return;//检测是否自动状态
  546. //if (cs.DB521_Goodsend == 1) return;//切线中,不能出库到熟化
  547. if (cs.DB521_Res04 == 0) return;//熟化房温度不能为零
  548. //int mature_Count = Current.TaskSet.Count(v => v.TASK_WKSTATUS == (int)WkStatus.熟化房熟化中 && v.TASK_POSIDNEXT == convNo);
  549. var mature_InTaskCount = Current.TaskSet.Count(v => v.TASK_MatureDate == cs.DB521_Goodssize && v.TASK_MatureTemperat <= cs.DB521_Res04 && v.TASK_MatureType == 1);
  550. //var mature_InTaskCount = Current.TaskSet.Count(v => v.TASK_MatureDate == cs.DB521_Goodssize && v.TASK_MatureType == 1);
  551. var mature_OutTaskCount = Current.TaskSet.Count(v => v.TASK_POSIDTO == matureInConvNo);
  552. if ((mature_InTaskCount + mature_OutTaskCount) < 60)
  553. {
  554. var param = new GetOutTaskParam();
  555. param.OutId = convNo;
  556. param.OutEndPostion = convNo;
  557. param.OutType = 1;
  558. param.WareHouseId = Current.Pvchouseputong;
  559. param.TASK_MatureDate = cs.DB521_Goodssize;
  560. param.TASK_MatureTemperat = cs.DB521_Res04;
  561. //调用WMS接口生成出库任务
  562. ThreadHelper.TaskThread(BaseWorkflow.GetOutTask, param, 2000);
  563. }
  564. }
  565. private void UploadMatureTimeInfo(string conNo)
  566. {
  567. try
  568. {
  569. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  570. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == conNo);
  571. var cs = conveyor.EquSignal_Conv;
  572. // 开始与结束信号已被PLC复位,同时开始与结束确认信号为置位状态,开始复位确认信号
  573. if (!cs.DB521_B_Outside && !cs.DB521_L_Outside)
  574. {
  575. if (cs.DB520_Confirm || cs.DB520_TaskDelete)
  576. {
  577. var converywrite = new WCSWriteToConveyorSignal();
  578. converywrite.Plc = plc.Plc;
  579. converywrite.DBName = plc.WriteDBName;
  580. converywrite.ConveyorNo = conNo;
  581. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  582. converywrite.Confirm = false;
  583. converywrite.TaskDelete = false;
  584. WriteTaskToBuffer(converywrite, true);
  585. return;
  586. }
  587. }
  588. string matureNo = conNo == "1164" ? "A" : "B";
  589. if (!cs.DB521_B_Outside && !cs.DB521_L_Outside) return;
  590. int isContinueMode = cs.DB521_F_Outside == true ? 1 : 0;//是否连续熟化模式
  591. int num = cs.DB521_Goodstype;//熟化架数量
  592. //开始熟化信号true,开始确认信号、结束熟化信号false,此时上传开始熟化信息
  593. if (cs.DB521_B_Outside && !cs.DB520_Confirm && !cs.DB521_L_Outside)//开始熟化标志 DB520_Confirm 开始确认标志
  594. {
  595. //调用上传WMS的接口上传熟化房信息
  596. var param = new GetMatureContinueParam
  597. {
  598. MatureRoomNo = matureNo,
  599. IsContinueMode = isContinueMode,
  600. MatureStartTime = DateTime.Now,
  601. MatureEndTime = null,
  602. MatureFrameNum = num
  603. };
  604. //BaseWorkflow.GetMatureContinueMode(param, cs, plc, 1, item);
  605. if (BaseWorkflow.GetMatureContinueMode(param))
  606. {
  607. var converywrite = new WCSWriteToConveyorSignal();
  608. converywrite.Plc = plc.Plc;
  609. converywrite.DBName = plc.WriteDBName;
  610. converywrite.ConveyorNo = conNo;
  611. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  612. converywrite.Confirm = true;
  613. WriteTaskToBuffer(converywrite, true);
  614. }
  615. }
  616. //开始、结束熟化信号为true,结束熟化确认信号false,此时上传结束熟化信息
  617. else if (cs.DB521_L_Outside && !cs.DB520_TaskDelete && cs.DB521_B_Outside)////结束熟化标志 DB520_TaskDelete 结束确认标志
  618. {
  619. //调用上传WMS的接口上传熟化房信息
  620. var param = new GetMatureContinueParam
  621. {
  622. MatureRoomNo = matureNo,
  623. IsContinueMode = isContinueMode,
  624. MatureStartTime = null,
  625. MatureEndTime = DateTime.Now,
  626. MatureFrameNum = num
  627. };
  628. //BaseWorkflow.GetMatureContinueMode(param, cs, plc, 2, item);
  629. if (BaseWorkflow.GetMatureContinueMode(param))
  630. {
  631. var converywrite = new WCSWriteToConveyorSignal();
  632. converywrite.Plc = plc.Plc;
  633. converywrite.DBName = plc.WriteDBName;
  634. converywrite.ConveyorNo = conNo;
  635. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  636. converywrite.TaskDelete = true;
  637. WriteTaskToBuffer(converywrite);
  638. }
  639. }
  640. }
  641. catch (Exception ex)
  642. {
  643. LogMessageHelper.RecordLogMessage(ex);
  644. }
  645. }
  646. private void RequestInByMatureConv(string convNo, string matureRoomNo)
  647. {
  648. try
  649. {
  650. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  651. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  652. var cs = conveyor.EquSignal_Conv;
  653. if (!cs.DB521_Request) return;
  654. if (cs.DB523_Fault) return;
  655. if (cs.CvDB51_PH_Status) return;
  656. if (cs.DB521_Tasknum == 0) return;
  657. var task = Current.TaskSet.SingleOrDefault(v => v.TASK_NO == cs.DB521_Tasknum);
  658. var converywrite = new WCSWriteToConveyorSignal();
  659. converywrite.Plc = plc.Plc;
  660. converywrite.DBName = plc.WriteDBName;
  661. converywrite.ConveyorNo = convNo;
  662. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  663. converywrite.Remark_TaskNo = cs.DB521_Tasknum.ToString();
  664. converywrite.Remark = matureRoomNo;
  665. WriteInfoToConv_Room(cs, converywrite);
  666. }
  667. catch (Exception ex)
  668. {
  669. LogMessageHelper.RecordLogMessage(ex);
  670. }
  671. }
  672. /// <summary>
  673. /// 写入任务信息到输送机
  674. /// </summary>
  675. /// <param name="converySignal"></param>
  676. /// <param name="converywrite"></param>
  677. /// <param name="isNotTask"></param>
  678. public void WriteInfoToConv_Room(ConvSignal converySignal, WCSWriteToConveyorSignal converywrite)
  679. {
  680. if (converySignal.DB520_Tasknum == converywrite.Tasknum &&
  681. converySignal.DB520_Goodscode == converywrite.Goodscode &&
  682. converySignal.DB520_Goodstype == converywrite.Goodstype &&
  683. converySignal.DB520_Goodssize == converywrite.Goodssize &&
  684. converySignal.DB520_Goodsstart == converywrite.Goodsstart &&
  685. converySignal.DB520_Goodsend == converywrite.Goodsend &&
  686. converySignal.DB520_Notask == converywrite.Notask &&
  687. converySignal.DB520_TaskDelete == converywrite.TaskDelete &&
  688. converySignal.DB520_RollerTurn == converywrite.UpMatRequest &&
  689. converySignal.DB520_Res01 == converywrite.Res01 &&
  690. converySignal.DB520_Res02 == converywrite.Res02 &&
  691. converySignal.DB520_Res03 == converywrite.Res03 &&
  692. converySignal.DB520_Res04 == converywrite.Res04)
  693. {
  694. string result = TryCachHelper.TryTranExecute((db) =>
  695. {
  696. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == Convert.ToInt32(converywrite.Remark_TaskNo));
  697. if (task == null) throw new Exception(string.Format("任务[{0}]未查询到信息.输送线[{1}]执行失败。", converywrite.Remark_TaskNo, converywrite.ConveyorNo));
  698. int wkstatus = (int)WkStatus.熟化房熟化中;
  699. var matureRoomItem = db.Queryable<MatureRoomCache>().First(v => v.BARCODE == task.TASK_BOXBARCODE);
  700. if (matureRoomItem == null)
  701. {
  702. DateTime dt = db.GetDate();
  703. int updatecount = db.Updateable<WCS_TASK>(it => new WCS_TASK()
  704. {
  705. TASK_WKSTATUS = wkstatus,
  706. TASK_POSIDCUR = converywrite.Remark,
  707. TASK_POSIDNEXT = converywrite.Remark,
  708. TASK_EDITUSERNO = "WCS",
  709. TASK_EDITDATETIME = DateTime.Now,
  710. TASK_InMatureRoomDate = dt
  711. })
  712. .Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  713. if (updatecount <= 0)
  714. {
  715. throw new Exception(string.Format("任务[{0}]进入熟化房确认修改任务信息失败。", task.TASK_NO));
  716. }
  717. var matureRoom = new MatureRoomCache();
  718. matureRoom.BARCODE = task.TASK_BOXBARCODE;
  719. matureRoom.MatureRoomNo = converywrite.Remark;
  720. matureRoom.MatureRoomName = matureRoom.MatureRoomNo == "1509" ? "B" : "A";
  721. matureRoom.InMatureRoomDate = db.GetDate();
  722. matureRoom.CurrentMatureNum = 1;
  723. matureRoom.MatureNum = task.MatureNum.GetValueOrDefault();
  724. if (db.Insertable(matureRoom).ExecuteCommand() <= 0)
  725. {
  726. throw new Exception(string.Format("任务[{0}]进入熟化房添加熟化房条码[{1}]进入队列失败。", task.TASK_NO, task.TASK_BOXBARCODE));
  727. }
  728. }
  729. else if (matureRoomItem.CurrentMatureNum >= matureRoomItem.MatureNum)
  730. {
  731. throw new Exception(string.Format("任务[{0}]条码[{1}]进入熟化房次数不正确,请检查问题。", task.TASK_NO, task.TASK_BOXBARCODE));
  732. }
  733. else
  734. {
  735. int updatecount = db.Updateable<WCS_TASK>(it => new WCS_TASK()
  736. {
  737. TASK_WKSTATUS = wkstatus,
  738. TASK_POSIDCUR = converywrite.Remark,
  739. TASK_POSIDNEXT = converywrite.Remark,
  740. TASK_EDITUSERNO = "WCS",
  741. TASK_EDITDATETIME = DateTime.Now
  742. })
  743. .Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  744. if (updatecount <= 0)
  745. {
  746. throw new Exception(string.Format("任务[{0}]进入熟化房确认修改任务信息失败。", task.TASK_NO));
  747. }
  748. int matureNum = matureRoomItem.CurrentMatureNum + 1;
  749. DateTime lastdt = db.GetDate();
  750. int updateMature = db.Updateable<MatureRoomCache>(it => new MatureRoomCache()
  751. {
  752. CurrentMatureNum = matureNum,
  753. InMatureRoomDate = lastdt,
  754. Remark = ""
  755. })
  756. .Where(it => it.BARCODE == task.TASK_BOXBARCODE).ExecuteCommand();
  757. if (updateMature <= 0)
  758. {
  759. throw new Exception(string.Format("任务[{0}]进入熟化房确认修改熟化次数信息失败。", task.TASK_NO));
  760. }
  761. }
  762. string msg = string.Format("任务[{0}]已从输送线[{1}]进入熟化房[{2}]中", converywrite.Remark_TaskNo, converywrite.ConveyorNo, converywrite.Remark);
  763. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, converywrite.Remark, msg);
  764. ConfirmTask(converySignal, converywrite);
  765. });
  766. if (!string.IsNullOrWhiteSpace(result))
  767. {
  768. throw new Exception(string.Format("任务[{0}]输送机[{1}]执行失败,原因:[{1}]", converywrite.Remark_TaskNo, converywrite.ConveyorNo, result));
  769. }
  770. }
  771. else
  772. {
  773. WriteTaskToBuffer(converywrite);
  774. }
  775. }
  776. /// <summary>
  777. /// 写入任务信息到输送机
  778. /// </summary>
  779. /// <param name="converySignal"></param>
  780. /// <param name="converywrite"></param>
  781. /// <param name="isNotTask"></param>
  782. public void WriteInfoToConvMRoom(ConvSignal converySignal, WCSWriteToConveyorSignal converywrite)
  783. {
  784. if (converySignal.DB520_Tasknum == converywrite.Tasknum &&
  785. converySignal.DB520_Goodscode == converywrite.Goodscode &&
  786. converySignal.DB520_Goodstype == converywrite.Goodstype &&
  787. converySignal.DB520_Goodssize == converywrite.Goodssize &&
  788. converySignal.DB520_Goodsstart == converywrite.Goodsstart &&
  789. converySignal.DB520_Goodsend == converywrite.Goodsend &&
  790. converySignal.DB520_Notask == converywrite.Notask &&
  791. converySignal.DB520_TaskDelete == converywrite.TaskDelete &&
  792. converySignal.DB520_RollerTurn == converywrite.UpMatRequest &&
  793. converySignal.DB520_Res01 == converywrite.Res01 &&
  794. converySignal.DB520_Res02 == converywrite.Res02 &&
  795. converySignal.DB520_Res03 == converywrite.Res03 &&
  796. converySignal.DB520_Res04 == converywrite.Res04)
  797. {
  798. string result = TryCachHelper.TryTranExecute((db) =>
  799. {
  800. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == converywrite.Tasknum);
  801. int updatecount = db.Updateable<WCS_TASK>(it => new WCS_TASK()
  802. {
  803. TASK_WKSTATUS = (int)WkStatus.输送机执行,
  804. TASK_POSIDNEXT = converywrite.Goodsend.ToString(),
  805. //TASK_ITEM5 = converywrite.Goodsstart.ToString(),
  806. TASK_EDITUSERNO = "WCS",
  807. TASK_EDITDATETIME = DateTime.Now
  808. })
  809. .Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  810. if (updatecount <= 0)
  811. {
  812. throw new Exception(string.Format("任务[{0}]出熟化房确认修改任务信息失败。", task.TASK_NO));
  813. }
  814. var matureroom = db.Queryable<MatureRoomCache>().Single(v => v.BARCODE == task.TASK_BOXBARCODE);
  815. if (matureroom == null)
  816. {
  817. throw new Exception(string.Format("任务[{0}]条码[{1}]出熟化房确认修改任务信息失败,队列中未找到该条码", task.TASK_NO));
  818. }
  819. else if (matureroom.CurrentMatureNum >= matureroom.MatureNum)
  820. {
  821. var matureRoom_dis = new MatureRoomCache_Dis();
  822. matureRoom_dis.BARCODE = task.TASK_BOXBARCODE;
  823. matureRoom_dis.MatureRoomNo = matureroom.MatureRoomNo;
  824. matureRoom_dis.MatureRoomName = matureroom.MatureRoomName;
  825. matureRoom_dis.InMatureRoomDate = matureroom.InMatureRoomDate;
  826. matureRoom_dis.OutMatureRoomDate = db.GetDate();
  827. matureRoom_dis.CurrentMatureNum = matureroom.CurrentMatureNum;
  828. matureRoom_dis.MatureNum = matureroom.MatureNum;
  829. if (db.Deleteable(matureroom).ExecuteCommand() <= 0)
  830. {
  831. throw new Exception(string.Format("任务[{0}]出熟化房删除熟化房条码[{1}]失败。", task.TASK_NO, task.TASK_BOXBARCODE));
  832. }
  833. if (db.Insertable(matureRoom_dis).ExecuteCommand() <= 0)
  834. {
  835. throw new Exception(string.Format("任务[{0}]出熟化房添加熟化房条码[{1}]到历史队列失败。", task.TASK_NO, task.TASK_BOXBARCODE));
  836. }
  837. }
  838. else
  839. {
  840. int updateMatureRoom = db.Updateable<MatureRoomCache>(it => new MatureRoomCache()
  841. {
  842. Remark = "1"
  843. })
  844. .Where(it => it.BARCODE == task.TASK_BOXBARCODE).ExecuteCommand();
  845. if (updateMatureRoom <= 0)
  846. {
  847. throw new Exception(string.Format("任务[{0}]出熟化房确认修改熟化房信息失败。", task.TASK_NO));
  848. }
  849. }
  850. string msg = string.Format("任务已下发给输送机[{0}]执行,起点地址[{1}]目标地址[{2}]", converywrite.ConveyorNo, converywrite.Goodsstart, converywrite.Goodsend);
  851. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, converywrite.Goodsend.ToString(), msg);
  852. ConfirmTask(converySignal, converywrite);
  853. });
  854. if (!string.IsNullOrWhiteSpace(result))
  855. {
  856. throw new Exception(string.Format("任务[{0}]输送机[{1}]执行失败,原因:[{1}]", converywrite.Tasknum, converywrite.ConveyorNo, result));
  857. }
  858. }
  859. else
  860. {
  861. WriteTaskToBuffer(converywrite);
  862. }
  863. }
  864. #endregion 功能实现
  865. }
  866. }