ConveyorPlc02.cs 85 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  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.WMSWorkflow;
  11. namespace WCS.Workflow
  12. {
  13. /// <summary>
  14. /// 输送线02PLC
  15. /// </summary>
  16. public class ConveyorPlc02: Base_Conv
  17. {
  18. #region 只读变量
  19. #region 电脑、液晶拆解线
  20. private readonly string Conv_2002 = "2002";
  21. private readonly string Conv_2004 = "2004";
  22. private readonly string Conv_2006 = "2006";
  23. private readonly string Conv_2008 = "2008";
  24. private readonly string Conv_2011 = "2011";
  25. private readonly string Conv_2012 = "2012";
  26. private readonly string Conv_2013 = "2013";
  27. private readonly string Conv_2014 = "2014";
  28. private readonly string Conv_2015 = "2015";
  29. private readonly string Conv_2016 = "2016";
  30. private readonly string Conv_2017 = "2017";
  31. private readonly string Conv_2018 = "2018";
  32. #endregion;
  33. #region 电视拆解线
  34. private readonly string Conv_2021 = "2021";
  35. private readonly string Conv_2022 = "2022";
  36. private readonly string Conv_2023 = "2023";
  37. private readonly string Conv_2024 = "2024";
  38. private readonly string Conv_2025 = "2025";
  39. private readonly string Conv_2026 = "2026";
  40. private readonly string Conv_2027 = "2027";
  41. private readonly string Conv_2028 = "2028";
  42. private readonly string Conv_2092 = "2092";
  43. private readonly string Conv_2094 = "2094";
  44. private readonly string Conv_2096 = "2096";
  45. private readonly string Conv_2098 = "2098";
  46. private readonly string Conv_2100 = "2100";
  47. #endregion;
  48. #region 洗衣机拆解线
  49. private readonly string Conv_2212 = "2212";
  50. private readonly string Conv_2214 = "2214";
  51. private readonly string Conv_2216 = "2216";
  52. private readonly string Conv_2218 = "2218";
  53. private readonly string Conv_2220 = "2220";
  54. private readonly string Conv_2174 = "2174";
  55. private readonly string Conv_2176 = "2176";
  56. private readonly string Conv_2131 = "2131";
  57. private readonly string Conv_2132 = "2132";
  58. private readonly string Conv_2133 = "2133";
  59. private readonly string Conv_2134 = "2134";
  60. private readonly string Conv_2138 = "2138";
  61. private readonly string Conv_2139 = "2139";
  62. private readonly string Conv_2140 = "2140";
  63. private readonly string Conv_2141 = "2141";
  64. private readonly string Conv_2142 = "2142";
  65. #endregion;
  66. #region 空调拆解线
  67. private readonly string Conv_2166 = "2166";
  68. private readonly string Conv_2168 = "2168";
  69. private readonly string Conv_2170 = "2170";
  70. private readonly string Conv_2172 = "2172";
  71. private readonly string Conv_2111 = "2111";
  72. private readonly string Conv_2112 = "2112";
  73. private readonly string Conv_2113 = "2113";
  74. private readonly string Conv_2114 = "2114";
  75. private readonly string Conv_2116 = "2116";
  76. private readonly string Conv_2120 = "2120";
  77. private readonly string Conv_2121 = "2121";
  78. private readonly string Conv_2122 = "2122";
  79. private readonly string Conv_2123 = "2123";
  80. private readonly string Conv_2124 = "2124";
  81. #endregion;
  82. #region 堆垛机出口输送线
  83. private readonly string Conv_2302 = "2302";
  84. private readonly string Conv_2306 = "2306";
  85. private readonly string Conv_2310 = "2310";
  86. private readonly string Conv_2314 = "2314";
  87. private readonly string Conv_2318 = "2318";
  88. private readonly string Conv_2322 = "2322";
  89. #endregion;
  90. #region 堆垛机一楼入库台
  91. private readonly string Conv_2380 = "2380";
  92. private readonly string Conv_2390 = "2390";
  93. #endregion;
  94. #region 堆垛机一楼出库台
  95. //异常口
  96. private readonly string Conv_2381 = "2381";
  97. private readonly string Conv_2391 = "2391";
  98. #endregion;
  99. #region 震动输送机
  100. private readonly string Conv_2065 = "2065";
  101. private readonly string Conv_2067 = "2067";
  102. private readonly string Conv_2069 = "2069";
  103. private readonly string Conv_2071 = "2071";
  104. private readonly string Conv_2073 = "2073";
  105. private readonly string Conv_2075 = "2075";
  106. #endregion;
  107. #region 称重输送线
  108. private readonly string Conv_Weigh_2235 = "2235";
  109. private readonly string Conv_Weigh_2336 = "2336";
  110. private readonly string Conv_Weigh_2036 = "2036";
  111. private readonly string Conv_Weigh_2034 = "2034";
  112. private readonly string Conv_Weigh_2056 = "2056";
  113. private readonly string Conv_Weigh_2344 = "2344";
  114. private readonly string Conv_Weigh_2157 = "2157";
  115. private readonly string Conv_Weigh_2155 = "2155";
  116. private readonly string Conv_Weigh_2181 = "2181";
  117. #endregion;
  118. #region 扫描输送线
  119. private readonly string Conv_2246 = "2246";
  120. private readonly string Conv_2235 = "2235";
  121. public readonly string Conv_2238 = "2238";
  122. private readonly string Conv_2359 = "2359";
  123. #endregion;
  124. #region 穿梭车
  125. private readonly string Rgv2019 = "rgv2019";
  126. private readonly string Rgv2029 = "rgv2029";
  127. private readonly string Rgv2044 = "rgv2044";
  128. private readonly string Rgv2062 = "rgv2062";
  129. private readonly string Rgv2081 = "rgv2081";
  130. private readonly string Rgv2201 = "rgv2201";
  131. private readonly string Rgv2189 = "rgv2189";
  132. private readonly string Rgv2163 = "rgv2163";
  133. private readonly string Rgv2143 = "rgv2143";
  134. private readonly string Rgv2125 = "rgv2125";
  135. #endregion;
  136. //打铁缓存位呼叫空托盘
  137. private readonly string Conv_2047 = "2047";
  138. private readonly string Conv_2436 = "2436";
  139. private readonly string Conv_2136 = "2136";
  140. private readonly string Conv_2137 = "2137";
  141. //异常口
  142. private readonly string Conv_2046 = "2046";
  143. //异常口
  144. private readonly string Conv_2437 = "2437";
  145. private readonly string Conv_2184 = "2184";
  146. private readonly string Conv_2151 = "2151";
  147. private readonly string ROUTE_INOUTTYPE_IN = "in";
  148. private readonly string ROUTE_INOUTTYPE_OUT = "out";
  149. private readonly string Conv_2360 = "2360";
  150. //发货口
  151. private readonly string Conv_2361 = "2361";
  152. private readonly string Conv_2365 = "2365";
  153. //发货口
  154. private readonly string Conv_2364 = "2364";
  155. private readonly string Conv_2051 = "2051";
  156. private readonly string Out_Area_D = "Out_Area_D";
  157. #endregion;
  158. #region 构造函数
  159. public ConveyorPlc02() : base()
  160. {
  161. }
  162. #endregion;
  163. #region 重载实现
  164. /// <summary>
  165. /// 调度PLC执行任务
  166. /// </summary>
  167. public override void Run()
  168. {
  169. //刷新任务数据
  170. WCSWorkflow.RefreshData();
  171. //一楼入库台申请(入库/搬运)
  172. Conv_FirstFloorExeTask();
  173. //二楼环线扫码执行任务
  174. Conv_ScanBarCodeExeTask();
  175. //二楼堆垛机出口任务执行
  176. SrmOutConvExeTask();
  177. //RGV超高退回报警超高,WCS确认清除
  178. ConvCancelTask();
  179. //出口任务完成
  180. ConveyorTaskFinish();
  181. //WCS写入输送线执行任务
  182. ConveyorWriteTaskExecute();
  183. //生产线空框呼叫
  184. ThreadHelper.TaskThread(ProLineCallEmptyOutTask);
  185. //生产线称重
  186. ThreadHelper.TaskThread(ProLineWeigh);
  187. //生产线物料入库请求
  188. ThreadHelper.TaskThread(ProLineInTaskRequest);
  189. //RGV对接的输送线自动执行的任务状态修改
  190. ThreadHelper.TaskThread(ConveyorTaskExecute);
  191. //生产线异常口申请,任务变更目标地址
  192. ThreadHelper.TaskThread(ExecConvRequest);
  193. }
  194. #endregion;
  195. #region 多线程调用
  196. private static int _proLineWeigh = 0;
  197. private void ProLineWeigh()
  198. {
  199. if (Interlocked.Exchange(ref _proLineWeigh, 1) == 0)
  200. {
  201. try
  202. {
  203. int weight = 70000;//克
  204. List<string> convNoSet = new List<string>();
  205. convNoSet.Add(Conv_Weigh_2336);
  206. convNoSet.Add(Conv_Weigh_2034);
  207. convNoSet.Add(Conv_Weigh_2036);
  208. convNoSet.Add(Conv_Weigh_2056);
  209. convNoSet.Add(Conv_Weigh_2344);
  210. convNoSet.Add(Conv_Weigh_2157);
  211. convNoSet.Add(Conv_Weigh_2155);
  212. convNoSet.Add(Conv_Weigh_2181);
  213. foreach (var convNo in convNoSet)
  214. {
  215. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo).EquSignal_Conv;
  216. //if (equ_conv.DB523_Fault) continue;
  217. if (!equ_conv.CvDB51_PH_Status) continue;
  218. if (equ_conv.DB521_Res04 <= 2000) continue;
  219. if (equ_conv.DB521_Res04 < weight)
  220. {
  221. var msg = string.Format("输送机[{0}]处称重异常,当前重量[{1}]克,铁托盘预估重量[{2}]克以上。", convNo, equ_conv.DB521_Res04, weight);
  222. LogMessageHelper.RecordLogMessage(msg);
  223. continue;
  224. }
  225. var tasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回).ToList();
  226. var task = tasks.FirstOrDefault(v => v.TASK_POSIDCUR == convNo &&
  227. string.IsNullOrWhiteSpace(v.TASK_ITEM3) &&
  228. v.TASK_WKSTATUS < 99 && v.TASK_WKSTATUS != 7 && v.TASK_WKSTATUS != 4);
  229. if (task == null) return;
  230. var param = new GetWeightParam();
  231. param.WMSTaskNum = task.TASK_WMSNO;
  232. param.Weight = equ_conv.DB521_Res04;
  233. BaseWorkflow.GetWeight(param);
  234. }
  235. }
  236. catch (Exception ex)
  237. {
  238. LogMessageHelper.RecordLogMessage(ex);
  239. }
  240. finally
  241. {
  242. Interlocked.Exchange(ref _proLineWeigh, 0);
  243. }
  244. }
  245. }
  246. private static int _roLineInTaskRequest = 0;
  247. private void ProLineInTaskRequest()
  248. {
  249. if (Interlocked.Exchange(ref _roLineInTaskRequest, 1) == 0)
  250. {
  251. try
  252. {
  253. List<string> convNoSet = new List<string>();
  254. #region 生产线电视,电脑
  255. convNoSet.Add(Conv_2092);
  256. convNoSet.Add(Conv_2094);
  257. convNoSet.Add(Conv_2096);
  258. convNoSet.Add(Conv_2098);
  259. convNoSet.Add(Conv_2100);
  260. convNoSet.Add(Conv_2021);
  261. convNoSet.Add(Conv_2022);
  262. convNoSet.Add(Conv_2023);
  263. convNoSet.Add(Conv_2024);
  264. convNoSet.Add(Conv_2025);
  265. convNoSet.Add(Conv_2026);
  266. convNoSet.Add(Conv_2027);
  267. convNoSet.Add(Conv_2028);
  268. convNoSet.Add(Conv_2002);
  269. convNoSet.Add(Conv_2004);
  270. convNoSet.Add(Conv_2006);
  271. convNoSet.Add(Conv_2008);
  272. convNoSet.Add(Conv_2011);
  273. convNoSet.Add(Conv_2012);
  274. convNoSet.Add(Conv_2013);
  275. convNoSet.Add(Conv_2014);
  276. convNoSet.Add(Conv_2015);
  277. convNoSet.Add(Conv_2016);
  278. convNoSet.Add(Conv_2017);
  279. convNoSet.Add(Conv_2018);
  280. convNoSet.Add(Conv_2065);
  281. convNoSet.Add(Conv_2067);
  282. convNoSet.Add(Conv_2069);
  283. convNoSet.Add(Conv_2071);
  284. convNoSet.Add(Conv_2073);
  285. convNoSet.Add(Conv_2075);
  286. #endregion;
  287. #region 空调,洗衣机
  288. convNoSet.Add(Conv_2111);
  289. convNoSet.Add(Conv_2112);
  290. convNoSet.Add(Conv_2113);
  291. convNoSet.Add(Conv_2114);
  292. convNoSet.Add(Conv_2116);
  293. convNoSet.Add(Conv_2120);
  294. convNoSet.Add(Conv_2121);
  295. convNoSet.Add(Conv_2122);
  296. convNoSet.Add(Conv_2123);
  297. convNoSet.Add(Conv_2124);
  298. convNoSet.Add(Conv_2131);
  299. convNoSet.Add(Conv_2132);
  300. convNoSet.Add(Conv_2133);
  301. convNoSet.Add(Conv_2134);
  302. convNoSet.Add(Conv_2138);
  303. convNoSet.Add(Conv_2139);
  304. convNoSet.Add(Conv_2140);
  305. convNoSet.Add(Conv_2141);
  306. convNoSet.Add(Conv_2142);
  307. convNoSet.Add(Conv_2166);
  308. convNoSet.Add(Conv_2168);
  309. convNoSet.Add(Conv_2170);
  310. convNoSet.Add(Conv_2172);
  311. convNoSet.Add(Conv_2174);
  312. convNoSet.Add(Conv_2176);
  313. convNoSet.Add(Conv_2212);
  314. convNoSet.Add(Conv_2214);
  315. convNoSet.Add(Conv_2216);
  316. convNoSet.Add(Conv_2218);
  317. convNoSet.Add(Conv_2220);
  318. convNoSet.Add(Conv_2436);//打铁
  319. convNoSet.Add(Conv_2137);//打铁
  320. #endregion;
  321. CreateInTaskByRequest(convNoSet);
  322. }
  323. catch (Exception ex)
  324. {
  325. Log4netHelper.Logger_Error.ErrorFormat(ex.ToString());
  326. }
  327. finally
  328. {
  329. Interlocked.Exchange(ref _roLineInTaskRequest, 0);
  330. }
  331. }
  332. }
  333. private static int _conveyorTaskExecute = 0;
  334. private void ConveyorTaskExecute()
  335. {
  336. if (Interlocked.Exchange(ref _conveyorTaskExecute, 1) == 0)
  337. {
  338. try
  339. {
  340. //List<string> convSet = new List<string>() { "2033", "2061", "2041", "2038", "2088", "2246", "2188", "2208", "2160", "2154", "2159", "2153", "2151" };
  341. foreach (var convNo in AppSettingsHelper.AppSettings.TaskStatusUpdateConNoList)
  342. {
  343. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDCUR == convNo &&
  344. (v.TASK_WKSTATUS == (int)WkStatus.RGV完成 ||
  345. v.TASK_WKSTATUS == (int)WkStatus.RGV下料执行));
  346. if (task == null) continue;
  347. if (convNo == task.TASK_ITEM4) continue;
  348. task.TASK_WKSTATUS = (int)WkStatus.输送机执行;
  349. task.TASK_EDITUSERNO = "wcs";
  350. task.TASK_POSIDNEXT = task.TASK_POSIDCUR;
  351. task.TASK_EDITDATETIME = DateTime.Now;
  352. SugarBase.DB.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  353. }
  354. }
  355. catch (Exception ex)
  356. {
  357. LogMessageHelper.RecordLogMessage(ex);
  358. }
  359. finally
  360. {
  361. Interlocked.Exchange(ref _conveyorTaskExecute, 0);
  362. }
  363. }
  364. }
  365. private static int _execConvRequest = 0;
  366. private void ExecConvRequest()
  367. {
  368. if (Interlocked.Exchange(ref _execConvRequest, 1) == 0)
  369. {
  370. try
  371. {
  372. ExecConvRequest(Conv_2046);
  373. ExecConvRequest(Conv_2437);
  374. }
  375. catch (Exception ex)
  376. {
  377. LogMessageHelper.RecordLogMessage(ex);
  378. }
  379. finally
  380. {
  381. Interlocked.Exchange(ref _execConvRequest, 0);
  382. }
  383. }
  384. }
  385. private static int _proLineCallEmptyOutTask = 0;
  386. private void ProLineCallEmptyOutTask()
  387. {
  388. if (Interlocked.Exchange(ref _proLineCallEmptyOutTask, 1) == 0)
  389. {
  390. try
  391. {
  392. WCSWorkflow.RefreshData();
  393. List<string> OutPos = new List<string>();
  394. //电视面板、面板塑料、PS、含汞背光灯
  395. OutPos.Add(Conv_2092);
  396. OutPos.Add(Conv_2094);
  397. OutPos.Add(Conv_2096);
  398. OutPos.Add(Conv_2098);
  399. OutPos.Add(Conv_2100);
  400. //电路板、面板塑料(纸)、LED灯、扬声器
  401. OutPos.Add(Conv_2021);
  402. OutPos.Add(Conv_2022);
  403. OutPos.Add(Conv_2023);
  404. OutPos.Add(Conv_2024);
  405. OutPos.Add(Conv_2025);
  406. OutPos.Add(Conv_2026);
  407. OutPos.Add(Conv_2027);
  408. OutPos.Add(Conv_2028);
  409. //电线电缆、电子枪、防静电线、螺丝
  410. OutPos.Add(Conv_2011);
  411. OutPos.Add(Conv_2012);
  412. OutPos.Add(Conv_2013);
  413. OutPos.Add(Conv_2014);
  414. OutPos.Add(Conv_2015);
  415. OutPos.Add(Conv_2016);
  416. OutPos.Add(Conv_2017);
  417. OutPos.Add(Conv_2018);
  418. //屏玻璃
  419. OutPos.Add(Conv_2002);
  420. OutPos.Add(Conv_2006);
  421. //锥玻璃
  422. OutPos.Add(Conv_2004);
  423. OutPos.Add(Conv_2008);
  424. //震动输送机
  425. //CallEmptyOutTask(Conv_2065);
  426. //CallEmptyOutTask(Conv_2067);
  427. //CallEmptyOutTask(Conv_2069);
  428. //CallEmptyOutTask(Conv_2071);
  429. //CallEmptyOutTask(Conv_2073);
  430. //CallEmptyOutTask(Conv_2075);
  431. //打铁缓存位呼叫空托盘
  432. Conv_RequestCarry(Conv_2047, Conv_2436);
  433. Conv_RequestCarry(Conv_2136, Conv_2137);
  434. //打铁缓存位呼叫空托盘
  435. OutPos.Add(Conv_2047);
  436. OutPos.Add(Conv_2136);
  437. //空调产物入库位置呼叫空箱
  438. OutPos.Add(Conv_2111);
  439. OutPos.Add(Conv_2112);
  440. OutPos.Add(Conv_2113);
  441. OutPos.Add(Conv_2114);
  442. OutPos.Add(Conv_2116);
  443. //OutPos.Add(Conv_2120);
  444. OutPos.Add(Conv_2121);
  445. OutPos.Add(Conv_2122);
  446. OutPos.Add(Conv_2123);
  447. OutPos.Add(Conv_2124);
  448. //洗衣机产物入库位置呼叫空箱
  449. OutPos.Add(Conv_2131);
  450. OutPos.Add(Conv_2132);
  451. OutPos.Add(Conv_2133);
  452. OutPos.Add(Conv_2134);
  453. //OutPos.Add(Conv_2138);
  454. OutPos.Add(Conv_2139);
  455. OutPos.Add(Conv_2140);
  456. OutPos.Add(Conv_2141);
  457. OutPos.Add(Conv_2142);
  458. //震动输送机
  459. //CallEmptyOutTask(Conv_2166);
  460. //CallEmptyOutTask(Conv_2168);
  461. //CallEmptyOutTask(Conv_2170);
  462. //CallEmptyOutTask(Conv_2172);
  463. //CallEmptyOutTask(Conv_2174);
  464. //CallEmptyOutTask(Conv_2176);
  465. ////二楼产物
  466. OutPos.Add(Conv_2212);
  467. OutPos.Add(Conv_2214);
  468. OutPos.Add(Conv_2216);
  469. OutPos.Add(Conv_2218);
  470. OutPos.Add(Conv_2220);
  471. foreach (var convNo in OutPos)
  472. {
  473. if (Current.WCS_TASKTIMEPOINTSet.Any(v => v.F_NO == convNo)) continue;
  474. CallEmptyOutTask(convNo);
  475. }
  476. }
  477. catch (Exception ex)
  478. {
  479. LogMessageHelper.RecordLogMessage(ex);
  480. }
  481. finally
  482. {
  483. Interlocked.Exchange(ref _proLineCallEmptyOutTask, 0);
  484. }
  485. }
  486. }
  487. #endregion;
  488. #region 模块调用
  489. private void Conv_FirstFloorExeTask()
  490. {
  491. Conv_NotScannExeTask(Conv_2380, string.Empty, true);
  492. Conv_NotScannExeTask(Conv_2390, string.Empty, true);
  493. }
  494. private void Conv_ScanBarCodeExeTask()
  495. {
  496. Conv_Scanning_2246(Conv_2246, Conv_2235);
  497. Conv_Scanning_2235(Conv_2235, Conv_2381, "0", 1);
  498. Conv_Scanning_2238(Conv_2238, Conv_2246);
  499. Conv_Scanning_2359(Conv_2359);
  500. }
  501. private void SrmOutConvExeTask()
  502. {
  503. SrmOutConvExeTask(PlcName, Conv_2302);
  504. SrmOutConvExeTask(PlcName, Conv_2306);
  505. SrmOutConvExeTask(PlcName, Conv_2310);
  506. SrmOutConvExeTask(PlcName, Conv_2314);
  507. SrmOutConvExeTask(PlcName, Conv_2318);
  508. SrmOutConvExeTask(PlcName, Conv_2322);
  509. }
  510. /// <summary>
  511. /// 入口输送线超高报警取消任务(震动输送机和2436超高变更目标地址到异常口)
  512. /// </summary>
  513. private void ConvCancelTask()
  514. {
  515. //震动输送机超高
  516. Conv_H_OutsideUpdateTaskEndAddress(Conv_Weigh_2056, Conv_2046);
  517. #region 电视,电脑
  518. List<string> list_rgv2019 = new List<string>() { Conv_2002, Conv_2004, Conv_2006, Conv_2008, Conv_2011, Conv_2012, Conv_2013, Conv_2014, Conv_2015, Conv_2016, Conv_2017, Conv_2018 };
  519. foreach (var item in list_rgv2019)
  520. {
  521. ConvSuperHighAlaramResetTask(Rgv2019, item);
  522. }
  523. List<string> list_rgv2029 = new List<string>() { Conv_2021, Conv_2022, Conv_2023, Conv_2024, Conv_2025, Conv_2026, Conv_2027, Conv_2028 };
  524. foreach (var item in list_rgv2029)
  525. {
  526. ConvSuperHighAlaramResetTask(Rgv2029, item);
  527. }
  528. List<string> list_rgv2044 = new List<string>() { Conv_2046, Conv_2436 };
  529. foreach (var item in list_rgv2044)
  530. {
  531. ConvSuperHighAlaramResetTask(Rgv2044, item);
  532. }
  533. List<string> list_rgv2062 = new List<string>() { Conv_2065, Conv_2067, Conv_2069, Conv_2071, Conv_2073, Conv_2075 };
  534. foreach (var item in list_rgv2062)
  535. {
  536. ConvSuperHighAlaramResetTask(Rgv2062, item);
  537. }
  538. List<string> list_rgv2081 = new List<string>() { Conv_2092, Conv_2094, Conv_2096, Conv_2098, Conv_2100 };
  539. foreach (var item in list_rgv2081)
  540. {
  541. ConvSuperHighAlaramResetTask(Rgv2081, item);
  542. }
  543. #endregion;
  544. #region 空调,洗衣机
  545. List<string> list_rgv2125 = new List<string>() { Conv_2111, Conv_2112, Conv_2113, Conv_2114, Conv_2116, Conv_2120, Conv_2121, Conv_2122, Conv_2123, Conv_2124 };
  546. foreach (var item in list_rgv2125)
  547. {
  548. ConvSuperHighAlaramResetTask(Rgv2125, item);
  549. }
  550. List<string> list_rgv2143 = new List<string>() { Conv_2131, Conv_2132, Conv_2133, Conv_2134, Conv_2137, Conv_2138, Conv_2139, Conv_2140, Conv_2141, Conv_2142 };
  551. foreach (var item in list_rgv2143)
  552. {
  553. ConvSuperHighAlaramResetTask(Rgv2143, item);
  554. }
  555. List<string> list_rgv2163 = new List<string>() { Conv_2166, Conv_2168, Conv_2170, Conv_2174, Conv_2437 };
  556. foreach (var item in list_rgv2163)
  557. {
  558. ConvSuperHighAlaramResetTask(Rgv2163, item);
  559. }
  560. List<string> list_rgv2189 = new List<string>() { Conv_2174, Conv_2176 };
  561. foreach (var item in list_rgv2189)
  562. {
  563. ConvSuperHighAlaramResetTask(Rgv2189, item);
  564. }
  565. List<string> list_rgv2201 = new List<string>() { Conv_2212, Conv_2214, Conv_2216, Conv_2218, Conv_2220 };
  566. foreach (var item in list_rgv2201)
  567. {
  568. ConvSuperHighAlaramResetTask(Rgv2201, item);
  569. }
  570. #endregion;
  571. }
  572. private void ConveyorTaskFinish()
  573. {
  574. //成品测试出口
  575. ConveyorTaskFinish(PlcName,Conv_2238);
  576. ConveyorTaskFinish(PlcName,Conv_2246);
  577. #region 生产线输送线任务完成 A区
  578. ConveyorTaskFinish(PlcName, Conv_2092);
  579. ConveyorTaskFinish(PlcName, Conv_2094);
  580. ConveyorTaskFinish(PlcName, Conv_2096);
  581. ConveyorTaskFinish(PlcName, Conv_2098);
  582. ConveyorTaskFinish(PlcName, Conv_2100);
  583. ConveyorTaskFinish(PlcName, Conv_2021);
  584. ConveyorTaskFinish(PlcName, Conv_2022);
  585. ConveyorTaskFinish(PlcName, Conv_2023);
  586. ConveyorTaskFinish(PlcName, Conv_2024);
  587. ConveyorTaskFinish(PlcName, Conv_2025);
  588. ConveyorTaskFinish(PlcName, Conv_2026);
  589. ConveyorTaskFinish(PlcName, Conv_2027);
  590. ConveyorTaskFinish(PlcName, Conv_2028);
  591. ConveyorTaskFinish(PlcName, Conv_2011);
  592. ConveyorTaskFinish(PlcName, Conv_2012);
  593. ConveyorTaskFinish(PlcName, Conv_2013);
  594. ConveyorTaskFinish(PlcName, Conv_2014);
  595. ConveyorTaskFinish(PlcName, Conv_2015);
  596. ConveyorTaskFinish(PlcName, Conv_2016);
  597. ConveyorTaskFinish(PlcName, Conv_2017);
  598. ConveyorTaskFinish(PlcName, Conv_2018);
  599. ConveyorTaskFinish(PlcName, Conv_2002);
  600. ConveyorTaskFinish(PlcName, Conv_2004);
  601. ConveyorTaskFinish(PlcName, Conv_2006);
  602. ConveyorTaskFinish(PlcName, Conv_2008);
  603. ConveyorTaskFinish(PlcName, Conv_2065);
  604. ConveyorTaskFinish(PlcName, Conv_2067);
  605. ConveyorTaskFinish(PlcName, Conv_2069);
  606. ConveyorTaskFinish(PlcName, Conv_2071);
  607. ConveyorTaskFinish(PlcName, Conv_2073);
  608. ConveyorTaskFinish(PlcName, Conv_2075);
  609. //ConveyorTaskFinish(plcName, "2100");
  610. #endregion;
  611. #region 生产线输送线任务完成 B区
  612. ConveyorTaskFinish(PlcName, Conv_2212);
  613. ConveyorTaskFinish(PlcName, Conv_2214);
  614. ConveyorTaskFinish(PlcName, Conv_2216);
  615. ConveyorTaskFinish(PlcName, Conv_2218);
  616. ConveyorTaskFinish(PlcName, Conv_2220);
  617. ConveyorTaskFinish(PlcName, Conv_2166);
  618. ConveyorTaskFinish(PlcName, Conv_2168);
  619. ConveyorTaskFinish(PlcName, Conv_2170);
  620. ConveyorTaskFinish(PlcName, Conv_2172);
  621. ConveyorTaskFinish(PlcName, Conv_2174);
  622. ConveyorTaskFinish(PlcName, Conv_2176);
  623. ConveyorTaskFinish(PlcName, Conv_2111);
  624. ConveyorTaskFinish(PlcName, Conv_2112);
  625. ConveyorTaskFinish(PlcName, Conv_2113);
  626. ConveyorTaskFinish(PlcName, Conv_2114);
  627. ConveyorTaskFinish(PlcName, Conv_2116);
  628. ConveyorTaskFinish(PlcName, Conv_2120);
  629. ConveyorTaskFinish(PlcName, Conv_2121);
  630. ConveyorTaskFinish(PlcName, Conv_2122);
  631. ConveyorTaskFinish(PlcName, Conv_2123);
  632. ConveyorTaskFinish(PlcName, Conv_2124);
  633. ConveyorTaskFinish(PlcName, Conv_2131);
  634. ConveyorTaskFinish(PlcName, Conv_2132);
  635. ConveyorTaskFinish(PlcName, Conv_2133);
  636. ConveyorTaskFinish(PlcName, Conv_2134);
  637. ConveyorTaskFinish(PlcName, Conv_2137);
  638. ConveyorTaskFinish(PlcName, Conv_2138);
  639. ConveyorTaskFinish(PlcName, Conv_2139);
  640. ConveyorTaskFinish(PlcName, Conv_2140);
  641. ConveyorTaskFinish(PlcName, Conv_2141);
  642. ConveyorTaskFinish(PlcName, Conv_2142);
  643. ConveyorTaskFinish(PlcName, Conv_2436);
  644. #endregion;
  645. ConveyorTaskFinish(PlcName, Conv_2047);//打铁托盘缓存位完成
  646. ConveyorTaskFinish(PlcName, Conv_2136);//打铁托盘缓存位完成
  647. #region 发货口任务完成
  648. ThreadHelper.TaskThread(ConvTaskFinish);
  649. #endregion;
  650. }
  651. private void ConveyorWriteTaskExecute()
  652. {
  653. ConveyorWriteTaskExecute(Conv_2051);
  654. ConveyorWriteTaskExecute(Conv_Weigh_2056);
  655. ConveyorWriteTaskExecute(Conv_2184);
  656. ConveyorWriteTaskExecute(Conv_2151);
  657. }
  658. #endregion;
  659. #region 功能实现
  660. private void CreateInTaskByRequest(List<string> convNoSet)
  661. {
  662. WCSWorkflow.RefreshData();
  663. foreach (var convNo in convNoSet)
  664. {
  665. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo).EquSignal_Conv;
  666. if (equ_conv.DB523_Fault) continue;
  667. if (!equ_conv.CvDB51_PH_Status) continue;
  668. if (!equ_conv.DB521_Res01) continue;
  669. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDFROM == convNo);
  670. if (task == null || task.TASK_WKSTATUS >= 99)
  671. {
  672. var param = new GetInTaskParam();
  673. param.ContainerBarCode = string.Empty;
  674. param.ContainerType = 1;
  675. param.MatBarCode = string.Empty;
  676. param.WareHouseId = Current.Pvchouseputong;
  677. param.EquipmentNo = convNo;
  678. if (convNo == Conv_2120 || convNo == Conv_2138)
  679. {
  680. param.EndPostion = Conv_2381;
  681. }
  682. else
  683. {
  684. param.EndPostion = srm;
  685. }
  686. param.Memo2 = "2";
  687. task = BaseWorkflow.GetInTask(param);
  688. }
  689. else if (task.TASK_WKSTATUS <= 1)
  690. {
  691. task.TASK_WKSTATUS = (int)WkStatus.输送机执行;
  692. task.TASK_EDITUSERNO = "wcs";
  693. task.TASK_POSIDNEXT = task.TASK_POSIDCUR;
  694. task.TASK_EDITDATETIME = DateTime.Now;
  695. SugarBase.DB.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  696. }
  697. else if (convNo == Conv_2436 || convNo == Conv_2137)//打铁位置可以生成多个入库任务
  698. {
  699. var tasks = Current.TaskSet.Where(v => v.TASK_POSIDFROM == convNo);
  700. int count = 0;
  701. bool iscreatetask = true;
  702. foreach (var item in tasks)
  703. {
  704. count = SugarBase.DB.Queryable<WCS_TASK_DTL>().Count(v => v.PARENTID == item.TASK_NO);
  705. if (count < 3)
  706. {
  707. iscreatetask = false;
  708. break;
  709. }
  710. }
  711. if (iscreatetask)
  712. {
  713. var param = new GetInTaskParam();
  714. param.ContainerBarCode = string.Empty;
  715. param.ContainerType = 1;
  716. param.MatBarCode = string.Empty;
  717. param.WareHouseId = Current.Pvchouseputong;
  718. param.EquipmentNo = convNo;
  719. param.EndPostion = srm;
  720. param.Memo2 = "2";
  721. task = BaseWorkflow.GetInTask(param);
  722. }
  723. }
  724. }
  725. }
  726. /// <summary>
  727. /// 发货口任务完成
  728. /// </summary>
  729. private void ConvTaskFinish()
  730. {
  731. try
  732. {
  733. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  734. var conveyorTo = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_2359);
  735. var cs = conveyorTo.EquSignal_Conv;
  736. List<string> list = new List<string>();
  737. list.Add(Conv_2361);
  738. list.Add(Conv_2364);
  739. foreach (var convNo in list)
  740. {
  741. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDTO == convNo && v.TASK_POSIDNEXT == convNo);
  742. if (task!=null && task.TASK_NO != cs.DB521_Tasknum)
  743. {
  744. string result = TryCachHelper.TryExecute((db) =>
  745. {
  746. //修改任务的状态
  747. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  748. .Where(it => it.TASK_NO == task.TASK_NO)
  749. .ExecuteCommand();
  750. });
  751. }
  752. }
  753. }
  754. catch (Exception ex)
  755. {
  756. LogMessageHelper.RecordLogMessage(ex);
  757. }
  758. }
  759. private void CallEmptyOutTask(string posidTo)
  760. {
  761. if (!Current.TaskSet.Any(v => v.TASK_POSIDTO_SHORT == posidTo))
  762. {
  763. var conv = ConveyorHelper.GetConveyorSignal(PlcName, posidTo);
  764. if (conv.CvDB51_PH_Status) return;
  765. if (conv.DB521_Tasknum > 0) return;
  766. var param = new GetOutTaskParam();
  767. param.OutEndPostion = posidTo;
  768. if (posidTo == Conv_2047 || posidTo == Conv_2436 || posidTo == Conv_2136 || posidTo == Conv_2137)
  769. {
  770. param.OutType = 2;
  771. }
  772. else
  773. {
  774. param.OutType = 3;
  775. }
  776. param.WareHouseId = Current.Pvchouseputong;
  777. WCS_GetOutTask(param, posidTo);
  778. }
  779. }
  780. /// <summary>
  781. /// 输送线无扫码执行任务
  782. /// </summary>
  783. /// <param name="convNo">扫码输送线</param>
  784. /// <param name="exitNo">扫码异常退出口</param>
  785. /// <param name="endPosIsCurConv">目标地址是否当前输送线</param>
  786. private void Conv_NotScannExeTask(string convNo, string exitNo, bool endPosIsCurConv = false)
  787. {
  788. try
  789. {
  790. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  791. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  792. var cs = conveyor.EquSignal_Conv;
  793. if (cs.DB523_Fault) return;
  794. if (!cs.DB521_Request) return;
  795. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDFROM == convNo && v.TASK_POSIDCUR == convNo && v.TASK_POSIDNEXT == convNo && v.TASK_WKSTATUS <= 1);
  796. if (task == null)
  797. {
  798. throw new Exception(string.Format("输送线[{0}]有请求未查询到任务信息", convNo));
  799. //GetInTaskParam param = new GetInTaskParam();
  800. //param.ContainerBarCode = txtBarCode.Text.Trim();
  801. //param.ContainerType = 1;
  802. //param.MatBarCode = string.Empty;
  803. //param.WareHouseId = "producthouse";
  804. //param.EquipmentNo = "2390";
  805. //param.EndPostion = "2246";
  806. //CreateInTask(param);
  807. }
  808. var converywrite = new WCSWriteToConveyorSignal();
  809. converywrite.Plc = plc.Plc;
  810. converywrite.DBName = plc.WriteDBName;
  811. converywrite.ConveyorNo = convNo;
  812. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  813. converywrite.Tasknum = task.TASK_NO;
  814. converywrite.Goodscode = 0;//待定
  815. converywrite.Goodstype = 0;
  816. converywrite.Goodssize = 0;//待定
  817. converywrite.Goodsstart = Convert.ToInt32(convNo);
  818. if (endPosIsCurConv)
  819. {
  820. converywrite.Goodsend = converywrite.Goodsstart;
  821. }
  822. else
  823. {
  824. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  825. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  826. if (routes.Count == 1)
  827. {
  828. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  829. }
  830. else
  831. {
  832. throw new Exception(string.Format("该函数不支持多个分支输送地址,请编写扩展接口。"));
  833. }
  834. }
  835. WriteInfoToConveyor(cs, converywrite);
  836. }
  837. catch (Exception ex)
  838. {
  839. LogMessageHelper.RecordLogMessage(ex);
  840. }
  841. }
  842. /// <summary>
  843. /// 打铁位置申请搬运任务
  844. /// </summary>
  845. /// <param name="convNo"></param>
  846. /// <param name="endConvNo"></param>
  847. private void Conv_RequestCarry(string convNo,string endConvNo)
  848. {
  849. try
  850. {
  851. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  852. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  853. var startCs = conveyor.EquSignal_Conv;
  854. var endConveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == endConvNo);
  855. var endCs = endConveyor.EquSignal_Conv;
  856. if (!startCs.CvDB51_PH_Status) return;
  857. if (endCs.CvDB51_PH_Status) return;
  858. if (endCs.DB521_Tasknum > 0) return;
  859. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDFROM == convNo);
  860. if (task == null)
  861. {
  862. var param = new GetInTaskParam();
  863. param.ContainerBarCode = string.Empty;
  864. param.ContainerType = 1;
  865. param.MatBarCode = string.Empty;
  866. param.WareHouseId = Current.Pvchouseputong;
  867. param.EquipmentNo = convNo;
  868. param.EndPostion = endConvNo;
  869. param.Memo2 = "2";
  870. task = BaseWorkflow.GetInTask(param);
  871. }
  872. }
  873. catch (Exception ex)
  874. {
  875. LogMessageHelper.RecordLogMessage(ex);
  876. }
  877. }
  878. /// <summary>
  879. /// 输送线扫码执行
  880. /// </summary>
  881. /// <param name="convNo">扫码输送线</param>
  882. /// <param name="exitNo">扫码异常退出口(没有则传空值)</param>
  883. /// <param name="endPostion">目标位置(method.调用扩展函数;0.无效参数; 1.仓库;2.区域A;3.区域B 等)</param>
  884. /// <param name="assignType">分配类型:0.不分配;1.分配巷道;2.分配货位</param>
  885. private void Conv_Scanning_2246(string convNo, string exitNo)
  886. {
  887. try
  888. {
  889. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  890. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  891. var cs = conveyor.EquSignal_Conv;
  892. if (!cs.DB521_Request) return;
  893. //if (ConveyorHelper.ConvGoodsAlarms(convNo, cs)) return;
  894. if (cs.DB521_BCR_Noread)
  895. {
  896. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  897. //if (!string.IsNullOrWhiteSpace(exitNo))
  898. //{
  899. // var convwrite = new WCSWriteToConveyorSignal();
  900. // convwrite.Plc = plc.Plc;
  901. // convwrite.DBName = plc.WriteDBName;
  902. // convwrite.ConveyorNo = convNo;
  903. // convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  904. // convwrite.Tasknum = 1;
  905. // convwrite.Goodscode = 0;
  906. // convwrite.Goodstype = 0;
  907. // convwrite.Goodssize = 0;
  908. // convwrite.Goodsstart = Convert.ToInt32(convNo);
  909. // convwrite.Goodsend = Convert.ToInt32(exitNo);
  910. // //创建任务失败,写入托盘退回
  911. // ConveyorHelper.WriteInfoToConveyor(cs, convwrite, true);
  912. //}
  913. return;
  914. }
  915. //var scann = plc.WCS_ScannSet.FirstOrDefault(v => v.SCANN_PLCNAME == plcName && v.SCANN_STATIONNO == convNo);
  916. //if (string.IsNullOrWhiteSpace(scann.SCANN_BARCODE))
  917. //{
  918. // throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  919. //}
  920. //string barcodestr = scann.SCANN_BARCODE.Replace("\r", "").Replace("\0", "").Trim();
  921. if (string.IsNullOrWhiteSpace(cs.BarCodeStr))
  922. {
  923. throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  924. }
  925. if (cs.BarCodeStr.ToUpper().Contains("ERROR") || cs.BarCodeStr.ToUpper().Contains("N") || cs.BarCodeStr.Contains("?"))
  926. {
  927. throw new Exception(string.Format("输送线[{0}]存在请求信号,但条码是:[{1}]存在报错,PLC应该报条码错误信号", convNo, cs.BarCodeStr));
  928. }
  929. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == cs.BarCodeStr);
  930. if (task == null)
  931. {
  932. //if (!string.IsNullOrWhiteSpace(exitNo))
  933. //{
  934. // var convwrite = new WCSWriteToConveyorSignal();
  935. // convwrite.Plc = plc.Plc;
  936. // convwrite.DBName = plc.WriteDBName;
  937. // convwrite.ConveyorNo = convNo;
  938. // convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  939. // convwrite.Tasknum = 1;
  940. // convwrite.Goodscode = 0;
  941. // convwrite.Goodstype = 0;
  942. // convwrite.Goodssize = 0;
  943. // convwrite.Goodsstart = Convert.ToInt32(convNo);
  944. // convwrite.Goodsend = Convert.ToInt32(exitNo);
  945. // //创建任务失败,写入托盘退回
  946. // ConveyorHelper.WriteInfoToConveyor(cs, convwrite, true);
  947. //}
  948. //return;
  949. var param = new GetInTaskParam();
  950. param.ContainerBarCode = cs.BarCodeStr;
  951. param.ContainerType = 1;
  952. param.MatBarCode = string.Empty;
  953. param.WareHouseId = Current.Pvchouseputong;
  954. param.EquipmentNo = convNo;
  955. param.EndPostion = "srm";
  956. //if (endPostion == "method")
  957. //{
  958. // param.EndPostion = Current.WcsInterface.QuerySetExtendedParam(plcName, param);
  959. //}
  960. //else
  961. //{
  962. // param.EndPostion = endPostion;
  963. //}
  964. task = BaseWorkflow.GetInTask(param);
  965. }
  966. else if (task.TASK_COMTYPE == (int)ComTypeEnum.搬运 && task.TASK_POSIDTO == convNo)
  967. {
  968. Log4netHelper.Logger_Info.InfoFormat(string.Format("任务[{0}]是搬运到该位置的铁箱,等待任务完成后触发生成新的任务。", task.TASK_NO));
  969. return;
  970. }
  971. //任务已经执行
  972. if (task == null || task.TASK_POSIDCUR != convNo || task.TASK_ITEM5 == convNo) return;
  973. var converywrite = new WCSWriteToConveyorSignal();
  974. converywrite.Plc = plc.Plc;
  975. converywrite.DBName = plc.WriteDBName;
  976. converywrite.ConveyorNo = convNo;
  977. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  978. converywrite.Tasknum = task.TASK_NO;
  979. converywrite.Goodstype = 1;
  980. converywrite.Goodssize = 0;//
  981. converywrite.Goodsstart = Convert.ToInt32(convNo);
  982. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  983. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  984. if (routes.Count == 1)
  985. {
  986. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  987. }
  988. else if (task.TASK_POSIDTO == "srm")
  989. {
  990. converywrite.Goodsend = Convert.ToInt32(Conv_Weigh_2235);
  991. }
  992. //else if (task.TASK_POSIDTO == "2391" || task.TASK_POSIDTO == "2381")
  993. //{
  994. // converywrite.Goodsend = 2235;
  995. //}
  996. else
  997. {
  998. throw new Exception(string.Format("该函数不支持多个分支输送地址,请编写扩展接口。"));
  999. }
  1000. WriteInfoToConveyor(cs, converywrite);
  1001. }
  1002. catch (Exception ex)
  1003. {
  1004. LogMessageHelper.RecordLogMessage(ex);
  1005. }
  1006. }
  1007. /// <summary>
  1008. /// 输送线扫码执行
  1009. /// </summary>
  1010. /// <param name="convNo">扫码输送线</param>
  1011. /// <param name="exitNo">扫码异常退出口(没有则传空值)</param>
  1012. private void Conv_Scanning_2238(string convNo, string exitNo)
  1013. {
  1014. try
  1015. {
  1016. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1017. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1018. var cs = conveyor.EquSignal_Conv;
  1019. if (!cs.DB521_Request) return;
  1020. //if (ConveyorHelper.ConvGoodsAlarms(convNo, cs)) return;
  1021. if (cs.DB521_BCR_Noread)
  1022. {
  1023. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  1024. //if (!string.IsNullOrWhiteSpace(exitNo))
  1025. //{
  1026. // var convwrite = new WCSWriteToConveyorSignal();
  1027. // convwrite.Plc = plc.Plc;
  1028. // convwrite.DBName = plc.WriteDBName;
  1029. // convwrite.ConveyorNo = convNo;
  1030. // convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1031. // convwrite.Tasknum = 1;
  1032. // convwrite.Goodscode = 0;
  1033. // convwrite.Goodstype = 0;
  1034. // convwrite.Goodssize = 0;
  1035. // convwrite.Goodsstart = Convert.ToInt32(convNo);
  1036. // convwrite.Goodsend = Convert.ToInt32(exitNo);
  1037. // //创建任务失败,写入托盘退回
  1038. // ConveyorHelper.WriteInfoToConveyor(cs, convwrite, true);
  1039. //}
  1040. return;
  1041. }
  1042. //var scann = plc.WCS_ScannSet.FirstOrDefault(v => v.SCANN_PLCNAME == plcName && v.SCANN_STATIONNO == convNo);
  1043. //if (string.IsNullOrWhiteSpace(scann.SCANN_BARCODE))
  1044. //{
  1045. // throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  1046. //}
  1047. //string barcodestr = scann.SCANN_BARCODE.Replace("\r", "").Replace("\0", "").Trim();
  1048. if (string.IsNullOrWhiteSpace(cs.BarCodeStr))
  1049. {
  1050. throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  1051. }
  1052. if (cs.BarCodeStr.ToUpper().Contains("ERROR") || cs.BarCodeStr.ToUpper().Contains("N") || cs.BarCodeStr.Contains("?"))
  1053. {
  1054. throw new Exception(string.Format("输送线[{0}]存在请求信号,但条码是:[{1}]存在报错,PLC应该报条码错误信号", convNo, cs.BarCodeStr));
  1055. }
  1056. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == cs.BarCodeStr);
  1057. if (task == null)
  1058. {
  1059. //throw new Exception(string.Format("输送线[{0}]条码[{1}]未查询到任务,请检查扫码是否正确。", convNo, cs.BarCodeStr));
  1060. //if (!string.IsNullOrWhiteSpace(exitNo))
  1061. //{
  1062. // var convwrite = new WCSWriteToConveyorSignal();
  1063. // convwrite.Plc = plc.Plc;
  1064. // convwrite.DBName = plc.WriteDBName;
  1065. // convwrite.ConveyorNo = convNo;
  1066. // convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1067. // convwrite.Tasknum = 1;
  1068. // convwrite.Goodscode = 0;
  1069. // convwrite.Goodstype = 0;
  1070. // convwrite.Goodssize = 0;
  1071. // convwrite.Goodsstart = Convert.ToInt32(convNo);
  1072. // convwrite.Goodsend = Convert.ToInt32(exitNo);
  1073. // //创建任务失败,写入托盘退回
  1074. // ConveyorHelper.WriteInfoToConveyor(cs, convwrite, true);
  1075. //}
  1076. //return;
  1077. var param = new GetInTaskParam();
  1078. param.ContainerBarCode = cs.BarCodeStr;
  1079. param.ContainerType = 1;
  1080. param.MatBarCode = string.Empty;
  1081. param.WareHouseId = Current.Pvchouseputong;
  1082. param.EquipmentNo = convNo;
  1083. param.EndPostion = "srm";
  1084. //if (endPostion == "method")
  1085. //{
  1086. // param.EndPostion = Current.WcsInterface.QuerySetExtendedParam(plcName, param);
  1087. //}
  1088. //else
  1089. //{
  1090. // param.EndPostion = endPostion;
  1091. //}
  1092. task = BaseWorkflow.GetInTask(param);
  1093. }
  1094. //任务已经执行
  1095. if (task == null || task.TASK_POSIDCUR != convNo || task.TASK_ITEM5 == convNo) return;
  1096. var converywrite = new WCSWriteToConveyorSignal();
  1097. converywrite.Plc = plc.Plc;
  1098. converywrite.DBName = plc.WriteDBName;
  1099. converywrite.ConveyorNo = convNo;
  1100. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1101. converywrite.Tasknum = task.TASK_NO;
  1102. converywrite.Goodstype = 1;
  1103. converywrite.Goodssize = 0;//
  1104. converywrite.Goodsstart = Convert.ToInt32(convNo);
  1105. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  1106. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  1107. if (routes.Count == 1)
  1108. {
  1109. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  1110. }
  1111. else if (task.TASK_POSIDTO == "srm")
  1112. {
  1113. converywrite.Goodsend = Convert.ToInt32(Conv_2246);
  1114. }
  1115. else
  1116. {
  1117. throw new Exception(string.Format("该函数不支持多个分支输送地址,请编写扩展接口。"));
  1118. }
  1119. WriteInfoToConveyor(cs, converywrite);
  1120. }
  1121. catch (Exception ex)
  1122. {
  1123. LogMessageHelper.RecordLogMessage(ex);
  1124. }
  1125. }
  1126. /// <summary>
  1127. /// 输送线扫码执行
  1128. /// </summary>
  1129. /// <param name="convNo">扫码输送线</param>
  1130. /// <param name="exitNo">扫码异常退出口(没有则传空值)</param>
  1131. /// <param name="endPostion">目标位置(method.调用扩展函数;0.无效参数; 1.仓库;2.区域A;3.区域B 等)</param>
  1132. /// <param name="assignType">分配类型:0.不分配;1.分配巷道;2.分配货位</param>
  1133. private void Conv_Scanning_2235(string convNo, string exitNo, string endPostion, int assignType = 0)
  1134. {
  1135. try
  1136. {
  1137. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1138. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1139. var cs = conveyor.EquSignal_Conv;
  1140. if (!cs.DB521_Request) return;
  1141. //if (ConveyorHelper.ConvGoodsAlarms(convNo, cs)) return;
  1142. WCS_TASK task = null;
  1143. if (cs.DB521_BCR_Noread)
  1144. {
  1145. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  1146. return;
  1147. if (!string.IsNullOrWhiteSpace(exitNo))
  1148. {
  1149. var taskExce = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_POSIDFROM == convNo && v.TASK_POSIDCUR == convNo && v.TASK_POSIDNEXT == convNo);
  1150. if (taskExce == null)
  1151. {
  1152. //创建异常任务
  1153. taskExce = new WCS_TASK();
  1154. taskExce.TASK_WMSNO = "无";
  1155. taskExce.TASK_COMTYPE = (int)ComTypeEnum.搬运;
  1156. taskExce.TASK_SYSTYPE = "WCS";
  1157. taskExce.TASK_POSIDFROM = convNo;//起点地址
  1158. taskExce.TASK_POSIDCUR = convNo;
  1159. taskExce.TASK_POSIDNEXT = convNo;
  1160. taskExce.TASK_POSIDMOVE = "";
  1161. taskExce.TASK_PRIORITY = 1;
  1162. taskExce.TASK_WKSTATUS = 0;
  1163. taskExce.TASK_WHID = "成品库";
  1164. taskExce.TASK_ADDUSERNO = "WMS";
  1165. taskExce.TASK_ADDDATETIME = DateTime.Now;
  1166. taskExce.TASK_EDITUSERNO = "WMS";
  1167. taskExce.TASK_EDITDATETIME = DateTime.Now;
  1168. taskExce.TASK_NOTES = "";
  1169. taskExce.TASK_RGVNO = "";
  1170. taskExce.TASK_SRMNO = "srm01";
  1171. taskExce.TASK_BOXBARCODE = string.Empty;
  1172. taskExce.TASK_POSIDTO = exitNo;
  1173. int id = SugarBase.DB.Insertable(taskExce).ExecuteReturnIdentity();
  1174. if (id <= 0)
  1175. {
  1176. throw new Exception(string.Format("扫码位置[{0}]扫码异常,添加WCS异常任务失败", convNo));
  1177. }
  1178. else
  1179. {
  1180. taskExce.TASK_NO = id;
  1181. task = taskExce;
  1182. }
  1183. }
  1184. }
  1185. else
  1186. {
  1187. return;
  1188. }
  1189. }
  1190. //var scann = plc.WCS_ScannSet.FirstOrDefault(v => v.SCANN_PLCNAME == plcName && v.SCANN_STATIONNO == convNo);
  1191. //if (string.IsNullOrWhiteSpace(scann.SCANN_BARCODE))
  1192. //{
  1193. // throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  1194. //}
  1195. //string barcodestr = scann.SCANN_BARCODE.Replace("\r", "").Replace("\0", "").Trim();
  1196. if (string.IsNullOrWhiteSpace(cs.BarCodeStr))
  1197. {
  1198. throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  1199. }
  1200. if (cs.BarCodeStr.ToUpper().Contains("ERROR") || cs.BarCodeStr.ToUpper().Contains("N") || cs.BarCodeStr.Contains("?"))
  1201. {
  1202. throw new Exception(string.Format("输送线[{0}]存在请求信号,但条码是:[{1}]存在报错,PLC应该报条码错误信号", convNo, cs.BarCodeStr));
  1203. }
  1204. if (task == null) task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == cs.BarCodeStr);
  1205. if (task == null)
  1206. {
  1207. throw new Exception(string.Format("输送线[{0}]条码[{1}]查询不到任务信息,请检测扫码是否正确。", convNo, cs.BarCodeStr));
  1208. //var param = new GetInTaskParam();
  1209. //param.ContainerBarCode = cs.BarCodeStr;
  1210. //param.ContainerType = 1;
  1211. //param.MatBarCode = string.Empty;
  1212. //param.WareHouseId = Current.WareHouseId;
  1213. //param.EquipmentNo = convNo;
  1214. //if (endPostion == "method")
  1215. //{
  1216. // param.EndPostion = Current.WcsInterface.QuerySetExtendedParam(plcName, param);
  1217. //}
  1218. //else
  1219. //{
  1220. // param.EndPostion = endPostion;
  1221. //}
  1222. //if (assignType > 0 && param.EndPostion.Contains("srm")) param.Memo1 = assignType.ToString();
  1223. //task = BaseWorkflow.GetInTask(param);
  1224. }
  1225. else if (task.TASK_COMTYPE == (int)ComTypeEnum.搬运 && task.TASK_POSIDTO == convNo)
  1226. {
  1227. Log4netHelper.Logger_Info.InfoFormat(string.Format("任务[{0}]是搬运到该位置的铁箱,等待任务完成后触发生成新的任务。", task.TASK_NO));
  1228. return;
  1229. }
  1230. //任务已经执行
  1231. if (task.TASK_ITEM5 == convNo) return;
  1232. //重量低于180000克报错。
  1233. if (cs.DB521_Res04 < 80000)
  1234. throw new Exception(string.Format("输送线[{0}]称重[{1}]克错误。", convNo, cs.DB521_Res04));
  1235. GetWeightParam param = new GetWeightParam();
  1236. param.WMSTaskNum = task.TASK_WMSNO;
  1237. param.Weight = cs.DB521_Res04;
  1238. if (string.IsNullOrEmpty(task.TASK_ITEM3))
  1239. {
  1240. if (BaseWorkflow.GetWeight(param) == false)
  1241. {
  1242. return;
  1243. }
  1244. }
  1245. else
  1246. {
  1247. Log4netHelper.Logger_Info.Info(string.Format("任务[{0}]已称重[{1}],不会重复进行记录该称重信息。", task.TASK_NO, task.TASK_ITEM3));
  1248. }
  1249. var converywrite = new WCSWriteToConveyorSignal();
  1250. converywrite.Plc = plc.Plc;
  1251. converywrite.DBName = plc.WriteDBName;
  1252. converywrite.ConveyorNo = convNo;
  1253. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1254. converywrite.Tasknum = task.TASK_NO;
  1255. converywrite.Goodstype = 1;
  1256. converywrite.Goodssize = 0;//
  1257. converywrite.Goodsstart = Convert.ToInt32(convNo);
  1258. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  1259. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  1260. //if (task.TASK_POSIDTO == "2391")
  1261. //{
  1262. // converywrite.Goodsend = 2304;
  1263. // //修改堆垛机编号
  1264. // SugarBase.DB.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_COMTYPE = 4, TASK_SRMNO = "srm11", TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  1265. // .Where(it => it.TASK_NO == task.TASK_NO)
  1266. // .ExecuteCommand();
  1267. //}
  1268. //else if (task.TASK_POSIDTO == "2381")
  1269. //{
  1270. // converywrite.Goodsend = 2324;
  1271. // SugarBase.DB.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_COMTYPE = 4, TASK_SRMNO = "srm06", TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  1272. // .Where(it => it.TASK_NO == task.TASK_NO)
  1273. // .ExecuteCommand();
  1274. //}
  1275. //else
  1276. if (routes.Count == 1)
  1277. {
  1278. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  1279. }
  1280. else if (task.TASK_POSIDTO.Contains("srm") && assignType > 0)
  1281. {
  1282. ConveyorHelper.AssignSrm(routeSet, converywrite, Convert.ToInt32(task.TASK_WMSNO));
  1283. }
  1284. else
  1285. {
  1286. throw new Exception(string.Format("任务[{0}]该函数不支持多个分支输送地址,请编写扩展接口。", task.TASK_NO));
  1287. }
  1288. WriteInfoToConveyor(cs, converywrite);
  1289. }
  1290. catch (Exception ex)
  1291. {
  1292. LogMessageHelper.RecordLogMessage(ex);
  1293. }
  1294. }
  1295. private void Conv_Scanning_2359(string convNo)
  1296. {
  1297. try
  1298. {
  1299. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1300. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1301. var cs = conveyor.EquSignal_Conv;
  1302. if (!cs.DB521_Request) return;
  1303. if (cs.DB521_BCR_Noread)
  1304. {
  1305. throw new Exception(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  1306. }
  1307. if (string.IsNullOrWhiteSpace(cs.BarCodeStr))
  1308. {
  1309. throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  1310. }
  1311. if (cs.BarCodeStr.ToUpper().Contains("ERROR") || cs.BarCodeStr.ToUpper().Contains("N") || cs.BarCodeStr.Contains("?"))
  1312. {
  1313. throw new Exception(string.Format("输送线[{0}]存在请求信号,但条码是:[{1}]存在报错,PLC应该报条码错误信号", convNo, cs.BarCodeStr));
  1314. }
  1315. var conv2360 = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_2360).EquSignal_Conv;
  1316. var conv2361 = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_2361).EquSignal_Conv;
  1317. bool isNotTask_2061 = false;
  1318. if (conv2360.DB521_Tasknum > 0 && conv2360.DB521_Goodsend == Convert.ToInt32(Conv_2361))
  1319. {
  1320. isNotTask_2061 = true;
  1321. }
  1322. if (conv2361.DB521_Tasknum > 0 && conv2361.DB521_Goodsend == Convert.ToInt32(Conv_2361))
  1323. {
  1324. isNotTask_2061 = true;
  1325. }
  1326. var conv2364 = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_2364).EquSignal_Conv;
  1327. var conv2365 = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_2365).EquSignal_Conv;
  1328. bool isNotTask_2064 = false;
  1329. if (conv2360.DB521_Tasknum > 0 && conv2360.DB521_Goodsend == Convert.ToInt32(Conv_2364))
  1330. {
  1331. isNotTask_2064 = true;
  1332. }
  1333. if (conv2364.DB521_Tasknum > 0 && conv2364.DB521_Goodsend == Convert.ToInt32(Conv_2364))
  1334. {
  1335. isNotTask_2064 = true;
  1336. }
  1337. if (conv2365.DB521_Tasknum > 0 && conv2365.DB521_Goodsend == Convert.ToInt32(Conv_2364))
  1338. {
  1339. isNotTask_2064 = true;
  1340. }
  1341. string endaddress = string.Empty;
  1342. if (isNotTask_2061 == false)
  1343. {
  1344. endaddress = Conv_2361;
  1345. }
  1346. else if (isNotTask_2064 == false)
  1347. {
  1348. endaddress = Conv_2364;
  1349. }
  1350. if (string.IsNullOrWhiteSpace(endaddress)) return;
  1351. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == cs.BarCodeStr);
  1352. if (task.TASK_POSIDTO == Out_Area_D)
  1353. {
  1354. string result = TryCachHelper.TryTranExecute((db) =>
  1355. {
  1356. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  1357. {
  1358. TASK_POSIDTO = endaddress,
  1359. TASK_EDITUSERNO = "WCS",
  1360. TASK_EDITDATETIME = DateTime.Now
  1361. })
  1362. .Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  1363. string msg = string.Format("任务[{0}]已到达发货出库口扫码位置[{1}]分配目标地址[{2}]成功。", task.TASK_NO, convNo, endaddress);
  1364. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, endaddress, msg);
  1365. });
  1366. if (string.IsNullOrWhiteSpace(result))
  1367. {
  1368. task.TASK_POSIDTO = endaddress;
  1369. }
  1370. else
  1371. {
  1372. throw new Exception(string.Format("任务[{0}]已到达发货出库口扫码位置[{1}]分配目标地址[{2}]失败。", task.TASK_NO, convNo, endaddress));
  1373. }
  1374. }
  1375. if (task.TASK_POSIDNEXT == task.TASK_POSIDTO) return;
  1376. var converywrite = new WCSWriteToConveyorSignal();
  1377. converywrite.Plc = plc.Plc;
  1378. converywrite.DBName = plc.WriteDBName;
  1379. converywrite.ConveyorNo = convNo;
  1380. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1381. converywrite.Tasknum = task.TASK_NO;
  1382. converywrite.Goodstype = 1;
  1383. converywrite.Goodssize = 0;//
  1384. converywrite.Goodsstart = Convert.ToInt32(convNo);
  1385. converywrite.Goodsend = Convert.ToInt32(task.TASK_POSIDTO);
  1386. WriteInfoToConveyor(cs, converywrite);
  1387. }
  1388. catch (Exception ex)
  1389. {
  1390. LogMessageHelper.RecordLogMessage(ex);
  1391. }
  1392. }
  1393. private static string guid = string.Empty;
  1394. private bool WCS_GetOutTask(GetOutTaskParam param, string posidTo)
  1395. {
  1396. bool result = false;
  1397. WCS_TASK wcstask = null;
  1398. try
  1399. {
  1400. if (string.IsNullOrWhiteSpace(guid)) guid = Guid.NewGuid().ToString();
  1401. param.OutId = guid;
  1402. var reply = Current.WmsInterface.I_WCS_GetOutTask(param);
  1403. if (reply.ResType)
  1404. {
  1405. if(string.IsNullOrWhiteSpace(reply.WareHouseName))
  1406. {
  1407. throw new Exception(string.Format("工位[{0}]申请出库任务仓库不能为空。", posidTo));
  1408. }
  1409. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_WMSNO == reply.WMSTaskNum);
  1410. if (task == null)
  1411. {
  1412. //添加wcs任务
  1413. wcstask = new WCS_TASK();
  1414. wcstask.TASK_WMSNO = reply.WMSTaskNum;
  1415. wcstask.TASK_COMTYPE = reply.TaskType;
  1416. wcstask.TASK_SYSTYPE = "WMS";
  1417. wcstask.TASK_POSIDFROM = reply.OutWareCellNo;//起点地址
  1418. wcstask.TASK_POSIDCUR = reply.OutWareCellNo;
  1419. wcstask.TASK_POSIDNEXT = reply.OutWareCellNo;
  1420. wcstask.TASK_POSIDMOVE = "";
  1421. wcstask.TASK_PRIORITY = reply.Priority;
  1422. wcstask.TASK_WKSTATUS = 0;
  1423. wcstask.TASK_WHID = reply.WareHouseName;
  1424. wcstask.TASK_ADDUSERNO = "WMS";
  1425. wcstask.TASK_ADDDATETIME = DateTime.Now;
  1426. wcstask.TASK_EDITUSERNO = "WMS";
  1427. wcstask.TASK_EDITDATETIME = DateTime.Now;
  1428. wcstask.TASK_NOTES = "";
  1429. wcstask.TASK_RGVNO = "";
  1430. wcstask.TASK_BOXBARCODE = reply.ContainerBarCode;
  1431. wcstask.TASK_POSIDTO = posidTo;
  1432. //wcstask.TASK_PRIORITY = reply.Priority;
  1433. if (string.IsNullOrWhiteSpace(reply.TunnelNum))
  1434. {
  1435. //wcstask.TASK_SRMNO = reply.EndPostion;
  1436. }
  1437. else
  1438. {
  1439. wcstask.TASK_FromTunnelNum = reply.TunnelNum;
  1440. if (wcstask.TASK_FromTunnelNum.Length == 2)
  1441. wcstask.TASK_SRMNO = string.Format("srm{0}", wcstask.TASK_FromTunnelNum);
  1442. else
  1443. wcstask.TASK_SRMNO = string.Format("srm0{0}", wcstask.TASK_FromTunnelNum);
  1444. }
  1445. if (wcstask.TASK_COMTYPE == 2 && string.IsNullOrWhiteSpace(wcstask.TASK_SRMNO))
  1446. {
  1447. throw new Exception(string.Format("工位[{0}]申请出库任务中 堆垛机编号不能为空。", posidTo));
  1448. }
  1449. if (string.IsNullOrWhiteSpace(wcstask.TASK_BOXBARCODE))
  1450. {
  1451. throw new Exception(string.Format("工位[{0}]申请出库任务中 条码编号不能为空。", posidTo));
  1452. }
  1453. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  1454. if (id <= 0)
  1455. {
  1456. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  1457. }
  1458. else
  1459. {
  1460. wcstask.TASK_NO = id;
  1461. guid = Guid.NewGuid().ToString();
  1462. result = true;
  1463. }
  1464. }
  1465. }
  1466. else
  1467. {
  1468. if (string.IsNullOrWhiteSpace(reply.Memo2))
  1469. {
  1470. var msg = string.Format("目标位置[{0}]获取出库任务失败,原因:[{1}]", posidTo, reply.ResMessage);
  1471. LogMessageHelper.RecordLogMessage(msg);
  1472. }
  1473. }
  1474. }
  1475. catch (Exception ex)
  1476. {
  1477. LogMessageHelper.RecordLogMessage(ex);
  1478. }
  1479. return result;
  1480. }
  1481. /// <summary>
  1482. /// 超高重置任务
  1483. /// </summary>
  1484. /// <param name="rgvName"></param>
  1485. /// <param name="convNo"></param>
  1486. private void ConvSuperHighAlaramResetTask(string rgvName, string convNo)
  1487. {
  1488. try
  1489. {
  1490. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1491. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1492. var cs = conveyor.EquSignal_Conv;
  1493. var rgv = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == rgvName).WCS_EquipmentInfoSet[0].EquSignal_Rgv;
  1494. if (cs.DB521_H_Outside)
  1495. {
  1496. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_NO == rgv.DB521_TaskID_1 && (v.TASK_WKSTATUS == 3 || v.TASK_WKSTATUS == 7) && (v.TASK_COMTYPE == 1 || v.TASK_COMTYPE == 4 || v.TASK_COMTYPE == 5));
  1497. if (task == null)
  1498. {
  1499. //throw new Exception(string.Format("输送线[{0}]超高报警,未查询到任务,取消任务失败。", convNo));
  1500. }
  1501. else
  1502. {
  1503. //调用sp完成任务
  1504. string result = TryCachHelper.TryTranExecute((db) =>
  1505. {
  1506. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 1, TASK_POSIDCUR = convNo, TASK_POSIDNEXT = convNo, TASK_RGVNO = "", TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  1507. .Where(it => it.TASK_NO == task.TASK_NO)
  1508. .ExecuteCommand();
  1509. //添加明细
  1510. string msg = string.Format("输送线[{0}]上料到穿梭车[{1}]任务[{2}]外检故障,重置任务。", convNo, rgvName, task.TASK_NO);
  1511. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, msg);
  1512. string alaram = string.Format("托盘[{0}]超高报警", task.TASK_BOXBARCODE);
  1513. BaseWorkflow.AddLedErrorMsg(db, convNo, alaram, task.TASK_NO);
  1514. });
  1515. if (!string.IsNullOrWhiteSpace(result))
  1516. {
  1517. throw new Exception(result);
  1518. }
  1519. }
  1520. if (rgv.DB521_Finish_1 == false)
  1521. {
  1522. if (!Current.TaskSet.Any(v => v.TASK_RGVNO == rgvName && v.TASK_WKSTATUS == 7))
  1523. {
  1524. //穿梭车不存在任务,写入取消任务信号,PLC根据该信号写入穿梭车完成信号
  1525. if (!plc.Plc.WriteBits((ushort)plc.WriteDBName, (ushort)((cs.EquDbInfo_ReadWrite.DBReadIndox + 17) * 8 + 6), true))
  1526. {
  1527. throw new Exception(string.Format("输送线[{0}]任务[{0}]写入超高重置任务失败!", convNo, rgv.DB521_TaskID_2));
  1528. }
  1529. else
  1530. {
  1531. Log4netHelper.Logger_Info.InfoFormat("输送线[{0}]任务[{0}]写入超高重置任务成功!", convNo, rgv.DB521_TaskID_2);
  1532. }
  1533. }
  1534. }
  1535. }
  1536. }
  1537. catch (Exception ex)
  1538. {
  1539. LogMessageHelper.RecordLogMessage(ex);
  1540. }
  1541. }
  1542. private void Conv_H_OutsideUpdateTaskEndAddress(string convNo,string endConvNo)
  1543. {
  1544. try
  1545. {
  1546. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1547. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1548. var cs = conveyor.EquSignal_Conv;
  1549. if (cs.DB521_H_Outside)
  1550. {
  1551. var task = Current.TaskSet.FirstOrDefault(v => (v.TASK_WKSTATUS == 9) && v.TASK_POSIDCUR == convNo && v.TASK_COMTYPE == 1);
  1552. if (task == null)
  1553. {
  1554. //throw new Exception(string.Format("输送线[{0}]超高报警,未查询到任务,取消任务失败。", convNo));
  1555. }
  1556. else
  1557. {
  1558. //调用sp完成任务
  1559. string result = TryCachHelper.TryTranExecute((db) =>
  1560. {
  1561. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 2, TASK_POSIDNEXT = convNo, TASK_POSIDTO = endConvNo, TASK_RGVNO = "", TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  1562. .Where(it => it.TASK_NO == task.TASK_NO)
  1563. .ExecuteCommand();
  1564. //添加明细
  1565. string msg = string.Format("输送线[{0}]任务[{1}]外检超高故障,变更任务目标地址为[{2}]。", convNo, task.TASK_NO, endConvNo);
  1566. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, msg);
  1567. string alaram = string.Format("托盘[{0}]超高报警,排出到异常口[{1}]人工处理。", task.TASK_BOXBARCODE, endConvNo);
  1568. BaseWorkflow.AddLedErrorMsg(db, convNo, alaram, task.TASK_NO);
  1569. });
  1570. if (!string.IsNullOrWhiteSpace(result))
  1571. {
  1572. throw new Exception(result);
  1573. }
  1574. }
  1575. }
  1576. }
  1577. catch (Exception ex)
  1578. {
  1579. LogMessageHelper.RecordLogMessage(ex);
  1580. }
  1581. }
  1582. /// <summary>
  1583. /// 堆垛机出口输送线任务执行(任务目标地址的下个地址只支持单一地址)
  1584. /// </summary>
  1585. private void SrmOutConvExeTask(string plcName, string convNo, bool endPosIsCurConv = false)
  1586. {
  1587. try
  1588. {
  1589. string conv_2381 = "2381";//危废仓库出口
  1590. string conv_2391 = "2391";//空调和小家电出库口
  1591. int conv_2324 = 2324;//危废仓库出口
  1592. string srmno = string.Empty;
  1593. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == plcName);
  1594. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1595. var cs = conveyor.EquSignal_Conv;
  1596. if (cs.DB521_Request && cs.DB523_Fault == false)
  1597. {
  1598. var taskSet = Current.TaskSet.Where(v => v.TASK_POSIDNEXT == convNo).ToList();
  1599. var task = taskSet.SingleOrDefault(v => v.TASK_WKSTATUS == (int)WkStatus.堆垛机完成);
  1600. if (task != null)
  1601. {
  1602. var converywrite = new WCSWriteToConveyorSignal();
  1603. converywrite.Plc = plc.Plc;
  1604. converywrite.DBName = plc.WriteDBName;
  1605. converywrite.ConveyorNo = convNo;
  1606. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1607. converywrite.Tasknum = task.TASK_NO;
  1608. converywrite.Goodscode = 0;//待定
  1609. converywrite.Goodstype = 0;
  1610. converywrite.Goodssize = 0;//待定
  1611. converywrite.Goodsstart = Convert.ToInt32(convNo);
  1612. if (endPosIsCurConv)
  1613. {
  1614. converywrite.Goodsend = converywrite.Goodsstart;
  1615. }
  1616. else
  1617. {
  1618. if (task.TASK_POSIDTO == conv_2381)//危废仓库出口
  1619. {
  1620. converywrite.Goodsend = conv_2324;
  1621. }
  1622. else
  1623. {
  1624. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  1625. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  1626. if (routes.Count == 1)
  1627. {
  1628. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  1629. }
  1630. else
  1631. {
  1632. if (routes.Any(v => v.ROUTE_SONPOS == Conv_2246) && routes.Any(v => v.ROUTE_SONPOS == Conv_2238))
  1633. {
  1634. converywrite.Goodsend = Convert.ToInt32(Conv_2246);
  1635. }
  1636. else
  1637. {
  1638. throw new Exception(string.Format("输送线[{0}]任务[{1}]请求该函数不支持多个分支输送地址,请编写扩展函数。", convNo, task.TASK_NO));
  1639. }
  1640. }
  1641. }
  1642. if (task.TASK_POSIDTO == conv_2381 || task.TASK_POSIDTO == conv_2391)//危废仓库出口、小家电和冰箱出口
  1643. {
  1644. srmno = task.TASK_POSIDTO == conv_2381 ? "srm06" : "srm11";
  1645. //修改目标堆垛机和任务类型
  1646. if (task.TASK_SRMNO != srmno)
  1647. {
  1648. //调用sp完成任务
  1649. string result = TryCachHelper.TryTranExecute((db) =>
  1650. {
  1651. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_COMTYPE = 4, TASK_SRMNO = srmno, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  1652. .Where(it => it.TASK_NO == task.TASK_NO)
  1653. .ExecuteCommand();
  1654. //添加明细
  1655. string msg = string.Format("任务[{0}]去危废仓库变更堆垛机编号和任务类型为搬运类型成功。", task.TASK_NO);
  1656. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, msg);
  1657. });
  1658. if (string.IsNullOrWhiteSpace(result))
  1659. {
  1660. throw new Exception(string.Format("任务[{0}]去危废仓库变更堆垛机编号和任务类型失败。", task.TASK_NO));
  1661. }
  1662. }
  1663. }
  1664. }
  1665. WriteInfoToConveyor(cs, converywrite);
  1666. }
  1667. }
  1668. }
  1669. catch (Exception ex)
  1670. {
  1671. LogMessageHelper.RecordLogMessage(ex);
  1672. }
  1673. }
  1674. private void ExecConvRequest(string convNo)
  1675. {
  1676. try
  1677. {
  1678. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1679. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1680. var cs = conveyor.EquSignal_Conv;
  1681. if (cs.DB521_Res01)
  1682. {
  1683. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == cs.DB521_Tasknum && v.TASK_POSIDCUR == convNo && v.TASK_POSIDTO == convNo);
  1684. if (task != null)
  1685. {
  1686. string result = TryCachHelper.TryTranExecute((db) =>
  1687. {
  1688. //修改任务的目标地址
  1689. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 2, TASK_POSIDTO = srm, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  1690. .Where(it => it.TASK_NO == task.TASK_NO)
  1691. .ExecuteCommand();
  1692. string msg = string.Format("任务[{0}]超高报警处理完成,变更目标地址为[{1}]", task.TASK_NO, srm);
  1693. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, srm, msg);
  1694. });
  1695. if (!string.IsNullOrWhiteSpace(result))
  1696. {
  1697. LogMessageHelper.RecordLogMessage(string.Format("任务[{0}]超高,变更目标地址失败,原因:[{1}]", task.TASK_NO, result));
  1698. }
  1699. }
  1700. }
  1701. }
  1702. catch (Exception ex)
  1703. {
  1704. LogMessageHelper.RecordLogMessage(ex);
  1705. }
  1706. }
  1707. #endregion;
  1708. #region 重写
  1709. public override int ConveyorWriteTaskExecuteToMoreAddress(string convNo, WCS_TASK task, List<WCS_EQUIPMENTROUTE> routes)
  1710. {
  1711. int nextaddress = 0;
  1712. if (convNo == Conv_2184 || convNo == Conv_Weigh_2056)
  1713. {
  1714. if (task.TASK_POSIDTO == srm)
  1715. {
  1716. nextaddress = Convert.ToInt32(routes.FirstOrDefault(v => v.ROUTE_INOUTTYPE == ROUTE_INOUTTYPE_IN).ROUTE_SONPOS);
  1717. }
  1718. else
  1719. {
  1720. nextaddress = Convert.ToInt32(routes.FirstOrDefault(v => v.ROUTE_INOUTTYPE == ROUTE_INOUTTYPE_OUT).ROUTE_SONPOS);
  1721. }
  1722. }
  1723. else
  1724. {
  1725. throw new Exception(string.Format("输送线[{0}]申请任务[{1}]分配下一个地址失败。", convNo, task.TASK_NO));
  1726. }
  1727. return nextaddress;
  1728. }
  1729. #endregion;
  1730. }
  1731. }