ConvPlc02.cs 137 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892
  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. namespace WCS.Workflow
  11. {
  12. public class ConvPlc02 : Base_Conv
  13. {
  14. #region 只读变量
  15. private readonly string Conv_1200 = "1200";
  16. private readonly string Conv_1204 = "1204";
  17. private readonly string Conv_1460 = "1460";
  18. private readonly string Conv_1099 = "1099";
  19. private readonly string Conv_1105 = "1105";
  20. private readonly string Conv_1102 = "1102";
  21. private readonly string Conv_1104 = "1104";
  22. private readonly string Conv_1035 = "1035";
  23. private readonly string Conv_1036 = "1036";
  24. private readonly string Conv_1051 = "1051";
  25. private readonly string Conv_1056 = "1056";
  26. private readonly string Conv_1172 = "1172";
  27. private readonly string Conv_1173 = "1173";
  28. private readonly string Conv_1178 = "1178";
  29. private readonly string Conv_1177 = "1177";
  30. private readonly string Conv_1044 = "1044";
  31. private readonly string Conv_1071 = "1071";
  32. private readonly string Conv_1072 = "1072";
  33. private readonly string Conv_1085 = "1085";
  34. private readonly string Conv_1070 = "1070";
  35. private readonly string Conv_1285 = "1285";
  36. private readonly string Conv_1286 = "1286";
  37. private readonly string Conv_1179 = "1179";
  38. private readonly string Conv_1199 = "1199";
  39. private readonly string Conv_1196 = "1196";
  40. private readonly string Conv_1504 = "1504";
  41. private readonly string Conv_1107 = "1107";
  42. private readonly string Conv_1110 = "1110";
  43. private readonly string Conv_1109 = "1109";
  44. private readonly string Conv_1114 = "1114";
  45. private readonly string Conv_1115 = "1115";
  46. private readonly string Conv_1112 = "1112";
  47. private readonly string Conv_1518 = "1518";
  48. private readonly string Conv_1092 = "1092";
  49. private readonly string Conv_1094 = "1094";
  50. private readonly string Conv_1097 = "1097";
  51. private readonly string Conv_1098 = "1098";
  52. private readonly string Conv_1185 = "1185";
  53. private readonly string Conv_1221 = "1221";
  54. private readonly string Conv_1246 = "1246";
  55. private readonly string Conv_1233 = "1233";
  56. private readonly string Conv_1234 = "1234";
  57. private readonly string Conv_1251 = "1251";
  58. private readonly string Conv_1257 = "1257";
  59. private readonly string Conv_1252 = "1252";
  60. private readonly string Conv_1258 = "1258";
  61. private readonly string Conv_1261 = "1261";
  62. private readonly string Conv_1278 = "1278";
  63. private readonly string Conv_1283 = "1283";
  64. private readonly string Conv_1288 = "1288";
  65. private readonly string Conv_1293 = "1293";
  66. private readonly string Conv_1273 = "1273";
  67. private readonly string Conv_1260 = "1260";
  68. private readonly string Conv_1193 = "1193";
  69. private readonly string Conv_1182 = "1182";
  70. private readonly string Conv_1226 = "1226";
  71. private readonly string Conv_1231 = "1231";
  72. #endregion;
  73. #region WMS 调用
  74. private static int _WMSRun = 0;
  75. private void WMSRun()
  76. {
  77. if (Interlocked.Exchange(ref _WMSRun, 1) == 0)
  78. {
  79. try
  80. {
  81. ThreadHelper.TaskThread(Conv_Scanning_1185_WMS);
  82. }
  83. catch (Exception ex)
  84. {
  85. LogMessageHelper.RecordLogMessage(ex);
  86. }
  87. finally
  88. {
  89. Interlocked.Exchange(ref _WMSRun, 0);
  90. }
  91. }
  92. }
  93. #endregion;
  94. #region 重载实现
  95. /// <summary>
  96. /// 调度PLC执行任务
  97. /// </summary>
  98. public override void Run()
  99. {
  100. DateTime dt = DateTime.Now;
  101. //Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始WMSRun");
  102. WMSRun();
  103. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始Conv_ScanBarCodeExeTask");
  104. //扫码执行任务
  105. Conv_ScanBarCodeExeTask();
  106. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConveyorWriteTaskExecute");
  107. //输送线任务执行
  108. ConveyorWriteTaskExecute();
  109. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvCacheOutTask_1172");
  110. //1172缓存出库
  111. ThreadHelper.TaskThread(ConvCacheOutTask_1072);
  112. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTask_6_7_1115");
  113. ConvWriteTask_6_7(Conv_1115, Conv_1112, Conv_1114);//7#
  114. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTask_6_7_1110");
  115. ConvWriteTask_6_7(Conv_1110, Conv_1107, Conv_1109);//6#
  116. //电控无扫码执行任务
  117. //Conv_NoScanExeTask();
  118. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始SrmOutConvExeTask");
  119. //堆垛机出口任务执行
  120. SrmOutConvExeTask();
  121. //测试1117出口任务完成
  122. //ConvTaskFinish_1117();
  123. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTaskExe_1204");
  124. //输送机执行任务
  125. ConvWriteTaskExe_1204();
  126. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTaskExe_1460");
  127. //1460申请并且上传称重信息
  128. ConvWriteTaskExe_1460();
  129. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTaskExe_1044_1071");
  130. ConvWriteTaskExe_1044(Conv_1071);
  131. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTaskExe_1044_1072");
  132. ConvWriteTaskExe_1044(Conv_1072);
  133. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTaskExe_1071");
  134. ConvWriteTaskExe_1071();
  135. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvWriteTaskExe_1072");
  136. ConvWriteTaskExe_1072();
  137. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始BindingTray");
  138. BindingTray();
  139. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始CallEmptyOutTask");
  140. //码盘机托盘组出库
  141. ThreadHelper.TaskThread(CallEmptyOutTask);
  142. //写入尾箱信息
  143. WriteLastBoxInfo();
  144. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConveyorTaskExecute");
  145. //修改任务状态
  146. ThreadHelper.TaskThread(ConveyorTaskExecute);
  147. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConvtaskFinish");
  148. //出口任务完成
  149. ConvTaskFinish();
  150. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlc02开始ConveyorFinish_1199");
  151. //1199手动出库任务完成
  152. ThreadHelper.TaskThread(ConveyorFinish_1199);
  153. Log4netHelper.Logger_ProductLog.InfoFormat("ConvPlce02开始AgvRun");
  154. //Agv信号对接
  155. AgvRun();
  156. DateTime dt2 = DateTime.Now;
  157. if (dt.AddSeconds(2) <= dt2)
  158. {
  159. Log4netHelper.Logger_ProductLog.InfoFormat(string.Format("开始时间[{0}]结束时间[{1}]", dt.ToString("yyyy-MM-dd hh:mm:ss ffff"), dt2.ToString("yyyy-MM-dd hh:mm:ss ffff")));
  160. }
  161. Log4netHelper.Logger_ProductLog.InfoFormat("结束");
  162. }
  163. #region 模块调用
  164. /// <summary>
  165. /// 输送线无扫码执行任务
  166. /// </summary>
  167. /// <param name="convNo">扫码输送线</param>
  168. /// <param name="exitNo">扫码异常退出口</param>
  169. /// <param name="endPosIsCurConv">目标地址是否当前输送线</param>
  170. /// <param name="plcindex">PLC索引</param>
  171. private void Conv_NotScannExeTask(string convNo, string exitNo, bool endPosIsCurConv = false, int plcindex = 0)
  172. {
  173. try
  174. {
  175. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  176. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  177. var cs = conveyor.EquSignal_Conv;
  178. if (cs.DB523_Fault) return;
  179. if (!cs.DB521_Request) return;
  180. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDFROM == convNo && v.TASK_POSIDCUR == convNo && v.TASK_POSIDNEXT == convNo && v.TASK_WKSTATUS <= 1);
  181. if (task == null)
  182. {
  183. throw new Exception(string.Format("输送线[{0}]有请求未查询到任务信息", convNo));
  184. }
  185. var converywrite = new WCSWriteToConveyorSignal();
  186. converywrite.Plc = plc.PlcInstanceSet[plcindex];//plc.Plc;
  187. converywrite.DBName = plc.WriteDBName;
  188. converywrite.ConveyorNo = convNo;
  189. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  190. converywrite.Tasknum = task.TASK_NO;
  191. converywrite.Goodscode = 0;
  192. converywrite.Goodstype = 0;
  193. converywrite.Goodssize = 0;
  194. converywrite.Goodsstart = Convert.ToInt32(convNo);
  195. converywrite.isClearPalletizingPos = true;
  196. if (endPosIsCurConv)
  197. {
  198. converywrite.Goodsend = converywrite.Goodsstart;
  199. }
  200. else
  201. {
  202. //if (task.TASK_POSIDTO == srm)
  203. //{
  204. // ThreadHelper.TaskThread(BaseWorkflow.AssignSrm, task, 2000);
  205. // return;
  206. //}
  207. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  208. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  209. if (routes.Count == 1)
  210. {
  211. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  212. }
  213. else
  214. {
  215. converywrite.Goodsend = ConveyorWriteTaskExecuteToMoreAddress(convNo, task, routes);
  216. }
  217. }
  218. WriteInfoToConv(cs, converywrite);
  219. }
  220. catch (Exception ex)
  221. {
  222. LogMessageHelper.RecordLogMessage(ex);
  223. }
  224. }
  225. private static int _callEmptyOutTask = 0;
  226. /// <summary>
  227. /// 码盘机托盘组出库
  228. /// </summary>
  229. private void CallEmptyOutTask()
  230. {
  231. if (Interlocked.Exchange(ref _callEmptyOutTask, 1) == 0)
  232. {
  233. try
  234. {
  235. Thread.Sleep(10000);
  236. if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == Conv_1185))
  237. {
  238. var conv = ConveyorHelper.GetConveyorSignal(PlcName, Conv_1185);
  239. if (conv.CvDB51_PH_Status) return;
  240. if (conv.DB521_Tasknum > 0) return;
  241. if (conv.DB521_Notask) return;
  242. if (conv.DB521_BCR_Noread) return;
  243. if (conv.DB521_Request) return;
  244. if (conv.DB520_Confirm) return;
  245. var param = new GetOutTaskParam()
  246. {
  247. OutId = Guid.NewGuid().ToString(),
  248. OutEndPostion = Conv_1185,
  249. OutType = 2,
  250. WareHouseId = Current.Pvchouseputong
  251. };
  252. BaseWorkflow.GetOutTask(param);
  253. }
  254. }
  255. catch (Exception ex)
  256. {
  257. LogMessageHelper.RecordLogMessage(ex);
  258. }
  259. finally
  260. {
  261. Interlocked.Exchange(ref _callEmptyOutTask, 0);
  262. }
  263. }
  264. }
  265. /// <summary>
  266. /// 写入尾箱信息
  267. /// </summary>
  268. private void WriteLastBoxInfo()
  269. {
  270. string convPosFrom = "";
  271. try
  272. {
  273. var sysset = SugarBase.DB.Queryable<WCS_SYSSET>().First(v => v.SET_TYPE == "PalletizingPos" && v.SET_VALUE == "1");
  274. if (sysset == null) return;
  275. //var dt = Convert.ToDateTime(sysset.SET_EDITTIME);
  276. //if (dt.AddMinutes(20) > SugarBase.DB.GetDate()) return;
  277. convPosFrom = sysset.SET_ID;
  278. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == sysset.SET_ID && v.TASK_COMTYPE == 4))
  279. {
  280. throw new Exception(string.Format("机械手码垛位置[{0}]存在切单信号但写入尾箱信息失败,原因:工位[{1}]存在未完成的任务。", sysset.SET_ID,sysset.SET_ID));
  281. }
  282. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  283. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == sysset.SET_ID);
  284. var cs = conveyor.EquSignal_Conv;
  285. if (cs.DB521_Request)
  286. {
  287. throw new Exception(string.Format("机械手码垛位置[{0}]写入尾箱信息失败,原因:存在请求,需要先处理请求信号。", sysset.SET_ID));
  288. }
  289. if (cs.DB520_Confirm)
  290. {
  291. throw new Exception(string.Format("机械手码垛位置[{0}]写入尾箱信息失败,原因: 520存在确认信号Confirm值,请先处理。", sysset.SET_ID));
  292. }
  293. if (!cs.CvDB51_PH_Status)
  294. {
  295. throw new Exception(string.Format("机械手码垛位置[{0}]写入尾箱信息失败,原因:没有光电信号。", sysset.SET_ID));
  296. }
  297. if (cs.DB521_Tasknum <= 0)
  298. {
  299. throw new Exception(string.Format("机械手码垛位置[{0}]写入尾箱信息失败,原因:没有任务号。", sysset.SET_ID));
  300. }
  301. if (cs.DB521_Goodsend != Convert.ToInt32(sysset.SET_ID))
  302. {
  303. throw new Exception(string.Format("机械手码垛位置[{0}]写入尾箱信息失败,原因:该位置目标地址不等于当前输送线编号。", sysset.SET_ID));
  304. }
  305. if (cs.DB520_Res01)
  306. {
  307. throw new Exception(string.Format("机械手码垛位置[{0}]写入尾箱信息失败,原因:DB520_Res01存在信号,不需要重复写入。", sysset.SET_ID));
  308. }
  309. if (cs.DB521_Res02)
  310. {
  311. throw new Exception(string.Format("机械手码垛位置[{0}]写入尾箱信息失败,原因:DB521_Res02存在信号,不需要重复写入。", sysset.SET_ID));
  312. }
  313. string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  314. string result = TryCachHelper.TryTranExecute((db) =>
  315. {
  316. db.Updateable<WCS_SYSSET>(it => new WCS_SYSSET() { SET_VALUE = "0", SET_EDITTIME = date })
  317. .Where(it => it.SET_ID == sysset.SET_ID)
  318. .ExecuteCommand();
  319. if (WCS_PLCItem.Plc.WriteBits((ushort)WCS_PLCItem.WriteDBName, (uint)((cs.EquDbInfo_ReadWrite.DBReadIndox + 17) * 8 + 6), true))
  320. {
  321. Log4netHelper.Logger_Info.InfoFormat(string.Format("机械手码垛位置[{0}]写入强制完成信号成功!", sysset.SET_ID));
  322. }
  323. else
  324. {
  325. throw new Exception(string.Format("机械手码垛位置[{0}]写入强制完成信号失败!", sysset.SET_ID));
  326. }
  327. });
  328. if (!string.IsNullOrWhiteSpace(result)) throw new Exception(result);
  329. }
  330. catch (Exception ex)
  331. {
  332. BaseWorkflow.AddLedErrorMsg(convPosFrom, ex.Message, 0);
  333. LogMessageHelper.RecordLogMessage(ex);
  334. }
  335. }
  336. private void AgvRun()
  337. {
  338. //agv申请取货
  339. AgvRequestOnMat();
  340. //PLC允许取货
  341. ConvEnableOnMat();
  342. //agv取货完成
  343. AgvFinishOnMat();
  344. //PLC允许离开(取货完成)
  345. ConvEnableAgvLeave();
  346. //agv申请放货
  347. AgvRequestUpMat();
  348. //PLC允许放货
  349. ConvEnableUpMat();
  350. //agv放货完成
  351. AgvFinishUpMat();
  352. //PLC允许离开(放货完成)
  353. ConvEnableAgvLeave_OnMat();
  354. //Agv对接完成后输送线请求(6#)
  355. RequestByAgvConv(Conv_1107, Conv_1504);
  356. //Agv对接完成后输送线请求(7#)
  357. RequestByAgvConv(Conv_1112, Conv_1518);
  358. //Agv对接完成后输送线请求(4#,5#,18#)
  359. ConvRequestDeleteAgvSignal();
  360. }
  361. private void ConvWriteTask_6_7(string convNo, string agvPosNo, string scanningNo)
  362. {
  363. try
  364. {
  365. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  366. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  367. var cs = conveyor.EquSignal_Conv;
  368. if (!cs.DB521_Request) return;
  369. var converywrite = new WCSWriteToConveyorSignal();
  370. converywrite.Plc = plc.Plc;
  371. converywrite.DBName = plc.WriteDBName;
  372. converywrite.ConveyorNo = convNo;
  373. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  374. converywrite.Goodstype = 1;
  375. converywrite.Goodssize = 0;//
  376. converywrite.Goodsstart = Convert.ToInt32(convNo);
  377. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == cs.DB521_Tasknum && v.TASK_COMTYPE == 2);
  378. if (task == null)
  379. {
  380. converywrite.Tasknum = Convert.ToInt32(convNo);
  381. converywrite.Goodsend = Convert.ToInt32(scanningNo);
  382. //检测是否存在出库任务
  383. //if (CheckIsExistOutTask(convNo)) return;
  384. //WriteInfoToConveyor(cs, converywrite, true);
  385. WriteInfoToCv(cs, converywrite, true);
  386. }
  387. else
  388. {
  389. //检测AGV对接工位是否为空
  390. var agvconvNo = ConveyorHelper.GetConveyorSignal(PlcName, agvPosNo);
  391. if (agvconvNo.DB521_Tasknum > 0 || agvconvNo.CvDB51_PH_Status || agvconvNo.DB521_Request)
  392. {
  393. return;
  394. }
  395. converywrite.Goodstype = task.TASK_BOXBARCODE.Substring(0, 2) == "SH" ? 1 : 2;
  396. converywrite.Tasknum = task.TASK_NO;
  397. //var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  398. //var route = routeSet.FirstOrDefault(v => v.ROUTE_STARTPOS == convNo);
  399. converywrite.Goodsend = Convert.ToInt32(agvPosNo);
  400. WriteInfoToConv(cs, converywrite);
  401. }
  402. }
  403. catch (Exception ex)
  404. {
  405. LogMessageHelper.RecordLogMessage(ex);
  406. }
  407. }
  408. private void ConvTaskFinish()
  409. {
  410. ConveyorTaskFinish(PlcName, Conv_1185);
  411. ConveyorTaskFinish(PlcName, Conv_1285);
  412. ConveyorTaskFinish(PlcName, Conv_1286);
  413. ConveyorTaskFinish(PlcName, Conv_1288, true);
  414. ConveyorTaskFinish(PlcName, Conv_1293, true);
  415. //ConveyorTaskFinish(PlcName, Conv_1454);
  416. //ConveyorTaskFinish(PlcName, Conv_1199, false, true);
  417. //ConveyorTaskFinish(PlcName, "1198", false, true);
  418. }
  419. private static int _conveyorFinish_1199 = 0;
  420. /// <summary>
  421. /// 输送线任务完成
  422. /// </summary>
  423. public void ConveyorFinish_1199()
  424. {
  425. if (Interlocked.Exchange(ref _conveyorFinish_1199, 1) == 0)
  426. {
  427. try
  428. {
  429. List<string> list = new List<string>();
  430. list.Add("1196");
  431. list.Add("1197");
  432. list.Add("1198");
  433. list.Add("1199");
  434. var tasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_POSIDNEXT == Conv_1196 || v.TASK_POSIDNEXT == Conv_1199).ToList();
  435. tasks = tasks.Where(v => list.Contains(v.TASK_POSIDCUR)).ToList();
  436. foreach (var item in tasks)
  437. {
  438. bool isupdate = false;
  439. int agvStatus = 0;
  440. if (item.TASK_POSIDTO.Contains("Pvc_18"))
  441. {
  442. if (Current.SysSets.FirstOrDefault(v => v.SET_ID == "Agv_18#").SET_VALUE == "1")
  443. {
  444. isupdate = true;
  445. agvStatus = 99;
  446. }
  447. else
  448. {
  449. int task_id = string.IsNullOrWhiteSpace(item.TASK_ITEM8) ? 0 : Convert.ToInt32(item.TASK_ITEM8);
  450. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().First(v => v.Task_Id == task_id);
  451. if (agvtask == null || (agvtask.Task_AgvStatus == 99 && agvtask.Task_WcsStatus == 4))
  452. {
  453. isupdate = true;
  454. agvStatus = 0;
  455. }
  456. }
  457. }
  458. else
  459. {
  460. isupdate = true;
  461. agvStatus = 99;
  462. }
  463. if (isupdate)
  464. {
  465. string result = TryCachHelper.TryTranExecute((db) =>
  466. {
  467. //修改任务的状态
  468. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  469. .Where(it => it.TASK_NO == item.TASK_NO)
  470. .ExecuteCommand();
  471. int task_id = string.IsNullOrWhiteSpace(item.TASK_ITEM8) ? 0 : Convert.ToInt32(item.TASK_ITEM8);
  472. if (task_id > 0)
  473. {
  474. if (agvStatus > 0)
  475. {
  476. //标识agv任务Wcs完成状态
  477. db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  478. {
  479. Task_WcsStatus = 99,
  480. Task_AgvStatus = 99,
  481. Task_UpdateUser = "wcs",
  482. Task_UpdateDate = DateTime.Now
  483. })
  484. .Where(it => it.Task_Id == task_id)
  485. .ExecuteCommand();
  486. }
  487. else
  488. {
  489. if (db.Queryable<Middle_AGVTask>().Any(v => v.Task_Id == task_id))
  490. {
  491. //标识agv任务Wcs完成状态
  492. db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  493. {
  494. Task_WcsStatus = 99,
  495. Task_UpdateUser = "wcs",
  496. Task_UpdateDate = DateTime.Now
  497. })
  498. .Where(it => it.Task_Id == task_id)
  499. .ExecuteCommand();
  500. }
  501. }
  502. }
  503. });
  504. }
  505. }
  506. }
  507. catch (Exception ex)
  508. {
  509. LogMessageHelper.RecordLogMessage(ex);
  510. }
  511. finally
  512. {
  513. Interlocked.Exchange(ref _conveyorFinish_1199, 0);
  514. }
  515. }
  516. }
  517. private void ConveyorWriteTaskExecute()
  518. {
  519. ConveyorWriteTaskExecute(Conv_1179);
  520. ConveyorWriteTaskExecute(Conv_1098);
  521. ConveyorWriteTaskExecute(Conv_1105);
  522. ConveyorWriteTaskExecute(Conv_1092);//4#
  523. ConveyorWriteTaskExecute(Conv_1099);//5#
  524. ConveyorWriteTaskExecute(Conv_1504);//6#
  525. ConveyorWriteTaskExecute(Conv_1518);//7#
  526. ConveyorWriteTaskExecute(Conv_1221);
  527. ConveyorWriteTaskExecute(Conv_1246);
  528. Conv_NotScannExeTask(Conv_1288, string.Empty, true);
  529. Conv_NotScannExeTask(Conv_1293, string.Empty, true);
  530. Conv_NotScannExeTask(Conv_1285, string.Empty, true);
  531. Conv_NotScannExeTask(Conv_1286, string.Empty, true);
  532. ConveyorWriteTaskExecute(Conv_1273);
  533. ConveyorWriteTaskExe(Conv_1226);
  534. ConveyorWriteTaskExe(Conv_1231);
  535. ConveyorWriteTaskExe(Conv_1234);
  536. ConveyorWriteTaskExe(Conv_1251);
  537. ConveyorWriteTaskExe(Conv_1257);
  538. ConveyorWriteTaskExe(Conv_1252);
  539. ConveyorWriteTaskExe(Conv_1258);
  540. ConveyorWriteTaskExe(Conv_1261);
  541. ConveyorWriteTaskExe(Conv_1278);
  542. ConveyorWriteTaskExe(Conv_1283);
  543. }
  544. private void SrmOutConvExeTask()
  545. {
  546. SrmOutConvExeTask(PlcName, Conv_1051);
  547. SrmOutConvExeTask(PlcName, Conv_1056);
  548. SrmOutConvExeTask(PlcName, Conv_1172, true);
  549. SrmOutConvExeTask(PlcName, Conv_1173, true);
  550. SrmOutConvExeTask(PlcName, Conv_1036, true);
  551. SrmOutConvExeTask(PlcName, Conv_1035, true);
  552. SrmOutConvExeTask(PlcName, Conv_1178, true);
  553. SrmOutConvExeTask(PlcName, Conv_1177, false);
  554. }
  555. /// <summary>
  556. /// 扫码执行任务
  557. /// </summary>
  558. private void Conv_ScanBarCodeExeTask()
  559. {
  560. //4#入库申请
  561. Conv_Scanning(Conv_1094, Conv_1097);
  562. //5#入库申请
  563. Conv_Scanning_1102();
  564. //18#入库申请
  565. Conv_ScanningRequestIn(Conv_1200, Conv_1200);
  566. //6#入库申请
  567. Conv_ScanningRequestIn(Conv_1109, Conv_1110);
  568. //7#入库申请
  569. Conv_ScanningRequestIn(Conv_1114, Conv_1115);
  570. //拆盘机拆盘扫码请求
  571. Conv_Scanning_1185_WCS();
  572. }
  573. #endregion;
  574. #region 功能实现
  575. private static int _convCacheOutTask_1072 = 0;
  576. private void ConvCacheOutTask_1072()
  577. {
  578. if (Interlocked.Exchange(ref _convCacheOutTask_1072, 1) == 0)
  579. {
  580. try
  581. {
  582. Thread.Sleep(60000);
  583. int conv1072_num = Current.TaskSet.Count(v => v.TASK_POSIDTO == Conv_1072);
  584. if (conv1072_num < 3)
  585. {
  586. var param = new GetOutTaskParam()
  587. {
  588. OutId = Guid.NewGuid().ToString(),
  589. OutEndPostion = Conv_1072,
  590. OutType = 2,
  591. WareHouseId = Current.Pvchouseputong
  592. };
  593. BaseWorkflow.GetOutTask(param);
  594. }
  595. }
  596. catch (Exception ex)
  597. {
  598. LogMessageHelper.RecordLogMessage(ex);
  599. }
  600. finally
  601. {
  602. Interlocked.Exchange(ref _convCacheOutTask_1072, 0);
  603. }
  604. }
  605. }
  606. public void ConveyorWriteTaskExe_WMS(string convNo)
  607. {
  608. try
  609. {
  610. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo).EquSignal_Conv;
  611. if (equ_conv.DB523_Fault) return;
  612. if (!equ_conv.CvDB51_PH_Status) return;
  613. if (!equ_conv.DB521_Request) return;
  614. if (equ_conv.DB521_Tasknum <= 0) return;
  615. if (equ_conv.DB521_Res04_1 == 5)//码垛正常完成
  616. {
  617. string barcode = SugarBase.DB.Queryable<WCS_SYSSET>().First(v => v.SET_ID == convNo).SET_MEMO.Trim();
  618. if (!Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode))
  619. {
  620. int contype = equ_conv.DB520_Res02 ? 2 : 1;
  621. var param = new GetInTaskParam();
  622. param.ContainerBarCode = barcode;
  623. param.ContainerType = contype;
  624. param.MatBarCode = string.Empty;
  625. param.WareHouseId = Current.Pvchouseputong;
  626. param.EquipmentNo = convNo;
  627. param.EndPostion = srm;
  628. ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  629. }
  630. }
  631. }
  632. catch (Exception ex)
  633. {
  634. LogMessageHelper.RecordLogMessage(ex);
  635. }
  636. }
  637. public void ConveyorWriteTaskExe(string convNo)
  638. {
  639. try
  640. {
  641. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo).EquSignal_Conv;
  642. if (equ_conv.DB523_Fault) return;
  643. if (!equ_conv.CvDB51_PH_Status) return;
  644. if (!equ_conv.DB521_Request) return;
  645. if (equ_conv.DB521_Tasknum <= 0) return;
  646. var task =SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == equ_conv.DB521_Tasknum);
  647. if (equ_conv.DB521_Res04_1 == 1)//请求码垛
  648. {
  649. bool isHaveSonTray = true;//是否有子托盘
  650. //var palletizingCodeSet = SugarBase.DB.Queryable<WCS_PalletizingCode>().ToList();
  651. //WCS_PalletizingCode palletizingCode = null;
  652. if (task == null || task.TASK_COMTYPE == 1 || task.TASK_WKSTATUS >= 99)
  653. {
  654. throw new Exception(string.Format("输送线[{0}]请求码垛未查询到任务[{1}],无法获取码垛清单信息", convNo, equ_conv.DB521_Tasknum));
  655. }
  656. else
  657. {
  658. if (string.IsNullOrWhiteSpace(task.PalletizingSonTraySize))
  659. {
  660. isHaveSonTray = false;
  661. }
  662. else
  663. {
  664. if (Convert.ToInt32(task.PalletizingSonTraySize) > 0)
  665. {
  666. isHaveSonTray = true;
  667. if (task.SonTrayColorNo.GetValueOrDefault() <= 0 || task.SonTrayColorNo.GetValueOrDefault() > 3)
  668. {
  669. throw new Exception(string.Format("输送线[{0}]任务[{1}]有子托盘但无子托盘颜色编号(1.蓝;2.白;3.绿),不能码垛。", convNo, task.TASK_NO));
  670. }
  671. }
  672. else
  673. {
  674. isHaveSonTray = false;
  675. }
  676. }
  677. }
  678. // if (palletizingCode == null) return;
  679. if (task == null) return;
  680. var convwrite = new WCSWriteToConveyorSignal()
  681. {
  682. Plc = WCS_PLCItem.Plc,
  683. DBName = WCS_PLCItem.WriteDBName,
  684. ConveyorNo = convNo,
  685. WriteStartAddress = equ_conv.EquDbInfo_ReadWrite.DBReadIndox,
  686. Tasknum = task.TASK_NO,
  687. //Goodscode = palletizingCode.PalletizingBoxNo,
  688. //Goodstype = palletizingCode.PalletizingNo,
  689. //Goodssize = palletizingCode.PalletizingSonTrayNo,
  690. Goodscode = string.IsNullOrWhiteSpace(task.PalletizingBoxSize) ? 0 : Convert.ToInt32(task.PalletizingBoxSize),
  691. Goodstype = task.TASK_STACKINGTYPE,
  692. Goodssize = string.IsNullOrWhiteSpace(task.PalletizingSonTraySize) ? 0 : Convert.ToInt32(task.PalletizingSonTraySize),
  693. Goodsstart = Convert.ToInt32(convNo),
  694. Goodsend = Convert.ToInt32(convNo),
  695. Res02 = isHaveSonTray,
  696. TrayColor_One = task.SonTrayColorNo.GetValueOrDefault() == 1 ? true : false,
  697. TrayColor_Two = task.SonTrayColorNo.GetValueOrDefault() == 2 ? true : false,
  698. TrayColor_Three = task.SonTrayColorNo.GetValueOrDefault() == 3 ? true : false,
  699. Remark = convNo
  700. };
  701. WriteInfoToConv(equ_conv, convwrite);
  702. }
  703. if (equ_conv.DB521_Res04_1 == 5 || equ_conv.DB521_Res04_1 == 4)//码垛正常完成
  704. {
  705. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == convNo && (v.TASK_WKSTATUS == 99 || v.TASK_WKSTATUS == 109)))
  706. {
  707. throw new Exception(string.Format("工位[{0}]存在料箱未上报完成到WMS。", convNo));
  708. }
  709. var cv_1401 = ConveyorHelper.GetConveyorSignal("conveyor03", "1401");
  710. var cv_1416 = ConveyorHelper.GetConveyorSignal("conveyor03", "1416");
  711. if ((cv_1401.DB521_Request && cv_1401.DB521_Goodsend.ToString() == convNo) ||
  712. (cv_1416.DB521_Request && cv_1416.DB521_Goodsend.ToString() == convNo))
  713. {
  714. throw new Exception(string.Format("码垛工位[{0}]存在未上报完成的料箱,不能生成入库任务。", convNo));
  715. }
  716. string barcode = SugarBase.DB.Queryable<WCS_SYSSET>().First(v => v.SET_ID == convNo).SET_MEMO.Trim();
  717. var taskitem = SugarBase.DB.Queryable<WCS_TASK>().Single(v => v.TASK_BOXBARCODE == barcode && v.TASK_POSIDFROM == convNo && v.TASK_WKSTATUS <= 1);
  718. if (taskitem == null)
  719. {
  720. Log4netHelper.Logger_Info.InfoFormat(string.Format("码垛位置[{0}]条码[{1}]获取到机械手传递的高度是否超过1.7[{2}]", convNo, barcode, equ_conv.DB521_Res01));
  721. int contype = equ_conv.DB521_Res01 ? 2 : 1;
  722. var param = new GetInTaskParam()
  723. {
  724. ContainerBarCode = barcode,
  725. ContainerType = contype,
  726. MatBarCode = string.Empty,
  727. WareHouseId = Current.Pvchouseputong,
  728. EquipmentNo = convNo,
  729. EndPostion = "srm"
  730. };
  731. task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  732. }
  733. else
  734. {
  735. int goodsend = 0;
  736. var routeSet = EquRouteHelper.QueryRoute(convNo, taskitem.TASK_POSIDTO);
  737. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  738. if (routes.Count() == 0)
  739. {
  740. throw new Exception(string.Format("输送线[{0}]任务[{1}]查询路由失败。", convNo, taskitem.TASK_NO));
  741. }
  742. else
  743. {
  744. goodsend = Convert.ToInt32(routes.First().ROUTE_SONPOS);
  745. }
  746. if (goodsend == 0) return;
  747. if (convNo == Conv_1234) goodsend = 1235;
  748. else if (convNo == Conv_1261) goodsend = 1262;
  749. var convwrite = new WCSWriteToConveyorSignal()
  750. {
  751. Plc = WCS_PLCItem.Plc,
  752. DBName = WCS_PLCItem.WriteDBName,
  753. ConveyorNo = convNo,
  754. WriteStartAddress = equ_conv.EquDbInfo_ReadWrite.DBReadIndox,
  755. Tasknum = taskitem.TASK_NO,
  756. Goodsstart = Convert.ToInt32(convNo),
  757. isClearPalletizingPos = true,
  758. Goodsend = goodsend
  759. };
  760. WriteInfoToConv(equ_conv, convwrite);
  761. }
  762. }
  763. }
  764. catch (Exception ex)
  765. {
  766. LogMessageHelper.RecordLogMessage(ex);
  767. }
  768. }
  769. //private static int _proLineWeigh = 0;
  770. //private void ProLineWeigh()
  771. //{
  772. // if (Interlocked.Exchange(ref _proLineWeigh, 1) == 0)
  773. // {
  774. // try
  775. // {
  776. // int weight = 10000;//克
  777. // string convNo = "1460";
  778. // var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo).EquSignal_Conv;
  779. // //if (equ_conv.DB523_Fault) continue;
  780. // if (!equ_conv.CvDB51_PH_Status) return;
  781. // if (equ_conv.DB521_Res04 <= 2000) return;
  782. // if (equ_conv.DB521_Res04 < weight)
  783. // {
  784. // var msg = string.Format("输送机[{0}]处称重异常,当前重量[{1}]克,托盘预估重量[{2}]克以上。", convNo, equ_conv.DB521_Res04, weight);
  785. // LogMessageHelper.RecordLogMessage(msg);
  786. // return;
  787. // }
  788. // var tasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回).ToList();
  789. // var task = tasks.FirstOrDefault(v => v.TASK_POSIDCUR == convNo &&
  790. // string.IsNullOrWhiteSpace(v.TASK_ITEM3) &&
  791. // v.TASK_WKSTATUS < 99 && v.TASK_WKSTATUS != 7 && v.TASK_WKSTATUS != 4);
  792. // if (task == null) return;
  793. // var param = new GetWeightParam();
  794. // param.WMSTaskNum = task.TASK_WMSNO;
  795. // param.Weight = equ_conv.DB521_Res04;
  796. // BaseWorkflow.GetWeight(param);
  797. // }
  798. // catch (Exception ex)
  799. // {
  800. // LogMessageHelper.RecordLogMessage(ex);
  801. // }
  802. // finally
  803. // {
  804. // Interlocked.Exchange(ref _proLineWeigh, 0);
  805. // }
  806. // }
  807. //}
  808. /// <summary>
  809. /// 涂布车间人工上料(18#,6#,7#)
  810. /// </summary>
  811. /// <param name="convNo"></param>
  812. /// <param name="exitNo"></param>
  813. private void Conv_ScanningRequestIn(string convNo, string exitNo)
  814. {
  815. try
  816. {
  817. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  818. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  819. var cs = conveyor.EquSignal_Conv;
  820. if (!cs.DB521_Request) return;
  821. if (cs.DB520_Confirm) return;
  822. if (convNo == Conv_1200 && cs.DB521_Goodstype == 0)
  823. {
  824. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]外捡高度为零,WCS默认标识为1", convNo), true, LogLevelEnum.INFO.ToString());
  825. }
  826. WCS_TASK task = QueryTaskByBarcode(cs, convNo);
  827. //if (task == null)
  828. //{
  829. // if (CheckIsExistOutTask(convNo, cs.BarCodeStr))
  830. // {
  831. // //查询异常任务
  832. // task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_BOXBARCODE == cs.BarCodeStr && v.TASK_COMTYPE == 6);
  833. // }
  834. //}
  835. if (task == null)
  836. {
  837. var param = new GetInTaskParam();
  838. param.ContainerBarCode = cs.BarCodeStr;
  839. param.ContainerType = cs.DB521_Goodstype > 0 ? cs.DB521_Goodstype : 1;
  840. param.MatBarCode = string.Empty;
  841. param.WareHouseId = Current.Pvchouseputong;
  842. param.EquipmentNo = convNo;
  843. param.EndPostion = srm;
  844. //param.Memo3 = "1";//需要传递熟化类型,温度,时长
  845. param.Memo2 = exitNo;
  846. task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  847. }
  848. if (task == null) return;
  849. var converywrite = new WCSWriteToConveyorSignal();
  850. converywrite.Plc = plc.Plc;
  851. converywrite.DBName = plc.WriteDBName;
  852. converywrite.ConveyorNo = convNo;
  853. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  854. converywrite.Tasknum = task.TASK_NO;
  855. converywrite.Goodstype = 1;
  856. converywrite.Goodssize = 0;//
  857. converywrite.Goodsstart = Convert.ToInt32(convNo);
  858. //判断任务是否已经执行
  859. if (task.TASK_WKSTATUS >= 2) return;
  860. if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
  861. {
  862. converywrite.Notask = true;
  863. converywrite.Goodsend = Convert.ToInt32(exitNo);
  864. }
  865. else
  866. {
  867. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  868. var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == convNo);
  869. converywrite.Goodsend = Convert.ToInt32(route.ROUTE_SONPOS);
  870. }
  871. //检测存在出库任务
  872. //if (CheckIsExistOutTask(convNo, cs.BarCodeStr)) return;
  873. if (convNo == Conv_1200)
  874. {
  875. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]任务[{1}]条码[{2}]外检高度[{3}](零值默认为1)。", convNo, task.TASK_NO, cs.BarCodeStr, cs.DB521_Goodstype), true, LogLevelEnum.INFO.ToString());
  876. }
  877. WriteInfoToCv(cs, converywrite);
  878. }
  879. catch (Exception ex)
  880. {
  881. LogMessageHelper.RecordLogMessage(ex);
  882. }
  883. }
  884. /// <summary>
  885. /// Agv对接输送线请求删除与Agv对接信号
  886. /// </summary>
  887. public void ConvRequestDeleteAgvSignal()
  888. {
  889. try
  890. {
  891. var list = new Dictionary<string, string>();
  892. list.Add("1097", "1094");//4#
  893. list.Add("1104", "1102");//5#
  894. list.Add("1199", "");
  895. foreach (var item in list)
  896. {
  897. try
  898. {
  899. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  900. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Key);
  901. var cs = conveyor.EquSignal_Conv;
  902. if (cs.DB523_Fault) continue;
  903. if (!cs.DB521_Request) continue;
  904. //if (cs.CvDB51_PH_Status == false) continue;
  905. //if (cs.DB521_Tasknum == 0) continue;
  906. #region 检测AGV任务是否已经完成
  907. if (cs.DB521_Tasknum > 10000)
  908. {
  909. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_NO == cs.DB521_Tasknum);
  910. if (task != null && (!string.IsNullOrWhiteSpace(task.TASK_ITEM8)))
  911. {
  912. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().Single(v => v.Task_Id == Convert.ToInt32(task.TASK_ITEM8));
  913. if (agvtask != null &&
  914. (agvtask.Task_WcsStatus != 4 && agvtask.Task_WcsStatus != 99 && agvtask.Task_WcsStatus != 106))
  915. {
  916. throw new Exception(string.Format("输送线[{0}]收到清除AGV对接信号请求,任务[{1}]与AGV对接未完成,不能清除信号。", item.Key, cs.DB521_Tasknum));
  917. }
  918. }
  919. }
  920. #endregion;
  921. var convwrite = new WCSWriteToConveyorSignal();
  922. convwrite.Plc = WCS_PLCItem.Plc;
  923. convwrite.DBName = WCS_PLCItem.WriteDBName;
  924. convwrite.ConveyorNo = item.Key;
  925. convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  926. if (item.Key == Conv_1199)
  927. {
  928. convwrite.TaskDelete = true;
  929. }
  930. else
  931. {
  932. convwrite.Tasknum = Convert.ToInt32(item.Key);
  933. convwrite.Goodsstart = Convert.ToInt32(item.Key);
  934. convwrite.Goodsend = Convert.ToInt32(item.Value);
  935. if (cs.DB521_Goodstype == 2 || cs.CvDB51_PH_Status)
  936. {
  937. //检测是否存在出库任务
  938. if (CheckIsExistOutTask(item.Key)) return;
  939. }
  940. }
  941. WriteInfoToConv(cs, convwrite, true);
  942. }
  943. catch (Exception ex)
  944. {
  945. LogMessageHelper.RecordLogMessage(ex);
  946. }
  947. }
  948. }
  949. catch (Exception ex)
  950. {
  951. LogMessageHelper.RecordLogMessage(ex);
  952. }
  953. }
  954. /// <summary>
  955. /// 检测是否存在出库任务
  956. /// </summary>
  957. private bool CheckIsExistOutTask(string convNo, string barcode = "")
  958. {
  959. bool result = false;
  960. if (convNo == Conv_1112)//7#AGV对接工位
  961. {
  962. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1518 || v.TASK_POSIDNEXT == Conv_1115 || v.TASK_POSIDNEXT == Conv_1112) && v.TASK_POSIDCUR != Conv_1115))
  963. {
  964. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  965. result = true;
  966. }
  967. }
  968. else if (convNo == Conv_1107)//6#AGV对接工位
  969. {
  970. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1504 || v.TASK_POSIDNEXT == Conv_1110 || v.TASK_POSIDNEXT == Conv_1107) && v.TASK_POSIDCUR != Conv_1110))
  971. {
  972. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  973. result = true;
  974. }
  975. }
  976. else if (convNo == Conv_1114)//7#扫描位置
  977. {
  978. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1518 || v.TASK_POSIDNEXT == Conv_1115 || v.TASK_POSIDNEXT == Conv_1112) && (v.TASK_POSIDCUR != Conv_1112)))
  979. {
  980. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode)) return false;
  981. //生成退回异常任务
  982. string msg = string.Format("输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  983. LogMessageHelper.RecordLogMessage(msg);
  984. string errormsg = TryCachHelper.TryTranExecute((db) =>
  985. {
  986. BaseWorkflow.AddLedErrorMsg(db, Conv_1114, msg, 0);
  987. //wms任务异常需要生成退回托盘任务
  988. var wcstask = new WCS_TASK();
  989. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  990. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  991. wcstask.TASK_SYSTYPE = "WCS";
  992. wcstask.TASK_POSIDFROM = Conv_1114;//起点地址
  993. wcstask.TASK_POSIDCUR = Conv_1114;
  994. wcstask.TASK_POSIDNEXT = Conv_1114;
  995. wcstask.TASK_POSIDMOVE = "";
  996. wcstask.TASK_PRIORITY = 1;
  997. wcstask.TASK_WKSTATUS = 1;
  998. wcstask.TASK_WHID = "PVC原膜立库";
  999. wcstask.TASK_ADDUSERNO = "WCS";
  1000. wcstask.TASK_ADDDATETIME = DateTime.Now;
  1001. wcstask.TASK_EDITUSERNO = "WCS";
  1002. wcstask.TASK_EDITDATETIME = DateTime.Now;
  1003. wcstask.TASK_NOTES = "";
  1004. wcstask.TASK_RGVNO = "";
  1005. wcstask.TASK_BOXBARCODE = barcode;
  1006. wcstask.TASK_POSIDTO = Conv_1115;
  1007. //wcstask.TASK_NOTES = errormsg;
  1008. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  1009. if (id <= 0)
  1010. {
  1011. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  1012. }
  1013. else
  1014. {
  1015. wcstask.TASK_NO = id;
  1016. }
  1017. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  1018. });
  1019. if (!string.IsNullOrWhiteSpace(errormsg))
  1020. {
  1021. throw new Exception(errormsg);
  1022. }
  1023. result = true;
  1024. }
  1025. }
  1026. else if (convNo == Conv_1109)//6#扫描位置
  1027. {
  1028. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1504 || v.TASK_POSIDNEXT == Conv_1110 || v.TASK_POSIDNEXT == Conv_1107) && (v.TASK_POSIDCUR != Conv_1107)))
  1029. {
  1030. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode)) return false;
  1031. //生成退回异常任务
  1032. string msg = string.Format("输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  1033. LogMessageHelper.RecordLogMessage(msg);
  1034. string errormsg = TryCachHelper.TryTranExecute((db) =>
  1035. {
  1036. BaseWorkflow.AddLedErrorMsg(db, convNo, msg, 0);
  1037. //wms任务异常需要生成退回托盘任务
  1038. var wcstask = new WCS_TASK();
  1039. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  1040. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  1041. wcstask.TASK_SYSTYPE = "WCS";
  1042. wcstask.TASK_POSIDFROM = convNo;//起点地址
  1043. wcstask.TASK_POSIDCUR = convNo;
  1044. wcstask.TASK_POSIDNEXT = convNo;
  1045. wcstask.TASK_POSIDMOVE = "";
  1046. wcstask.TASK_PRIORITY = 1;
  1047. wcstask.TASK_WKSTATUS = 1;
  1048. wcstask.TASK_WHID = "PVC原膜立库";
  1049. wcstask.TASK_ADDUSERNO = "WCS";
  1050. wcstask.TASK_ADDDATETIME = DateTime.Now;
  1051. wcstask.TASK_EDITUSERNO = "WCS";
  1052. wcstask.TASK_EDITDATETIME = DateTime.Now;
  1053. wcstask.TASK_NOTES = "";
  1054. wcstask.TASK_RGVNO = "";
  1055. wcstask.TASK_BOXBARCODE = barcode;
  1056. wcstask.TASK_POSIDTO = Conv_1110;
  1057. //wcstask.TASK_NOTES = errormsg;
  1058. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  1059. if (id <= 0)
  1060. {
  1061. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  1062. }
  1063. else
  1064. {
  1065. wcstask.TASK_NO = id;
  1066. }
  1067. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  1068. });
  1069. if (!string.IsNullOrWhiteSpace(errormsg))
  1070. {
  1071. throw new Exception(errormsg);
  1072. }
  1073. result = true;
  1074. }
  1075. }
  1076. else if (convNo == Conv_1115)//7#人工上料位置
  1077. {
  1078. var tasks_1115 = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1518 || v.TASK_POSIDNEXT == Conv_1115 || v.TASK_POSIDNEXT == Conv_1112) && v.TASK_POSIDCUR != Conv_1112).ToList();
  1079. if (tasks_1115.Any(v => (v.TASK_POSIDCUR == Conv_1112 && v.TASK_BOXBARCODE.Contains("SH")) == false))
  1080. {
  1081. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  1082. result = true;
  1083. }
  1084. }
  1085. else if (convNo == Conv_1110)//6#人工上料位置
  1086. {
  1087. var tasks_1110 = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1504 || v.TASK_POSIDNEXT == Conv_1110 || v.TASK_POSIDNEXT == Conv_1107) &&
  1088. (v.TASK_POSIDCUR != Conv_1109)).ToList();
  1089. if (tasks_1110.Any(v => (v.TASK_POSIDCUR == Conv_1107 && v.TASK_BOXBARCODE.Contains("SH")) == false))
  1090. {
  1091. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  1092. result = true;
  1093. }
  1094. }
  1095. else if (convNo == Conv_1102)//5#扫描位置
  1096. {
  1097. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1099 || v.TASK_POSIDNEXT == Conv_1105) && v.TASK_POSIDCUR != Conv_1105))
  1098. {
  1099. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode)) return false;
  1100. //生成退回异常任务
  1101. string msg = string.Format("输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  1102. LogMessageHelper.RecordLogMessage(msg);
  1103. string errormsg = TryCachHelper.TryTranExecute((db) =>
  1104. {
  1105. BaseWorkflow.AddLedErrorMsg(db, convNo, msg, 0);
  1106. //wms任务异常需要生成退回托盘任务
  1107. var wcstask = new WCS_TASK();
  1108. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  1109. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  1110. wcstask.TASK_SYSTYPE = "WCS";
  1111. wcstask.TASK_POSIDFROM = convNo;//起点地址
  1112. wcstask.TASK_POSIDCUR = convNo;
  1113. wcstask.TASK_POSIDNEXT = convNo;
  1114. wcstask.TASK_POSIDMOVE = "";
  1115. wcstask.TASK_PRIORITY = 1;
  1116. wcstask.TASK_WKSTATUS = 1;
  1117. wcstask.TASK_WHID = "PVC原膜立库";
  1118. wcstask.TASK_ADDUSERNO = "WCS";
  1119. wcstask.TASK_ADDDATETIME = DateTime.Now;
  1120. wcstask.TASK_EDITUSERNO = "WCS";
  1121. wcstask.TASK_EDITDATETIME = DateTime.Now;
  1122. wcstask.TASK_NOTES = "";
  1123. wcstask.TASK_RGVNO = "";
  1124. wcstask.TASK_BOXBARCODE = barcode;
  1125. wcstask.TASK_POSIDTO = Conv_1104;
  1126. //wcstask.TASK_NOTES = errormsg;
  1127. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  1128. if (id <= 0)
  1129. {
  1130. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  1131. }
  1132. else
  1133. {
  1134. wcstask.TASK_NO = id;
  1135. }
  1136. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  1137. });
  1138. if (!string.IsNullOrWhiteSpace(errormsg))
  1139. {
  1140. throw new Exception(errormsg);
  1141. }
  1142. result = true;
  1143. }
  1144. }
  1145. else if (convNo == Conv_1094)//4#扫描位置
  1146. {
  1147. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1092 || v.TASK_POSIDNEXT == Conv_1098) && v.TASK_POSIDCUR != Conv_1098))
  1148. {
  1149. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode)) return false;
  1150. //生成退回异常任务
  1151. string msg = string.Format("输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  1152. LogMessageHelper.RecordLogMessage(msg);
  1153. string errormsg = TryCachHelper.TryTranExecute((db) =>
  1154. {
  1155. BaseWorkflow.AddLedErrorMsg(db, convNo, msg, 0);
  1156. //wms任务异常需要生成退回托盘任务
  1157. var wcstask = new WCS_TASK();
  1158. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  1159. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  1160. wcstask.TASK_SYSTYPE = "WCS";
  1161. wcstask.TASK_POSIDFROM = convNo;//起点地址
  1162. wcstask.TASK_POSIDCUR = convNo;
  1163. wcstask.TASK_POSIDNEXT = convNo;
  1164. wcstask.TASK_POSIDMOVE = "";
  1165. wcstask.TASK_PRIORITY = 1;
  1166. wcstask.TASK_WKSTATUS = 1;
  1167. wcstask.TASK_WHID = "PVC原膜立库";
  1168. wcstask.TASK_ADDUSERNO = "WCS";
  1169. wcstask.TASK_ADDDATETIME = DateTime.Now;
  1170. wcstask.TASK_EDITUSERNO = "WCS";
  1171. wcstask.TASK_EDITDATETIME = DateTime.Now;
  1172. wcstask.TASK_NOTES = "";
  1173. wcstask.TASK_RGVNO = "";
  1174. wcstask.TASK_BOXBARCODE = barcode;
  1175. wcstask.TASK_POSIDTO = Conv_1097;
  1176. //wcstask.TASK_NOTES = errormsg;
  1177. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  1178. if (id <= 0)
  1179. {
  1180. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  1181. }
  1182. else
  1183. {
  1184. wcstask.TASK_NO = id;
  1185. }
  1186. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  1187. });
  1188. if (!string.IsNullOrWhiteSpace(errormsg))
  1189. {
  1190. throw new Exception(errormsg);
  1191. }
  1192. result = true;
  1193. }
  1194. }
  1195. else if (convNo == Conv_1097)//5#AGV对接位置
  1196. {
  1197. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1092 || v.TASK_POSIDNEXT == Conv_1098 || v.TASK_POSIDNEXT == Conv_1097) && v.TASK_POSIDCUR != Conv_1098 && v.TASK_POSIDCUR != Conv_1097))
  1198. {
  1199. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  1200. result = true;
  1201. }
  1202. }
  1203. else if (convNo == Conv_1104)//5#AGV对接位置
  1204. {
  1205. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1099 || v.TASK_POSIDNEXT == Conv_1105 || v.TASK_POSIDNEXT == Conv_1104) && v.TASK_POSIDCUR != Conv_1105 && v.TASK_POSIDCUR != Conv_1104))
  1206. {
  1207. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  1208. result = true;
  1209. }
  1210. }
  1211. return result;
  1212. }
  1213. /// <summary>
  1214. /// Agv对接输送线请求(6#,7#)
  1215. /// </summary>
  1216. private void RequestByAgvConv(string convNo, string endConPosNo)
  1217. {
  1218. try
  1219. {
  1220. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1221. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  1222. var cs = conveyor.EquSignal_Conv;
  1223. if (cs.DB523_Fault) return;
  1224. if (!cs.DB521_Request) return;
  1225. if (cs.DB521_Tasknum == 0) return;
  1226. #region 检测AGV任务是否已经完成
  1227. if (cs.DB521_Tasknum > 10000)
  1228. {
  1229. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_NO == cs.DB521_Tasknum);
  1230. if (task != null && (!string.IsNullOrWhiteSpace(task.TASK_ITEM8)))
  1231. {
  1232. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().Single(v => v.Task_Id == Convert.ToInt32(task.TASK_ITEM8));
  1233. if (agvtask != null &&
  1234. (agvtask.Task_WcsStatus != 4 && agvtask.Task_WcsStatus != 99 && agvtask.Task_WcsStatus != 106))
  1235. {
  1236. throw new Exception(string.Format("输送线[{0}]收到清除AGV对接信号请求,任务[{1}]与AGV对接未完成,不能清除信号。", convNo, cs.DB521_Tasknum));
  1237. }
  1238. }
  1239. }
  1240. #endregion;
  1241. bool isMatureTray = false;//是否是熟化架
  1242. string barcode = string.Empty;
  1243. QueryInBarcode(cs.DB521_Tasknum, ref isMatureTray, ref barcode);
  1244. var convwrite = new WCSWriteToConveyorSignal();
  1245. convwrite.Plc = WCS_PLCItem.Plc;
  1246. convwrite.DBName = WCS_PLCItem.WriteDBName;
  1247. convwrite.ConveyorNo = convNo;
  1248. convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1249. if (isMatureTray)
  1250. {
  1251. //convwrite.TaskDelete = true;
  1252. WriteInfoToConv(cs, convwrite, true);
  1253. }
  1254. else
  1255. {
  1256. var taskitem = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_BOXBARCODE == barcode && v.TASK_COMTYPE == 1);
  1257. if (taskitem == null)
  1258. {
  1259. var param = new GetInTaskParam();
  1260. param.ContainerBarCode = barcode;
  1261. param.ContainerType = 1;
  1262. param.MatBarCode = string.Empty;
  1263. param.WareHouseId = Current.Pvchouseputong;
  1264. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().First(v => v.Task_BreakTrayNo == barcode && v.Task_Type == 2);//退料任务
  1265. if (agvtask != null)
  1266. {
  1267. param.EquipmentNo = agvtask.Task_PosidFrom;
  1268. param.Memo3 = agvtask.Task_BreakBarCode_1;
  1269. param.Memo4 = agvtask.Task_BreakBarCode_2;
  1270. }
  1271. else
  1272. {
  1273. param.EquipmentNo = convNo;
  1274. }
  1275. param.EndPostion = srm;
  1276. taskitem = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  1277. }
  1278. if (taskitem != null && taskitem.TASK_COMTYPE == 1)
  1279. {
  1280. if (taskitem.TASK_POSIDNEXT == endConPosNo) return;
  1281. //检测存在出库任务
  1282. //if (CheckIsExistOutTask(convNo)) return;
  1283. convwrite.Tasknum = taskitem.TASK_NO;
  1284. convwrite.Goodsstart = Convert.ToInt32(convNo);
  1285. convwrite.Goodsend = Convert.ToInt32(endConPosNo);
  1286. //WriteInfoToConv(cs, convwrite);
  1287. WriteInfoToCv(cs, convwrite);
  1288. }
  1289. }
  1290. }
  1291. catch (Exception ex)
  1292. {
  1293. LogMessageHelper.RecordLogMessage(ex);
  1294. }
  1295. }
  1296. private static void QueryInBarcode(int tasknum, ref bool isMatureTray, ref string barcode)
  1297. {
  1298. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == tasknum);
  1299. if (task == null)
  1300. {
  1301. var task_dis = SugarBase.DB.Queryable<WCS_TASK_DIS>().First(v => v.TASK_NO == tasknum);
  1302. if (task_dis != null)
  1303. {
  1304. isMatureTray = task_dis.TASK_BOXBARCODE.Substring(0, 2) == "SH" ? true : false;
  1305. barcode = task_dis.TASK_BOXBARCODE;
  1306. }
  1307. }
  1308. else
  1309. {
  1310. if (task.TASK_COMTYPE == 2)
  1311. {
  1312. //完成任务
  1313. string result = TryCachHelper.TryTranExecute((db) =>
  1314. {
  1315. //修改任务的状态
  1316. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  1317. .Where(it => it.TASK_NO == task.TASK_NO)
  1318. .ExecuteCommand();
  1319. //添加修改明细
  1320. string msg = string.Format("任务[{0}]完成", task.TASK_NO);
  1321. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  1322. });
  1323. if (!string.IsNullOrWhiteSpace(result))
  1324. {
  1325. throw new Exception(result);
  1326. }
  1327. }
  1328. isMatureTray = task.TASK_BOXBARCODE.Substring(0, 2) == "SH" ? true : false;
  1329. barcode = task.TASK_BOXBARCODE;
  1330. }
  1331. }
  1332. /// <summary>
  1333. /// Agv申请取货
  1334. /// </summary>
  1335. public void AgvRequestOnMat()
  1336. {
  1337. try
  1338. {
  1339. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 4).ToList();
  1340. agvtasks = agvtasks.Where(v => Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1341. foreach (var item in agvtasks)
  1342. {
  1343. try
  1344. {
  1345. if (item.Task_WcsStatus == 3) continue;
  1346. if (item.Task_WcsStatus == 106) continue;
  1347. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1348. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidFrom);
  1349. var cs = conveyor.EquSignal_Conv;
  1350. if (cs.DB523_Fault) continue;
  1351. if (cs.CvDB51_PH_Status == false) continue;
  1352. if (cs.DB521_Tasknum == 0) continue;
  1353. if (cs.DB520_Res02) continue;//已写入申请取货
  1354. var convwrite = new WCSWriteToConveyorSignal();
  1355. convwrite.Plc = WCS_PLCItem.Plc;
  1356. convwrite.DBName = WCS_PLCItem.WriteDBName;
  1357. convwrite.ConveyorNo = item.Task_PosidFrom.Trim();
  1358. convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1359. convwrite.Res02 = true;
  1360. if (convwrite.Plc.WriteBits((ushort)convwrite.DBName, (uint)((convwrite.WriteStartAddress + 17) * 8 + 7), true))
  1361. {
  1362. Log4netHelper.Logger_Info.InfoFormat(string.Format("任务[{0}]写入申请取货信号到输送线[{1}]成功!", convwrite.Tasknum, convwrite.ConveyorNo));
  1363. }
  1364. else
  1365. {
  1366. throw new Exception(string.Format("agv任务[{0}]写入申请取货信号到输送线[{1}]失败!", item.Task_Id, convwrite.ConveyorNo));
  1367. }
  1368. }
  1369. catch (Exception ex)
  1370. {
  1371. LogMessageHelper.RecordLogMessage(ex);
  1372. }
  1373. }
  1374. }
  1375. catch (Exception ex)
  1376. {
  1377. LogMessageHelper.RecordLogMessage(ex);
  1378. }
  1379. }
  1380. /// <summary>
  1381. /// 输送线PLC允许取货
  1382. /// </summary>
  1383. public void ConvEnableOnMat()
  1384. {
  1385. try
  1386. {
  1387. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 4).ToList();
  1388. agvtasks = agvtasks.Where(v=> Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1389. foreach (var item in agvtasks)
  1390. {
  1391. try
  1392. {
  1393. if (item.Task_WcsStatus == 3) continue;
  1394. if (item.Task_WcsStatus == 106) continue;
  1395. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1396. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidFrom);
  1397. if (conveyor == null) continue;
  1398. var cs = conveyor.EquSignal_Conv;
  1399. if (cs.DB523_Fault) continue;
  1400. if (cs.CvDB51_PH_Status == false) continue;
  1401. if (cs.DB521_Tasknum == 0) continue;
  1402. if (cs.DB521_L_Outside)
  1403. {
  1404. int task_no = string.IsNullOrWhiteSpace(item.Task_Remark) ? 0 : Convert.ToInt32(item.Task_Remark);
  1405. if (task_no == cs.DB521_Tasknum || task_no == 0)
  1406. {
  1407. //允许取货
  1408. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask() { Task_WcsStatus = 3, Task_UpdateUser = "wcs", Task_UpdateDate = DateTime.Now })
  1409. .Where(it => it.Task_Id == item.Task_Id)
  1410. .ExecuteCommand();
  1411. }
  1412. else
  1413. {
  1414. string msg = string.Format("输送线WCS任务号[{0}]是上一个任务,AGV任务WCS任务号[{1}]是下一个任务,请等待上一个回库。", cs.DB521_Tasknum, task_no);
  1415. throw new Exception(msg);
  1416. }
  1417. }
  1418. }
  1419. catch (Exception ex)
  1420. {
  1421. LogMessageHelper.RecordLogMessage(ex);
  1422. }
  1423. }
  1424. }
  1425. catch (Exception ex)
  1426. {
  1427. LogMessageHelper.RecordLogMessage(ex);
  1428. }
  1429. }
  1430. /// <summary>
  1431. /// Agv完成取货
  1432. /// </summary>
  1433. public void AgvFinishOnMat()
  1434. {
  1435. try
  1436. {
  1437. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 5 && (v.Task_WcsStatus == 4 || v.Task_WcsStatus == 3) && (v.Task_Type == 1 || v.Task_Type == 3)).ToList();
  1438. agvtasks = agvtasks.Where(v => Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1439. foreach (var item in agvtasks)
  1440. {
  1441. try
  1442. {
  1443. if (item.Task_WcsStatus == 4) continue;
  1444. if (item.Task_WcsStatus == 106) continue;
  1445. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1446. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidFrom.Trim());
  1447. var cs = conveyor.EquSignal_Conv;
  1448. if (cs.DB523_Fault) continue;
  1449. if (cs.DB520_Res03 == 1) continue;//已写入取货完成
  1450. var convwrite = new WCSWriteToConveyorSignal();
  1451. convwrite.Plc = WCS_PLCItem.Plc;
  1452. convwrite.DBName = WCS_PLCItem.WriteDBName;
  1453. convwrite.ConveyorNo = item.Task_PosidFrom.Trim();
  1454. convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1455. convwrite.Res03 = 1;
  1456. if (convwrite.Plc.WriteSignal((ushort)convwrite.DBName, (ushort)((convwrite.WriteStartAddress + 18)), 2, true))
  1457. {
  1458. Log4netHelper.Logger_Info.InfoFormat(string.Format("任务[{0}]写入取货完成信号到输送线[{1}]成功!", convwrite.Tasknum, convwrite.ConveyorNo));
  1459. }
  1460. else
  1461. {
  1462. throw new Exception(string.Format("agv任务[{0}]写入取货完成信号到输送线[{1}]失败!", item.Task_Id, convwrite.ConveyorNo));
  1463. }
  1464. }
  1465. catch (Exception ex)
  1466. {
  1467. LogMessageHelper.RecordLogMessage(ex);
  1468. }
  1469. }
  1470. }
  1471. catch (Exception ex)
  1472. {
  1473. LogMessageHelper.RecordLogMessage(ex);
  1474. }
  1475. }
  1476. /// <summary>
  1477. /// //输送线PLC允许Agv离开(取货完成)
  1478. /// </summary>
  1479. public void ConvEnableAgvLeave()
  1480. {
  1481. try
  1482. {
  1483. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 5 && (v.Task_Type == 1 || v.Task_Type == 3)).ToList();
  1484. agvtasks = agvtasks.Where(v => Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1485. foreach (var item in agvtasks)
  1486. {
  1487. try
  1488. {
  1489. if (item.Task_WcsStatus == 4) continue;
  1490. if (item.Task_WcsStatus == 106) continue;
  1491. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1492. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidFrom.Trim());
  1493. var cs = conveyor.EquSignal_Conv;
  1494. if (cs.DB523_Fault) continue;
  1495. if (cs.DB521_R_Outside)
  1496. {
  1497. //允许AGV离开
  1498. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask() { Task_WcsStatus = 4, Task_UpdateUser = "wcs", Task_UpdateDate = DateTime.Now })
  1499. .Where(it => it.Task_Id == item.Task_Id)
  1500. .ExecuteCommand();
  1501. }
  1502. }
  1503. catch (Exception ex)
  1504. {
  1505. LogMessageHelper.RecordLogMessage(ex);
  1506. }
  1507. }
  1508. }
  1509. catch (Exception ex)
  1510. {
  1511. LogMessageHelper.RecordLogMessage(ex);
  1512. }
  1513. }
  1514. /// <summary>
  1515. /// Agv申请放货
  1516. /// </summary>
  1517. public void AgvRequestUpMat()
  1518. {
  1519. try
  1520. {
  1521. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 2).ToList();
  1522. agvtasks = agvtasks.Where(v => Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1523. foreach (var item in agvtasks)
  1524. {
  1525. try
  1526. {
  1527. if (item.Task_WcsStatus == 2) continue;
  1528. if (item.Task_WcsStatus == 106) continue;
  1529. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1530. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidTo);
  1531. var cs = conveyor.EquSignal_Conv;
  1532. if (cs.DB523_Fault) continue;
  1533. if (cs.DB520_RollerTurn) continue;//已写入申请放货
  1534. var convwrite = new WCSWriteToConveyorSignal();
  1535. convwrite.Plc = WCS_PLCItem.Plc;
  1536. convwrite.DBName = WCS_PLCItem.WriteDBName;
  1537. convwrite.ConveyorNo = item.Task_PosidFrom.Trim();
  1538. convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1539. convwrite.UpMatRequest = true;
  1540. if (convwrite.Plc.WriteBits((ushort)convwrite.DBName, (uint)((convwrite.WriteStartAddress + 17) * 8 + 5), true))
  1541. {
  1542. Log4netHelper.Logger_Info.InfoFormat(string.Format("任务[{0}]写入申请放货信号到输送线[{1}]成功!", convwrite.Tasknum, convwrite.ConveyorNo));
  1543. }
  1544. else
  1545. {
  1546. throw new Exception(string.Format("agv任务[{0}]写入申请放货信号到输送线[{1}]失败!", item.Task_Id, convwrite.ConveyorNo));
  1547. }
  1548. }
  1549. catch (Exception ex)
  1550. {
  1551. LogMessageHelper.RecordLogMessage(ex);
  1552. }
  1553. }
  1554. }
  1555. catch (Exception ex)
  1556. {
  1557. LogMessageHelper.RecordLogMessage(ex);
  1558. }
  1559. }
  1560. /// <summary>
  1561. /// 输送线PLC允许放货
  1562. /// </summary>
  1563. public void ConvEnableUpMat()
  1564. {
  1565. try
  1566. {
  1567. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 2).ToList();
  1568. agvtasks = agvtasks.Where(v => Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1569. foreach (var item in agvtasks)
  1570. {
  1571. try
  1572. {
  1573. if (item.Task_WcsStatus == 2) continue;
  1574. if (item.Task_WcsStatus == 106) continue;
  1575. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1576. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidTo.Trim());
  1577. var cs = conveyor.EquSignal_Conv;
  1578. if (cs.DB523_Fault) continue;
  1579. bool isEnableUpMat = false;
  1580. if (item.Task_WorkshopNo == "18")
  1581. {
  1582. if (cs.DB521_Res03)
  1583. {
  1584. isEnableUpMat = true;
  1585. }
  1586. }
  1587. else
  1588. {
  1589. if (cs.DB521_Goodstype == 0 && cs.CvDB51_PH_Status == false && cs.DB521_Tasknum <= 0 && cs.DB521_F_Outside)//判断旋转台没有托盘和熟化架
  1590. {
  1591. isEnableUpMat = true;
  1592. }
  1593. else if (cs.DB521_Goodstype == 2 && cs.CvDB51_PH_Status && cs.DB521_F_Outside)//判断旋转台有原膜托盘
  1594. {
  1595. isEnableUpMat = true;
  1596. }
  1597. }
  1598. if (isEnableUpMat)
  1599. {
  1600. //允许放货
  1601. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask() { Task_WcsStatus = 2, Task_UpdateUser = "wcs", Task_UpdateDate = DateTime.Now })
  1602. .Where(it => it.Task_Id == item.Task_Id)
  1603. .ExecuteCommand();
  1604. }
  1605. }
  1606. catch (Exception ex)
  1607. {
  1608. LogMessageHelper.RecordLogMessage(ex);
  1609. }
  1610. }
  1611. }
  1612. catch (Exception ex)
  1613. {
  1614. LogMessageHelper.RecordLogMessage(ex);
  1615. }
  1616. }
  1617. /// <summary>
  1618. /// Agv完成放货
  1619. /// </summary>
  1620. public void AgvFinishUpMat()
  1621. {
  1622. try
  1623. {
  1624. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 3).ToList();
  1625. agvtasks = agvtasks.Where(v => Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1626. foreach (var item in agvtasks)
  1627. {
  1628. try
  1629. {
  1630. if (item.Task_WcsStatus == 4) continue;
  1631. if (item.Task_WcsStatus == 106) continue;
  1632. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1633. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidTo.Trim());
  1634. var cs = conveyor.EquSignal_Conv;
  1635. if (cs.DB523_Fault) continue;
  1636. if (cs.DB520_Res01) continue;//已写入放货完成
  1637. var convwrite = new WCSWriteToConveyorSignal();
  1638. convwrite.Plc = WCS_PLCItem.Plc;
  1639. convwrite.DBName = WCS_PLCItem.WriteDBName;
  1640. convwrite.ConveyorNo = item.Task_PosidFrom.Trim();
  1641. convwrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1642. convwrite.Res01 = true;
  1643. if (convwrite.Plc.WriteBits((ushort)convwrite.DBName, (uint)((convwrite.WriteStartAddress + 17) * 8 + 6), true))
  1644. {
  1645. Log4netHelper.Logger_Info.InfoFormat(string.Format("任务[{0}]写入放货完成信号到输送线[{1}]成功!", convwrite.Tasknum, convwrite.ConveyorNo));
  1646. }
  1647. else
  1648. {
  1649. throw new Exception(string.Format("agv任务[{0}]写入放货完成信号到输送线[{1}]失败!", item.Task_Id, convwrite.ConveyorNo));
  1650. }
  1651. }
  1652. catch (Exception ex)
  1653. {
  1654. LogMessageHelper.RecordLogMessage(ex);
  1655. }
  1656. }
  1657. }
  1658. catch (Exception ex)
  1659. {
  1660. LogMessageHelper.RecordLogMessage(ex);
  1661. }
  1662. }
  1663. /// <summary>
  1664. /// //输送线PLC允许Agv离开(放货完成)
  1665. /// </summary>
  1666. public void ConvEnableAgvLeave_OnMat()
  1667. {
  1668. try
  1669. {
  1670. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_AgvStatus == 3).ToList();
  1671. agvtasks = agvtasks.Where(v => Current.SysSets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE == "0")).ToList();
  1672. foreach (var item in agvtasks)
  1673. {
  1674. try
  1675. {
  1676. if (item.Task_WcsStatus == 4) continue;
  1677. if (item.Task_WcsStatus == 106) continue;
  1678. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1679. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.Task_PosidTo.Trim());
  1680. var cs = conveyor.EquSignal_Conv;
  1681. if (cs.DB523_Fault) continue;
  1682. bool isEnableUpMat = false;
  1683. if (item.Task_WorkshopNo == "18")
  1684. {
  1685. if (cs.DB521_Res04 != 0)
  1686. {
  1687. isEnableUpMat = true;
  1688. }
  1689. }
  1690. else
  1691. {
  1692. if (cs.DB521_B_Outside)
  1693. {
  1694. isEnableUpMat = true;
  1695. }
  1696. }
  1697. if (isEnableUpMat)
  1698. {
  1699. //允许AGV离开
  1700. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask() { Task_WcsStatus = 4, Task_UpdateUser = "wcs", Task_UpdateDate = DateTime.Now })
  1701. .Where(it => it.Task_Id == item.Task_Id)
  1702. .ExecuteCommand();
  1703. }
  1704. }
  1705. catch (Exception ex)
  1706. {
  1707. LogMessageHelper.RecordLogMessage(ex);
  1708. }
  1709. }
  1710. }
  1711. catch (Exception ex)
  1712. {
  1713. LogMessageHelper.RecordLogMessage(ex);
  1714. }
  1715. }
  1716. public override int ConveyorWriteTaskExecuteToMoreAddress(string convNo, WCS_TASK task, List<WCS_EQUIPMENTROUTE> routes)
  1717. {
  1718. int result = 0;
  1719. if (convNo == Conv_1105)
  1720. {
  1721. result = Convert.ToInt32(Conv_1099);
  1722. }
  1723. else if (convNo == Conv_1179)
  1724. {
  1725. if (convNo == Conv_1252 || convNo == Conv_1226 || convNo == Conv_1231 ||
  1726. convNo == Conv_1234 || convNo == Conv_1251 || convNo == Conv_1257 ||
  1727. convNo == Conv_1258 || convNo == Conv_1261 || convNo == Conv_1278 ||
  1728. convNo == Conv_1283 || convNo == Conv_1288 || convNo == Conv_1293)
  1729. {
  1730. //去机械码垛位置,指定到1182
  1731. result = Convert.ToInt32(Conv_1182);
  1732. }
  1733. else
  1734. {
  1735. result= Convert.ToInt32(Conv_1193);
  1736. }
  1737. }
  1738. else
  1739. {
  1740. result = base.ConveyorWriteTaskExecuteToMoreAddress(convNo, task, routes);
  1741. }
  1742. return result;
  1743. }
  1744. public override void SetConvwrite(WCSWriteToConveyorSignal convwrite, WCS_TASK task)
  1745. {
  1746. if (convwrite.ConveyorNo == Conv_1099 || convwrite.ConveyorNo == Conv_1504 ||
  1747. convwrite.ConveyorNo == Conv_1518 || convwrite.ConveyorNo == Conv_1092 || convwrite.ConveyorNo == Conv_1105 || convwrite.ConveyorNo == Conv_1098)
  1748. {
  1749. convwrite.Goodstype = task.TASK_BOXBARCODE.Substring(0, 2) == "SH" ? 1 : 2;
  1750. if (convwrite.ConveyorNo == Conv_1518)//7#
  1751. {
  1752. if (task.TASK_COMTYPE != 2)
  1753. {
  1754. throw new Exception(string.Format("输送线[{0}]有请求信号,但任务[{1}]不是出库任务。", convwrite.ConveyorNo, task.TASK_NO));
  1755. }
  1756. //检测是否存在原膜托盘任务
  1757. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE.Substring(0, 3) == "TPC" && (v.TASK_POSIDNEXT == Conv_1112 || v.TASK_POSIDNEXT == Conv_1115)))
  1758. {
  1759. convwrite.Goodsend = Convert.ToInt32(Conv_1115);//避障位
  1760. }
  1761. else
  1762. {
  1763. //检测1112输送线是否存在任务或光电信息
  1764. if (Current.TaskSet.Any(v => v.TASK_POSIDFROM == Conv_1112 && v.TASK_POSIDCUR == Conv_1112))
  1765. {
  1766. convwrite.Goodsend = Convert.ToInt32(Conv_1115);//避障位
  1767. }
  1768. else
  1769. {
  1770. var cv = ConveyorHelper.GetConveyorSignal(PlcName, Conv_1112);
  1771. if (cv.CvDB51_PH_Status && cv.DB521_Request || cv.DB521_Goodsend.ToString() == Conv_1518)
  1772. {
  1773. convwrite.Goodsend = Convert.ToInt32(Conv_1115);//避障位
  1774. }
  1775. else
  1776. {
  1777. convwrite.Goodsend = Convert.ToInt32(Conv_1112);
  1778. }
  1779. //if (cv.DB521_Tasknum > 0 || cv.CvDB51_PH_Status || cv.DB521_Request || cv.DB521_Goodstype == 2)
  1780. //{
  1781. // convwrite.Goodsend = Convert.ToInt32(Conv_1115);
  1782. //}
  1783. //else
  1784. //{
  1785. // convwrite.Goodsend = Convert.ToInt32(Conv_1112);
  1786. //}
  1787. }
  1788. }
  1789. }
  1790. else if (convwrite.ConveyorNo == Conv_1504)//6#
  1791. {
  1792. if (task.TASK_COMTYPE != 2)
  1793. {
  1794. throw new Exception(string.Format("输送线[{0}]有请求信号,但任务[{1}]不是出库任务。", convwrite.ConveyorNo, task.TASK_NO));
  1795. }
  1796. //检测是否存在原膜托盘任务
  1797. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE.Substring(0, 3) == "TPC" && (v.TASK_POSIDNEXT == Conv_1107 || v.TASK_POSIDNEXT == Conv_1110)))
  1798. {
  1799. convwrite.Goodsend = Convert.ToInt32(Conv_1110);//避障位
  1800. }
  1801. else
  1802. {
  1803. //检测1112输送线是否存在任务或光电信息
  1804. if (Current.TaskSet.Any(v => v.TASK_POSIDFROM == Conv_1107 && v.TASK_POSIDCUR == Conv_1107))
  1805. {
  1806. convwrite.Goodsend = Convert.ToInt32(Conv_1110);//避障位
  1807. }
  1808. else
  1809. {
  1810. var cv = ConveyorHelper.GetConveyorSignal(PlcName, Conv_1107);
  1811. if (cv.CvDB51_PH_Status && cv.DB521_Request || cv.DB521_Goodsend.ToString() == Conv_1518)
  1812. {
  1813. convwrite.Goodsend = Convert.ToInt32(Conv_1110);//避障位
  1814. }
  1815. else
  1816. {
  1817. convwrite.Goodsend = Convert.ToInt32(Conv_1107);
  1818. }
  1819. //if (cv.DB521_Tasknum > 0 || cv.CvDB51_PH_Status || cv.DB521_Request || cv.DB521_Goodstype == 2)
  1820. //{
  1821. // convwrite.Goodsend = Convert.ToInt32(Conv_1115);
  1822. //}
  1823. //else
  1824. //{
  1825. // convwrite.Goodsend = Convert.ToInt32(Conv_1112);
  1826. //}
  1827. }
  1828. }
  1829. }
  1830. else if (convwrite.ConveyorNo == Conv_1105)//5#避障位
  1831. {
  1832. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().First(v => v.Task_PosidTo == Conv_1104 && v.Task_WcsStatus > 0 && v.Task_Type != 2);
  1833. if (agvtask != null)
  1834. throw new Exception(string.Format("5#避障位不能出库,存在AGV入库任务[{0}]", agvtask.Task_Id));
  1835. }
  1836. else if (convwrite.ConveyorNo == Conv_1098)//4#避障位
  1837. {
  1838. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().First(v => v.Task_PosidTo == Conv_1097 && v.Task_WcsStatus > 0 && v.Task_Type != 2);
  1839. if (agvtask != null)
  1840. throw new Exception(string.Format("4#避障位不能出库,存在AGV入库任务[{0}]", agvtask.Task_Id));
  1841. }
  1842. else if (convwrite.ConveyorNo == Conv_1099)//5#穿梭车下料点
  1843. {
  1844. if (task.TASK_COMTYPE != 2)
  1845. {
  1846. throw new Exception(string.Format("输送线[{0}]有请求信号,但任务[{1}]不是出库任务。", convwrite.ConveyorNo, task.TASK_NO));
  1847. }
  1848. }
  1849. else if (convwrite.ConveyorNo == Conv_1092)//4#穿梭车下料点
  1850. {
  1851. if (task.TASK_COMTYPE != 2)
  1852. {
  1853. throw new Exception(string.Format("输送线[{0}]有请求信号,但任务[{1}]不是出库任务。", convwrite.ConveyorNo, task.TASK_NO));
  1854. }
  1855. }
  1856. }
  1857. }
  1858. //public void ConveyorWriteTaskExecute(string convNo, string nextNo, bool endPosIsCurConv = false)
  1859. //{
  1860. // try
  1861. // {
  1862. // var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo).EquSignal_Conv;
  1863. // if (equ_conv.DB523_Fault) return;
  1864. // if (!equ_conv.CvDB51_PH_Status) return;
  1865. // if (!equ_conv.DB521_Request) return;
  1866. // if (equ_conv.DB521_Tasknum <= 0) return;
  1867. // var task = Current.TaskSet.FirstOrDefault(v => v.TASK_NO == equ_conv.DB521_Tasknum);
  1868. // if (task.TASK_POSIDNEXT != convNo) return;
  1869. // if (task.TASK_WKSTATUS == 7 || task.TASK_WKSTATUS == 3 || task.TASK_WKSTATUS == 4) return;
  1870. // if (equ_conv.DB521_H_Outside)
  1871. // {
  1872. // if (task.TASK_POSIDTO == srm) return;
  1873. // }
  1874. // var convwrite = new WCSWriteToConveyorSignal();
  1875. // convwrite.Plc = WCS_PLCItem.Plc;
  1876. // convwrite.DBName = WCS_PLCItem.WriteDBName;
  1877. // convwrite.ConveyorNo = convNo;
  1878. // convwrite.WriteStartAddress = equ_conv.EquDbInfo_ReadWrite.DBReadIndox;
  1879. // convwrite.Tasknum = task.TASK_NO;
  1880. // convwrite.Goodscode = 0;//待定
  1881. // convwrite.Goodstype = 0;
  1882. // convwrite.Goodssize = 0;//待定
  1883. // convwrite.Goodsstart = Convert.ToInt32(convNo);
  1884. // if (endPosIsCurConv)
  1885. // {
  1886. // convwrite.Goodsend = convwrite.Goodsstart;
  1887. // }
  1888. // else
  1889. // {
  1890. // convwrite.Goodsend = Convert.ToInt32(nextNo);
  1891. // }
  1892. // WriteInfoToConveyor(equ_conv, convwrite);
  1893. // }
  1894. // catch (Exception ex)
  1895. // {
  1896. // LogMessageHelper.RecordLogMessage(ex);
  1897. // }
  1898. //}
  1899. private void ConvWriteTaskExe_1071()
  1900. {
  1901. try
  1902. {
  1903. var convitem = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1071).EquSignal_Conv;
  1904. if (convitem.DB521_Tasknum <= 0) return;
  1905. if (!convitem.DB521_Request) return;
  1906. //if (!convitem.CvDB51_PH_Status) return;
  1907. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == convitem.DB521_Tasknum);
  1908. if (string.IsNullOrWhiteSpace(task.TASK_ITEM1)) return;
  1909. if (string.IsNullOrWhiteSpace(task.TASK_ITEM5)) return;//检查是否绑定了第一个原膜卷
  1910. string endAddress = string.Empty;
  1911. if (Current.TaskSet.Any(v => v.TASK_ITEM1 == task.TASK_ITEM1 && v.TASK_NO != task.TASK_NO && v.TASK_POSIDNEXT != Conv_1070 && v.TASK_SRMNO == "srm01"))
  1912. {
  1913. //到1072
  1914. endAddress = Conv_1072;
  1915. }
  1916. else
  1917. {
  1918. endAddress = Conv_1085;
  1919. }
  1920. if (task.TASK_POSIDNEXT == endAddress) return;
  1921. var convwrite = new WCSWriteToConveyorSignal();
  1922. convwrite.Plc = WCS_PLCItem.Plc;
  1923. convwrite.DBName = WCS_PLCItem.WriteDBName;
  1924. convwrite.ConveyorNo = Conv_1071;
  1925. convwrite.WriteStartAddress = convitem.EquDbInfo_ReadWrite.DBReadIndox;
  1926. convwrite.Tasknum = task.TASK_NO;
  1927. convwrite.Goodscode = 0;//待定
  1928. convwrite.Goodstype = 0;
  1929. convwrite.Goodssize = 0;//待定
  1930. convwrite.Goodsstart = Convert.ToInt32(Conv_1071);
  1931. convwrite.Goodsend = Convert.ToInt32(endAddress);
  1932. WriteInfoToConv(convitem, convwrite);
  1933. }
  1934. catch (Exception ex)
  1935. {
  1936. LogMessageHelper.RecordLogMessage(ex);
  1937. }
  1938. }
  1939. private void ConvWriteTaskExe_1072()
  1940. {
  1941. ConveyorWriteTaskExecute(Conv_1072);
  1942. }
  1943. private static int _palletizingConvRequest = 0;
  1944. /// <summary>
  1945. /// 机器人码垛输送线托盘需求
  1946. /// </summary>
  1947. private void Conv_Scanning_1185_WMS()
  1948. {
  1949. if (Interlocked.Exchange(ref _palletizingConvRequest, 1) == 0)
  1950. {
  1951. try
  1952. {
  1953. Thread.Sleep(3000);
  1954. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  1955. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1185);
  1956. var cs = conveyor.EquSignal_Conv;
  1957. if (!cs.DB521_Request) return;
  1958. if (cs.DB520_Confirm) return;
  1959. if (cs.BarCodeStr.ToUpper().Contains("ERROR") ||
  1960. cs.BarCodeStr.ToUpper().Contains("N") ||
  1961. cs.BarCodeStr.Contains("?"))
  1962. {
  1963. throw new Exception(string.Format("输送线[{0}]存在请求信号,但条码是:[{1}]存在报错,PLC应该报条码错误信号", Conv_1185, cs.BarCodeStr));
  1964. }
  1965. //条码未读出
  1966. if (cs.DB521_Res01) return;
  1967. List<string> list = new List<string>() { Conv_1251, Conv_1261, Conv_1226, Conv_1234, Conv_1257, Conv_1252, Conv_1231, Conv_1258, Conv_1278, Conv_1283, Conv_1288, Conv_1293 };
  1968. foreach (var item in list)
  1969. {
  1970. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_BOXBARCODE == cs.BarCodeStr)) break;
  1971. var conv = ConveyorHelper.GetConveyorSignal(PlcName, item);
  1972. if (conv.CvDB51_PH_Status) continue;
  1973. if (conv.DB521_Tasknum > 0) continue;
  1974. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == item && (v.TASK_COMTYPE == 2 || v.TASK_POSIDFROM == Conv_1185))) continue;
  1975. if (item == Conv_1288 || item == Conv_1293)
  1976. {
  1977. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == item)) continue;
  1978. var sysset = SugarBase.DB.Queryable<WCS_SYSSET>().First(v => v.SET_ID == item);
  1979. if (!string.IsNullOrWhiteSpace(sysset.SET_MEMO))
  1980. {
  1981. LogMessageHelper.RecordLogMessage(string.Format("字母托盘码盘位置[{0}]电控无光电无任务号,但是配置项中存在托盘信息[{1}]", item, sysset.SET_MEMO));
  1982. continue;
  1983. }
  1984. //创建搬运任务
  1985. var task = new WCS_TASK()
  1986. {
  1987. TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss"),
  1988. TASK_COMTYPE = (int)ComTypeEnum.搬运,
  1989. TASK_SYSTYPE = "WCS",
  1990. TASK_POSIDFROM = Conv_1185,//起点地址
  1991. TASK_POSIDCUR = Conv_1185,
  1992. TASK_POSIDNEXT = Conv_1185,
  1993. TASK_POSIDMOVE = "",
  1994. TASK_PRIORITY = 1,
  1995. TASK_WKSTATUS = 1,
  1996. TASK_WHID = "PVC普通立库",
  1997. TASK_ADDUSERNO = "WCS",
  1998. TASK_ADDDATETIME = DateTime.Now,
  1999. TASK_EDITUSERNO = "WCS",
  2000. TASK_EDITDATETIME = DateTime.Now,
  2001. TASK_NOTES = "",
  2002. TASK_RGVNO = "",
  2003. TASK_BOXBARCODE = cs.BarCodeStr,
  2004. TASK_POSIDTO = item
  2005. };
  2006. int id = SugarBase.DB.Insertable(task).ExecuteReturnIdentity();
  2007. if (id <= 0)
  2008. {
  2009. throw new Exception(string.Format("添加WCS搬运任务失败"));
  2010. }
  2011. else
  2012. {
  2013. break;
  2014. }
  2015. }
  2016. else
  2017. {
  2018. var param = new GetOutTaskParam()
  2019. {
  2020. OutId = Guid.NewGuid().ToString(),
  2021. OutEndPostion = item,
  2022. OutType = 2,
  2023. WareHouseId = Current.Pvchouseputong,
  2024. Memo2 = cs.BarCodeStr
  2025. };
  2026. //调用WMS接口生成出库任务
  2027. if (BaseWorkflow.WCS_GetOutTask(param)) break;
  2028. }
  2029. Thread.Sleep(2000);
  2030. }
  2031. if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_BOXBARCODE == cs.BarCodeStr))
  2032. {
  2033. var taskitem = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_POSIDFROM == Conv_1185 && v.TASK_WKSTATUS <= 1 && v.TASK_COMTYPE == 4 && (v.TASK_POSIDTO == Conv_1285 || v.TASK_POSIDTO == Conv_1286));
  2034. if (taskitem != null)
  2035. {
  2036. SugarBase.DB.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_BOXBARCODE = cs.BarCodeStr, TASK_EDITUSERNO = "wcs", TASK_EDITDATETIME = DateTime.Now })
  2037. .Where(it => it.TASK_NO == taskitem.TASK_NO)
  2038. .ExecuteCommand();
  2039. }
  2040. }
  2041. }
  2042. catch (Exception ex)
  2043. {
  2044. LogMessageHelper.RecordLogMessage(ex);
  2045. }
  2046. finally
  2047. {
  2048. Interlocked.Exchange(ref _palletizingConvRequest, 0);
  2049. }
  2050. }
  2051. }
  2052. private void Conv_Scanning_1185_WCS()
  2053. {
  2054. try
  2055. {
  2056. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  2057. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1185);
  2058. var cs = conveyor.EquSignal_Conv;
  2059. if (!cs.DB521_Request) return;
  2060. if (cs.DB520_Confirm) return;
  2061. WCS_TASK task = null;
  2062. if (cs.DB521_Res01)//未扫码到条码
  2063. {
  2064. task =SugarBase.DB.Queryable<WCS_TASK>().Single(v => v.TASK_POSIDFROM == Conv_1185 && v.TASK_POSIDCUR == Conv_1185);
  2065. if (task == null)
  2066. {
  2067. string errormsg = TryCachHelper.TryTranExecute((db) =>
  2068. {
  2069. //创建异常任务
  2070. task = new WCS_TASK();
  2071. task.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  2072. task.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  2073. task.TASK_SYSTYPE = "WCS";
  2074. task.TASK_POSIDFROM = Conv_1185;//起点地址
  2075. task.TASK_POSIDCUR = Conv_1185;
  2076. task.TASK_POSIDNEXT = Conv_1185;
  2077. task.TASK_POSIDMOVE = "";
  2078. task.TASK_PRIORITY = 1;
  2079. task.TASK_WKSTATUS = 1;
  2080. task.TASK_WHID = "PVC普通立库";
  2081. task.TASK_ADDUSERNO = "WCS";
  2082. task.TASK_ADDDATETIME = DateTime.Now;
  2083. task.TASK_EDITUSERNO = "WCS";
  2084. task.TASK_EDITDATETIME = DateTime.Now;
  2085. task.TASK_NOTES = "";
  2086. task.TASK_RGVNO = "";
  2087. task.TASK_BOXBARCODE = "扫码异常";
  2088. task.TASK_POSIDTO = Conv_1199;
  2089. int id = SugarBase.DB.Insertable(task).ExecuteReturnIdentity();
  2090. if (id <= 0)
  2091. {
  2092. throw new Exception(string.Format("条码[扫码异常]添加WCS任务失败"));
  2093. }
  2094. else
  2095. {
  2096. task.TASK_NO = id;
  2097. }
  2098. string msg = string.Format("拆盘机位置[{0}]扫码未识别", Conv_1185);
  2099. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  2100. });
  2101. if (!string.IsNullOrWhiteSpace(errormsg))
  2102. {
  2103. throw new Exception(errormsg);
  2104. }
  2105. }
  2106. }
  2107. else
  2108. {
  2109. task = SugarBase.DB.Queryable<WCS_TASK>().Single(v => v.TASK_BOXBARCODE == cs.BarCodeStr);
  2110. }
  2111. if (task == null || task.TASK_WKSTATUS > 1) return;
  2112. var converywrite = new WCSWriteToConveyorSignal();
  2113. converywrite.Plc = plc.Plc;
  2114. converywrite.DBName = plc.WriteDBName;
  2115. converywrite.ConveyorNo = Conv_1185;
  2116. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  2117. converywrite.Tasknum = task.TASK_NO;
  2118. converywrite.Goodssize = 0;//
  2119. converywrite.Goodsstart = Convert.ToInt32(Conv_1185);
  2120. //var routeSet = EquRouteHelper.QueryRoute(Conv_1185, task.TASK_POSIDTO);
  2121. //var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == Conv_1185);
  2122. //if (task.TASK_COMTYPE == 6)
  2123. //{
  2124. // converywrite.Goodsend = Convert.ToInt32(Conv_1193);
  2125. //}
  2126. //else
  2127. //{
  2128. converywrite.Goodsend = Convert.ToInt32(Conv_1182);
  2129. //}
  2130. WriteInfoToConv(cs, converywrite);
  2131. }
  2132. catch (Exception ex)
  2133. {
  2134. LogMessageHelper.RecordLogMessage(ex);
  2135. }
  2136. }
  2137. private void Conv_Scanning_1102()
  2138. {
  2139. try
  2140. {
  2141. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  2142. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1102);
  2143. var cs = conveyor.EquSignal_Conv;
  2144. if (!cs.DB521_Request) return;
  2145. if (cs.DB520_Confirm) return;
  2146. var task = QueryTaskByBarcode(cs, Conv_1102);
  2147. if (task == null)
  2148. {
  2149. var param = new GetInTaskParam();
  2150. param.ContainerBarCode = cs.BarCodeStr;
  2151. param.ContainerType = 1;
  2152. param.MatBarCode = string.Empty;
  2153. param.WareHouseId = Current.Pvchouseputong;
  2154. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().First(v => v.Task_BreakTrayNo == cs.BarCodeStr && v.Task_Type == 2);//退料任务
  2155. if (agvtask != null)
  2156. {
  2157. param.EquipmentNo = agvtask.Task_PosidFrom;
  2158. param.Memo3 = agvtask.Task_BreakBarCode_1;
  2159. param.Memo4 = agvtask.Task_BreakBarCode_2;
  2160. }
  2161. else
  2162. {
  2163. param.EquipmentNo = Conv_1102;
  2164. }
  2165. param.EndPostion = srm;
  2166. param.Memo2 = Conv_1104;
  2167. task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  2168. }
  2169. else if (task.TASK_COMTYPE == 2 && task.TASK_POSIDNEXT == Conv_1104 && task.TASK_WKSTATUS < 99)
  2170. {
  2171. //完成任务
  2172. string result = TryCachHelper.TryTranExecute((db) =>
  2173. {
  2174. //修改任务的状态
  2175. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  2176. .Where(it => it.TASK_NO == task.TASK_NO)
  2177. .ExecuteCommand();
  2178. //添加修改明细
  2179. string msg = string.Format("任务[{0}]完成", task.TASK_NO);
  2180. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  2181. });
  2182. if (!string.IsNullOrWhiteSpace(result))
  2183. {
  2184. throw new Exception(result);
  2185. }
  2186. }
  2187. if (task == null || (task.TASK_COMTYPE != 1 && task.TASK_COMTYPE != 6)) return;
  2188. var converywrite = new WCSWriteToConveyorSignal();
  2189. converywrite.Plc = plc.Plc;
  2190. converywrite.DBName = plc.WriteDBName;
  2191. converywrite.ConveyorNo = Conv_1102;
  2192. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  2193. //判断任务是否已经执行
  2194. if (task.TASK_WKSTATUS == 2 || task.TASK_WKSTATUS == 99 || task.TASK_WKSTATUS == 109 || task.TASK_WKSTATUS == 106) return;
  2195. converywrite.Tasknum = task.TASK_NO;
  2196. //converywrite.Goodstype = task.TASK_BOXBARCODE.Substring(0,2)== "SH" ? 1 : 2;
  2197. converywrite.Goodssize = 0;//
  2198. converywrite.Goodsstart = Convert.ToInt32(Conv_1102);
  2199. if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
  2200. {
  2201. converywrite.Notask = true;
  2202. converywrite.Goodsend = Convert.ToInt32(Conv_1104);
  2203. }
  2204. else
  2205. {
  2206. //bool isany = SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && v.TASK_POSIDTO == Conv_1104 && (v.TASK_POSIDNEXT == Conv_1099 || v.TASK_POSIDNEXT == Conv_1104 || v.TASK_POSIDNEXT == Conv_1105));
  2207. //if (isany)
  2208. //{
  2209. // //二楼有托盘出库,入库托盘送到中转位置1105
  2210. // converywrite.Goodsend = Convert.ToInt32(Conv_1105);
  2211. //}
  2212. //else
  2213. //{
  2214. // //二楼没有出库托盘,入库目标地址位1099;
  2215. // var routeSet = EquRouteHelper.QueryRoute(Conv_1102, task.TASK_POSIDTO);
  2216. // var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == Conv_1102);
  2217. // converywrite.Goodsend = Convert.ToInt32(route.ROUTE_SONPOS);
  2218. //}
  2219. var routeSet = EquRouteHelper.QueryRoute(Conv_1102, task.TASK_POSIDTO);
  2220. var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == Conv_1102);
  2221. converywrite.Goodsend = Convert.ToInt32(route.ROUTE_SONPOS);
  2222. }
  2223. //检测存在出库任务
  2224. //if (CheckIsExistOutTask(Conv_1102, cs.BarCodeStr)) return;
  2225. //WriteInfoToConv(cs, converywrite);
  2226. WriteInfoToCv(cs, converywrite);
  2227. }
  2228. catch (Exception ex)
  2229. {
  2230. LogMessageHelper.RecordLogMessage(ex);
  2231. }
  2232. }
  2233. private void Conv_Scanning(string convNo,string ExceptionNo)
  2234. {
  2235. try
  2236. {
  2237. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  2238. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  2239. var cs = conveyor.EquSignal_Conv;
  2240. if (!cs.DB521_Request) return;
  2241. if (cs.DB520_Confirm) return;
  2242. var task = QueryTaskByBarcode(cs, convNo);
  2243. if (task == null)
  2244. {
  2245. var param = new GetInTaskParam();
  2246. param.ContainerBarCode = cs.BarCodeStr;
  2247. param.ContainerType = 1;
  2248. param.MatBarCode = string.Empty;
  2249. param.WareHouseId = Current.Pvchouseputong;
  2250. var agvtask =SugarBase.DB.Queryable<Middle_AGVTask>().Single(v => v.Task_BreakTrayNo == cs.BarCodeStr && v.Task_Type == 2);//退料任务
  2251. if (agvtask != null)
  2252. {
  2253. param.EquipmentNo = agvtask.Task_PosidFrom;
  2254. param.Memo3 = agvtask.Task_BreakBarCode_1;
  2255. param.Memo4 = agvtask.Task_BreakBarCode_2;
  2256. }
  2257. else
  2258. {
  2259. param.EquipmentNo = convNo;
  2260. }
  2261. param.EndPostion = srm;
  2262. param.Memo2 = ExceptionNo;
  2263. task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  2264. }
  2265. else if (task.TASK_COMTYPE == 2 && task.TASK_POSIDNEXT == ExceptionNo && task.TASK_WKSTATUS < 99)
  2266. {
  2267. //完成任务
  2268. string result = TryCachHelper.TryTranExecute((db) =>
  2269. {
  2270. //修改任务的状态
  2271. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  2272. .Where(it => it.TASK_NO == task.TASK_NO)
  2273. .ExecuteCommand();
  2274. //添加修改明细
  2275. string msg = string.Format("任务[{0}]完成", task.TASK_NO);
  2276. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  2277. });
  2278. if (!string.IsNullOrWhiteSpace(result))
  2279. {
  2280. throw new Exception(result);
  2281. }
  2282. }
  2283. if (task == null || (task.TASK_COMTYPE != 1 && task.TASK_COMTYPE != 6)) return;
  2284. var converywrite = new WCSWriteToConveyorSignal();
  2285. converywrite.Plc = plc.Plc;
  2286. converywrite.DBName = plc.WriteDBName;
  2287. converywrite.ConveyorNo = convNo;
  2288. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  2289. //判断任务是否已经执行
  2290. if (task.TASK_WKSTATUS == 2 || task.TASK_WKSTATUS == 99 || task.TASK_WKSTATUS == 109 || task.TASK_WKSTATUS == 106) return;
  2291. converywrite.Tasknum = task.TASK_NO;
  2292. //converywrite.Goodstype = task.TASK_BOXBARCODE.Substring(0,2)== "SH" ? 1 : 2;
  2293. converywrite.Goodssize = 0;//
  2294. converywrite.Goodsstart = Convert.ToInt32(convNo);
  2295. if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
  2296. {
  2297. converywrite.Notask = true;
  2298. converywrite.Goodsend = Convert.ToInt32(ExceptionNo);
  2299. }
  2300. else
  2301. {
  2302. //bool isany = SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && v.TASK_POSIDTO == Conv_1104 && (v.TASK_POSIDNEXT == Conv_1099 || v.TASK_POSIDNEXT == Conv_1104 || v.TASK_POSIDNEXT == Conv_1105));
  2303. //if (isany)
  2304. //{
  2305. // //二楼有托盘出库,入库托盘送到中转位置1105
  2306. // converywrite.Goodsend = Convert.ToInt32(Conv_1105);
  2307. //}
  2308. //else
  2309. //{
  2310. // //二楼没有出库托盘,入库目标地址位1099;
  2311. // var routeSet = EquRouteHelper.QueryRoute(Conv_1102, task.TASK_POSIDTO);
  2312. // var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == Conv_1102);
  2313. // converywrite.Goodsend = Convert.ToInt32(route.ROUTE_SONPOS);
  2314. //}
  2315. //var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  2316. //var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == convNo);
  2317. converywrite.Goodsend = Convert.ToInt32(Conv_1092);
  2318. }
  2319. //检测存在出库任务
  2320. //if (CheckIsExistOutTask(convNo, cs.BarCodeStr)) return;
  2321. //WriteInfoToConv(cs, converywrite);
  2322. WriteInfoToCv(cs, converywrite);
  2323. }
  2324. catch (Exception ex)
  2325. {
  2326. LogMessageHelper.RecordLogMessage(ex);
  2327. }
  2328. }
  2329. /// <summary>
  2330. /// 二坐标写入抓取原膜卷组盘任务
  2331. /// </summary>
  2332. private void ConvWriteTaskExe_1044(string convNo)
  2333. {
  2334. try
  2335. {
  2336. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1044).EquSignal_Conv;
  2337. if (equ_conv.DB523_Fault) return;
  2338. if (!equ_conv.DB521_Request) return;
  2339. if (equ_conv.DB521_Res04 != 1) return;//二坐标机械手完成信号
  2340. var convitem = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo).EquSignal_Conv;
  2341. if (convitem.DB521_Tasknum <= 0) return;
  2342. //if (!convitem.CvDB51_PH_Status) return;
  2343. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == convitem.DB521_Tasknum);
  2344. if (task == null || task.TASK_POSIDNEXT != convNo) return;
  2345. if (convNo == Conv_1071)
  2346. {
  2347. if (!string.IsNullOrWhiteSpace(task.TASK_ITEM5)) return;
  2348. }
  2349. else if (convNo == Conv_1072)
  2350. {
  2351. if (!string.IsNullOrWhiteSpace(task.TASK_ITEM6)) return;
  2352. }
  2353. string first = string.IsNullOrWhiteSpace(task.TASK_ITEM5) ? string.Empty : task.TASK_ITEM5.Trim();
  2354. string second = string.IsNullOrWhiteSpace(task.TASK_ITEM6) ? string.Empty : task.TASK_ITEM6.Trim();
  2355. var conv1035 = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1035).EquSignal_Conv;
  2356. var conv1036 = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1036).EquSignal_Conv;
  2357. var taskitem_1035 = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == conv1035.DB521_Tasknum);
  2358. var taskitem_1036 = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == conv1036.DB521_Tasknum);
  2359. string startAddress = string.Empty;
  2360. string endAddress = string.Empty;
  2361. int task_no;
  2362. if (string.IsNullOrWhiteSpace(first))
  2363. {
  2364. //写入二坐标目标地址1071任务
  2365. if (taskitem_1035 != null)
  2366. {
  2367. startAddress = "1035";
  2368. task_no = taskitem_1035.TASK_NO;
  2369. //endAddress = "1071";
  2370. }
  2371. else if (taskitem_1036 != null)
  2372. {
  2373. startAddress = "1036";
  2374. task_no = taskitem_1036.TASK_NO;
  2375. //endAddress = "1071";
  2376. }
  2377. else
  2378. {
  2379. return;
  2380. }
  2381. }
  2382. else if (string.IsNullOrWhiteSpace(second))
  2383. {
  2384. //写入二坐标目标地址1072任务
  2385. if (taskitem_1035 != null && taskitem_1035.TASK_ITEM1 == task.TASK_ITEM1)
  2386. {
  2387. startAddress = "1035";
  2388. task_no = taskitem_1035.TASK_NO;
  2389. //endAddress = "1071";
  2390. }
  2391. else if (taskitem_1036 != null && taskitem_1036.TASK_ITEM1 == task.TASK_ITEM1)
  2392. {
  2393. startAddress = "1036";
  2394. task_no = taskitem_1036.TASK_NO;
  2395. //endAddress = "1071";
  2396. }
  2397. else
  2398. {
  2399. return;
  2400. }
  2401. }
  2402. else
  2403. {
  2404. return;
  2405. }
  2406. if (taskitem_1036 != null && taskitem_1036.TASK_POSIDNEXT == Conv_1070) return;
  2407. if (taskitem_1035 != null && taskitem_1035.TASK_POSIDNEXT == Conv_1070) return;
  2408. var convwrite = new WCSWriteToConveyorSignal();
  2409. convwrite.Plc = WCS_PLCItem.Plc;
  2410. convwrite.DBName = WCS_PLCItem.WriteDBName;
  2411. convwrite.ConveyorNo = Conv_1044;
  2412. convwrite.WriteStartAddress = equ_conv.EquDbInfo_ReadWrite.DBReadIndox;
  2413. convwrite.Tasknum = task_no;
  2414. convwrite.Goodscode = 0;//待定
  2415. convwrite.Goodstype = 0;
  2416. convwrite.Goodssize = 0;//待定
  2417. convwrite.Goodsstart = Convert.ToInt32(startAddress);
  2418. convwrite.Goodsend = Convert.ToInt32(Conv_1070);
  2419. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDNEXT == Conv_1070 && v.TASK_WKSTATUS < 99))
  2420. {
  2421. throw new Exception(string.Format("二坐标[{0}]存在未完成的任务,任务[{1}]未能下发给二坐标。", Conv_1044, task_no));
  2422. }
  2423. WriteInfoToConveyor(equ_conv, convwrite);
  2424. //WriteInfoToConv(equ_conv, convwrite);
  2425. }
  2426. catch (Exception ex)
  2427. {
  2428. LogMessageHelper.RecordLogMessage(ex);
  2429. }
  2430. }
  2431. /// <summary>
  2432. /// 卷绑定托盘
  2433. /// </summary>
  2434. private void BindingTray()
  2435. {
  2436. try
  2437. {
  2438. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1044).EquSignal_Conv;
  2439. if (equ_conv.DB523_Fault) return;
  2440. if (!equ_conv.DB521_Request) return;
  2441. if (equ_conv.DB521_Res04 != 1) return;
  2442. if (equ_conv.DB521_Goodscode <= 0) return;
  2443. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == equ_conv.DB521_Goodscode && v.TASK_WKSTATUS < 99);
  2444. if (task == null) return;
  2445. var convitem_1071 = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1071).EquSignal_Conv;
  2446. //if (task.TASK_POSIDNEXT == Conv_1071)
  2447. //{
  2448. var task1071 = SugarBase.DB.Queryable<WCS_TASK>().Single(v => v.TASK_NO == convitem_1071.DB521_Tasknum);
  2449. if (task1071 != null && string.IsNullOrWhiteSpace(task1071.TASK_ITEM5))
  2450. {
  2451. //卷绑定托盘任务,完成任务
  2452. string result = TryCachHelper.TryTranExecute((db) =>
  2453. {
  2454. //卷绑定托盘任务
  2455. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_POSIDTO = task.TASK_POSIDTO, TASK_ITEM1 = task.TASK_ITEM1, TASK_ITEM5 = task.TASK_BOXBARCODE, TASK_ITEM8 = task.TASK_ITEM8, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  2456. .Where(it => it.TASK_NO == task1071.TASK_NO)
  2457. .ExecuteCommand();
  2458. //修改任务的状态
  2459. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  2460. .Where(it => it.TASK_NO == task.TASK_NO)
  2461. .ExecuteCommand();
  2462. //添加修改明细
  2463. string msg = string.Format("任务[{0}]完成", task.TASK_NO);
  2464. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  2465. });
  2466. if (!string.IsNullOrWhiteSpace(result))
  2467. {
  2468. throw new Exception(result);
  2469. }
  2470. }
  2471. //}
  2472. var convitem_1072 = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1072).EquSignal_Conv;
  2473. //if (task.TASK_POSIDNEXT == Conv_1072)
  2474. //{
  2475. var task1072 = SugarBase.DB.Queryable<WCS_TASK>().Single(v => v.TASK_NO == convitem_1072.DB521_Tasknum);
  2476. if (task1072 != null && string.IsNullOrWhiteSpace(task1072.TASK_ITEM6))
  2477. {
  2478. //卷绑定托盘任务,完成任务
  2479. string result = TryCachHelper.TryTranExecute((db) =>
  2480. {
  2481. //卷绑定托盘任务
  2482. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_ITEM6 = task.TASK_BOXBARCODE, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  2483. .Where(it => it.TASK_NO == task1072.TASK_NO)
  2484. .ExecuteCommand();
  2485. //修改任务的状态
  2486. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
  2487. .Where(it => it.TASK_NO == task.TASK_NO)
  2488. .ExecuteCommand();
  2489. //添加修改明细
  2490. string msg = string.Format("任务[{0}]完成", task.TASK_NO);
  2491. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  2492. });
  2493. }
  2494. //}
  2495. }
  2496. catch (Exception ex)
  2497. {
  2498. LogMessageHelper.RecordLogMessage(ex);
  2499. }
  2500. }
  2501. public virtual void ConvWriteTaskExe_1204()
  2502. {
  2503. try
  2504. {
  2505. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1204).EquSignal_Conv;
  2506. if (equ_conv.DB523_Fault) return;
  2507. if (!equ_conv.CvDB51_PH_Status) return;
  2508. if (!equ_conv.DB521_Request) return;
  2509. if (equ_conv.DB521_Tasknum <= 0) return;
  2510. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == equ_conv.DB521_Tasknum);
  2511. if (task.TASK_POSIDNEXT != Conv_1204) return;
  2512. if (task.TASK_WKSTATUS != 9) return;
  2513. var convwrite = new WCSWriteToConveyorSignal();
  2514. convwrite.Plc = WCS_PLCItem.Plc;
  2515. convwrite.DBName = WCS_PLCItem.WriteDBName;
  2516. convwrite.ConveyorNo = Conv_1204;
  2517. convwrite.WriteStartAddress = equ_conv.EquDbInfo_ReadWrite.DBReadIndox;
  2518. convwrite.Tasknum = task.TASK_NO;
  2519. convwrite.Goodscode = 0;//待定
  2520. convwrite.Goodstype = 0;
  2521. convwrite.Goodssize = 0;//待定
  2522. convwrite.Goodsstart = Convert.ToInt32(Conv_1204);
  2523. //string item2 = string.IsNullOrWhiteSpace(task.TASK_ITEM2) ? string.Empty : task.TASK_ITEM2.Trim();
  2524. convwrite.UpMatRequest = task.TASK_IsWrapFilm;
  2525. var routeSet = EquRouteHelper.QueryRoute(Conv_1204, task.TASK_POSIDTO);
  2526. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == Conv_1204).ToList();
  2527. if (routes.Count == 1)
  2528. {
  2529. convwrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  2530. }
  2531. else
  2532. {
  2533. convwrite.Goodsend = ConveyorWriteTaskExecuteToMoreAddress(Conv_1204, task, routes);
  2534. }
  2535. WriteInfoToConv(equ_conv, convwrite);
  2536. }
  2537. catch (Exception ex)
  2538. {
  2539. LogMessageHelper.RecordLogMessage(ex);
  2540. }
  2541. }
  2542. public virtual void ConvWriteTaskExe_1460()
  2543. {
  2544. try
  2545. {
  2546. var equ_conv = WCS_PLCItem.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1460).EquSignal_Conv;
  2547. if (equ_conv.DB523_Fault) return;
  2548. if (!equ_conv.CvDB51_PH_Status) return;
  2549. if (!equ_conv.DB521_Request) return;
  2550. if (equ_conv.DB521_Tasknum <= 0) return;
  2551. var task =SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_NO == equ_conv.DB521_Tasknum);
  2552. if (task.TASK_POSIDNEXT != Conv_1460) return;
  2553. if (task.TASK_POSIDNEXT == "14600") return;
  2554. //if (task.TASK_WKSTATUS != 2) return;
  2555. var convwrite = new WCSWriteToConveyorSignal();
  2556. convwrite.Plc = WCS_PLCItem.Plc;
  2557. convwrite.DBName = WCS_PLCItem.WriteDBName;
  2558. convwrite.ConveyorNo = Conv_1460;
  2559. convwrite.WriteStartAddress = equ_conv.EquDbInfo_ReadWrite.DBReadIndox;
  2560. convwrite.Tasknum = task.TASK_NO;
  2561. convwrite.Goodscode = 0;//待定
  2562. convwrite.Goodstype = 0;
  2563. convwrite.Goodssize = 0;//待定
  2564. convwrite.Goodsstart = Convert.ToInt32(Conv_1460);
  2565. convwrite.Goodsend = 14600;
  2566. WriteInfoToConv(equ_conv, convwrite, false);
  2567. }
  2568. catch (Exception ex)
  2569. {
  2570. LogMessageHelper.RecordLogMessage(ex);
  2571. }
  2572. }
  2573. /// <summary>
  2574. /// 堆垛机出口输送线任务执行(任务目标地址的下个地址只支持单一地址)
  2575. /// </summary>
  2576. private void SrmOutConvExeTask(string plcName, string convNo, bool endPosIsCurConv = false)
  2577. {
  2578. try
  2579. {
  2580. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == plcName);
  2581. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  2582. var cs = conveyor.EquSignal_Conv;
  2583. if (!cs.DB521_Request) return;
  2584. if (cs.DB523_Fault) return;
  2585. var taskSet = Current.TaskSet.Where(v => v.TASK_POSIDNEXT == convNo).ToList();
  2586. var task = taskSet.SingleOrDefault(v => v.TASK_WKSTATUS == (int)WkStatus.堆垛机完成);
  2587. if (task == null)
  2588. {
  2589. throw new Exception(string.Format("堆垛机出口输送线[{0}]存在请求信号,但没查询到任务信息。", convNo));
  2590. }
  2591. var converywrite = new WCSWriteToConveyorSignal();
  2592. converywrite.Plc = plc.Plc;
  2593. converywrite.DBName = plc.WriteDBName;
  2594. converywrite.ConveyorNo = convNo;
  2595. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  2596. converywrite.Tasknum = task.TASK_NO;
  2597. converywrite.Goodscode = 0;
  2598. converywrite.Goodstype = 0;
  2599. converywrite.Goodssize = 0;
  2600. converywrite.Goodsstart = Convert.ToInt32(convNo);
  2601. if (endPosIsCurConv)
  2602. {
  2603. converywrite.Goodsend = converywrite.Goodsstart;
  2604. }
  2605. else
  2606. {
  2607. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  2608. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  2609. if (routes.Count == 1)
  2610. {
  2611. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  2612. }
  2613. else
  2614. {
  2615. if (convNo == Conv_1056 || convNo == Conv_1051)
  2616. {
  2617. if (task.TASK_POSIDTO != "1072")
  2618. {
  2619. converywrite.Goodsend = 1085;
  2620. }
  2621. }
  2622. else
  2623. {
  2624. throw new Exception(string.Format("输送线[{0}]任务[{1}]请求该函数不支持多个分支输送地址,请编写扩展函数。", convNo, task.TASK_NO));
  2625. }
  2626. //if (convNo == Conv_1056 || convNo== Conv_1051)
  2627. //{
  2628. // string taryType = string.IsNullOrWhiteSpace(task.TASK_ITEM2) ? string.Empty : task.TASK_ITEM2.Trim();
  2629. // string isEmpty = string.IsNullOrWhiteSpace(task.TASK_ITEM3) ? string.Empty : task.TASK_ITEM3.Trim();
  2630. // if (taryType == "1" && isEmpty == "1")
  2631. // {
  2632. // converywrite.Goodsend = 1071;
  2633. // }
  2634. // else
  2635. // {
  2636. // converywrite.Goodsend = 1085;
  2637. // }
  2638. //}
  2639. //else
  2640. //{
  2641. //throw new Exception(string.Format("输送线[{0}]任务[{1}]请求该函数不支持多个分支输送地址,请编写扩展函数。", convNo, task.TASK_NO));
  2642. //}
  2643. }
  2644. }
  2645. WriteInfoToConv(cs, converywrite);
  2646. }
  2647. catch (Exception ex)
  2648. {
  2649. LogMessageHelper.RecordLogMessage(ex);
  2650. }
  2651. }
  2652. private static int _conveyorTaskExecute = 0;
  2653. private void ConveyorTaskExecute()
  2654. {
  2655. if (Interlocked.Exchange(ref _conveyorTaskExecute, 1) == 0)
  2656. {
  2657. try
  2658. {
  2659. foreach (var convNo in AppSettingsHelper.AppSettings.TaskStatusUpdateConNoList)
  2660. {
  2661. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_POSIDCUR == convNo &&
  2662. (v.TASK_WKSTATUS == (int)WkStatus.RGV完成 ||
  2663. v.TASK_WKSTATUS == (int)WkStatus.RGV下料执行));
  2664. if (task == null) continue;
  2665. if (convNo == task.TASK_ITEM4) continue;
  2666. task.TASK_WKSTATUS = (int)WkStatus.输送机执行;
  2667. task.TASK_EDITUSERNO = "wcs";
  2668. task.TASK_POSIDNEXT = task.TASK_POSIDCUR;
  2669. task.TASK_EDITDATETIME = DateTime.Now;
  2670. SugarBase.DB.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  2671. }
  2672. }
  2673. catch (Exception ex)
  2674. {
  2675. LogMessageHelper.RecordLogMessage(ex);
  2676. }
  2677. finally
  2678. {
  2679. Interlocked.Exchange(ref _conveyorTaskExecute, 0);
  2680. }
  2681. }
  2682. }
  2683. #endregion;
  2684. #endregion;
  2685. }
  2686. }