Frm_YongGuanMontior.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690
  1. using FreeRedis;
  2. using MessagePack;
  3. using MessagePack.Resolvers;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using WCS.Data;
  13. using WCS.Data.Models;
  14. using WCS.Entity.Protocol;
  15. using WCS_Client.From.From_Montior;
  16. namespace WCS_Client.Frm
  17. {
  18. public partial class Frm_YongGuanMontior : Form
  19. {
  20. System.Timers.Timer _timer;
  21. private delegate void ShowTextDelegate();// 创建委托和委托对象
  22. private List<string> _plcnameSet = new List<string>();
  23. private List<DDJSatatus> DDJSatatusSet = new List<DDJSatatus>();
  24. private List<RGVSatatus> RGVSatatusSet = new List<RGVSatatus>();
  25. // 防止闪屏
  26. protected override CreateParams CreateParams
  27. {
  28. get
  29. {
  30. CreateParams cp = base.CreateParams;
  31. cp.ExStyle |= 0x02000000;
  32. return cp;
  33. }
  34. }
  35. RedisClient Redis;
  36. public Frm_YongGuanMontior()
  37. {
  38. InitializeComponent();
  39. Init();
  40. }
  41. private void Init()
  42. {
  43. _plcnameSet.Add("SC1");
  44. _plcnameSet.Add("SC2");
  45. _plcnameSet.Add("SC3");
  46. _plcnameSet.Add("SC4");
  47. _plcnameSet.Add("SC5");
  48. _plcnameSet.Add("RGV1");
  49. _plcnameSet.Add("RGV2");
  50. _plcnameSet.Add("RGV3");
  51. _plcnameSet.Add("RGV4");
  52. _plcnameSet.Add("RGV5");
  53. _plcnameSet.Add("Conv");
  54. var plcnameSetsrm = _plcnameSet.Where(value => value.Contains("SC")).ToList();
  55. for (int i = 0; i < plcnameSetsrm.Count; i++)
  56. {
  57. var item = plcnameSetsrm[i];
  58. if (!DDJSatatusSet.Any(v => v.SrmName == item))
  59. {
  60. var ddjsatatus = new DDJSatatus();
  61. ddjsatatus.SrmName = item;
  62. int index = i + 1;
  63. ddjsatatus.G = (PictureBox)FindControl("G" + index);
  64. ddjsatatus.LblInStatus = (Label)FindControl("lblInStatus" + index);
  65. ddjsatatus.LblOutStatus = (Label)FindControl("lblOutStatus" + index);
  66. ddjsatatus.DdjMode = (Label)FindControl("ddjMode" + index);
  67. ddjsatatus.DdjStatus = (Label)FindControl("ddjStatus" + index);
  68. ddjsatatus.DdjOrdId = (Label)FindControl("ddjOrdId" + index);
  69. ddjsatatus.DdjOptType = (Label)FindControl("ddjOptType" + index);
  70. ddjsatatus.DdjPosCurr = (Label)FindControl("ddjPosCurr" + index);
  71. ddjsatatus.DdjWorkTime = (Label)FindControl("ddjWorkTime" + index);
  72. ddjsatatus.DdjTotal_KM = (Label)FindControl("ddjTotal_KM" + index);
  73. ddjsatatus.DdjPosFrom = (Label)FindControl("ddjPosFrom" + index);
  74. ddjsatatus.DdjPosTo = (Label)FindControl("ddjPosTo" + index);
  75. DDJSatatusSet.Add(ddjsatatus);
  76. }
  77. }
  78. var plcnameSetrgv = _plcnameSet.Where(value => value.Contains("RGV")).ToList();
  79. for (int i = 0; i < plcnameSetrgv.Count; i++)
  80. {
  81. var item = plcnameSetrgv[i];
  82. if (!RGVSatatusSet.Any(v => v.RGVName == item))
  83. {
  84. var rgvsatatus = new RGVSatatus();
  85. rgvsatatus.RGVName = item;
  86. int index = Convert.ToInt32(item.Substring(3, 1).ToString());
  87. rgvsatatus.G = (PictureBox)FindControl("GV" + index);
  88. rgvsatatus.RGVMode = (Label)FindControl("rgvMode" + index);
  89. rgvsatatus.RGVStatus = (Label)FindControl("rgvStatus" + index);
  90. rgvsatatus.RGVOrdId = (Label)FindControl("rgvOrdId" + index);
  91. rgvsatatus.RGVPosCurr = (Label)FindControl("rgvPosCurr" + index);
  92. rgvsatatus.RGVPosFrom = (Label)FindControl("rgvPosFrom" + index);
  93. rgvsatatus.RGVPosTo = (Label)FindControl("rgvPosTo" + index);
  94. rgvsatatus.RGVOptType = (Label)FindControl("rgvOptType" + index);
  95. RGVSatatusSet.Add(rgvsatatus);
  96. }
  97. }
  98. }
  99. private Control FindControl(string controlName)
  100. {
  101. var control = Controls.Find(controlName, true);
  102. if (control.Count() > 0)
  103. return control[0];
  104. else
  105. return null;
  106. }
  107. private void Frm_YongGuanMontior_Load(object sender, EventArgs e)
  108. {
  109. _timer = new System.Timers.Timer(5000);
  110. _timer.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;
  111. _timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
  112. _timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
  113. if (eqpData.Redis == null)
  114. {
  115. Redis = new RedisClient("81.69.99.176,database=11");
  116. MessagePackSerializer.DefaultOptions = StandardResolver.Options.WithCompression(MessagePackCompression.Lz4Block);
  117. Redis.Serialize = obj =>
  118. {
  119. var bytes = MessagePackSerializer.Serialize(obj);
  120. return bytes;
  121. };
  122. Redis.DeserializeRaw = (bytes, type) =>
  123. {
  124. var obj = MessagePackSerializer.Deserialize(type, bytes);
  125. return obj;
  126. };
  127. }
  128. eqpData.init(Redis);
  129. }
  130. private static int _theout = 0;
  131. private void theout(object sender, EventArgs e)
  132. {
  133. if (Interlocked.Exchange(ref _theout, 1) == 0)
  134. {
  135. try
  136. {
  137. Current.RefreshData(true);
  138. var listDDJ = BaseWorkflow.QueryStackerdDataDDJ(_plcnameSet);
  139. ShowData();
  140. }
  141. catch (Exception ex)
  142. {
  143. }
  144. finally
  145. {
  146. Interlocked.Exchange(ref _theout, 0);
  147. }
  148. }
  149. }
  150. private void ShowData()
  151. {
  152. try
  153. {
  154. if (InvokeRequired)
  155. {
  156. //异步调用委托(后面添加方法需要将方法委托其中)
  157. this.BeginInvoke(new ShowTextDelegate(pan11));
  158. }
  159. else
  160. {
  161. }
  162. }
  163. catch (Exception ex)
  164. {
  165. LogHelper.Sys_Log.WriteLog(ex.ToString());
  166. }
  167. }
  168. public void pan11()
  169. {
  170. try
  171. {
  172. var pack = eqpData.deviceDataPack;
  173. // var frame = pack.Frame;//数据帧(数据产生的时间)
  174. var convdata = pack.StationDatas;//输送机数据
  175. var rgvdata = pack.RGVDatas;//穿梭车数据
  176. var scdata = pack.SCDatas;//堆垛机数据
  177. // var robotdata = pack.RobotData;//机器人数据
  178. //var pldata = pack.ProdLineData;//产线数据
  179. foreach (var item in scdata.Datas)
  180. {
  181. //var equ = SugarBase.DB.Queryable<WCS_SC521>().First(v => v.DEVICECODE == item.DEVICECODE && v.ISLAST == true);
  182. var ddjstatus = DDJSatatusSet.FirstOrDefault(v => v.SrmName == item.Code);
  183. if (ddjstatus != null)
  184. {
  185. //模式
  186. ddjstatus.DdjMode.Text = item.D521.Mode.ToString();
  187. if (item.D521.Mode.ToString() == "远程")
  188. {
  189. ddjstatus.G.Image = Properties.Resources.绿;
  190. }
  191. else if (item.D521.Mode.ToString() == "半自动")
  192. {
  193. ddjstatus.G.Image = Properties.Resources.黄;
  194. }
  195. else if (item.D521.Mode.ToString() == "手动")
  196. {
  197. ddjstatus.G.Image = Properties.Resources.黄;
  198. }
  199. else if (item.D521.Mode.ToString() == "维修")
  200. {
  201. ddjstatus.G.Image = Properties.Resources.红;
  202. }
  203. ////状态
  204. ddjstatus.DdjStatus.Text = item.D521.Status.ToString();
  205. ////任务Id
  206. ddjstatus.DdjOrdId.Text = item.D521.TaskID.ToString();
  207. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.ID == item.D521.TaskID);
  208. if (task != null)
  209. {
  210. //任务类型
  211. ddjstatus.DdjOptType.Text = task.TYPE.ToString();
  212. if (task.TYPE == TaskType.入库)
  213. {
  214. ddjstatus.LblInStatus.BackColor = Color.Lime;
  215. ddjstatus.LblOutStatus.BackColor = Color.DarkGray;
  216. }
  217. else if (task.TYPE == TaskType.出库)
  218. {
  219. ddjstatus.LblInStatus.BackColor = Color.DarkGray;
  220. ddjstatus.LblOutStatus.BackColor = Color.Lime;
  221. }
  222. else
  223. {
  224. ddjstatus.LblInStatus.BackColor = Color.DarkGray;
  225. ddjstatus.LblOutStatus.BackColor = Color.DarkGray;
  226. }
  227. }
  228. else
  229. {
  230. ddjstatus.LblInStatus.BackColor = Color.DarkGray;
  231. ddjstatus.LblOutStatus.BackColor = Color.DarkGray;
  232. }
  233. //当前位置
  234. ddjstatus.DdjPosCurr.Text = item.D521.Tunnel.ToString();
  235. ////运行时长
  236. ddjstatus.DdjWorkTime.Text = item.D521.Runtime.ToString() + "h";
  237. ////里程数
  238. ddjstatus.DdjTotal_KM.Text = item.D521.TotalKM.ToString() + "KM";
  239. //起始位置
  240. ddjstatus.DdjPosFrom.Text = item.D521.SLine.ToString() + "-" + item.D521.SCol.ToString() + "-" + item.D521.SLayer.ToString();
  241. //目标位置
  242. ddjstatus.DdjPosTo.Text = item.D521.ELine.ToString() + "-" + item.D521.ECol.ToString() + "-" + item.D521.ELayer.ToString();
  243. }
  244. }
  245. //RGV
  246. foreach (var item in rgvdata.Datas)
  247. {
  248. var rgvstatus = RGVSatatusSet.FirstOrDefault(v => v.RGVName == item.Code);
  249. if (rgvstatus != null)
  250. {
  251. string workmode = item.D521.WorkMode.ToString();
  252. //模式
  253. rgvstatus.RGVMode.Text = item.D521.WorkMode.ToString();
  254. if (item.D521.WorkMode.ToString() == "自动")
  255. {
  256. rgvstatus.G.Image = Properties.Resources.绿;
  257. }
  258. else if (item.D521.WorkMode.ToString() == "半自动")
  259. {
  260. rgvstatus.G.Image = Properties.Resources.黄;
  261. }
  262. else if (item.D521.WorkMode.ToString() == "手动")
  263. {
  264. rgvstatus.G.Image = Properties.Resources.黄;
  265. }
  266. else if (item.D521.WorkMode.ToString() == "维修")
  267. {
  268. rgvstatus.G.Image = Properties.Resources.红;
  269. }
  270. ////状态
  271. rgvstatus.RGVStatus.Text = item.D521.SystemStatus.ToString();
  272. ////任务Id
  273. rgvstatus.RGVOrdId.Text = item.D521.TaskID.ToString();
  274. //作业类型
  275. rgvstatus.RGVOptType.Text = item.D521.TaskType.ToString();
  276. //当前位置
  277. rgvstatus.RGVPosCurr.Text = item.D521.Position.ToString();
  278. //起始位置
  279. rgvstatus.RGVPosFrom.Text = item.D521.StartPosition.ToString();
  280. //目标位置
  281. rgvstatus.RGVPosTo.Text = item.D521.DestPosition.ToString();
  282. var control = FindControl("con" + item.Code);
  283. if (control != null)
  284. {
  285. if (control is Conveyor6)
  286. {
  287. var con = (Conveyor6)control;
  288. con.button1.Text = item.Code;
  289. if (item.D521.PH_Status == true)
  290. {
  291. if (con.button1.Tag.ToString() != "pall")
  292. {
  293. con.button1.BackgroundImage = Image.FromFile("Resources/Rgv02.png");
  294. con.button1.Tag = "pall";
  295. }
  296. }
  297. else
  298. {
  299. if (con.button1.Tag.ToString() != "empty")
  300. {
  301. con.button1.BackgroundImage = Image.FromFile("Resources/shelf16UD.png");
  302. con.button1.Tag = "empty";
  303. }
  304. }
  305. }
  306. else if (control is Conveyor5)
  307. {
  308. var con = (Conveyor5)control;
  309. con.button1.Text = item.Code;
  310. if (item.D521.PH_Status == true)
  311. {
  312. if (con.button1.Tag.ToString() != "pall")
  313. {
  314. con.button1.BackgroundImage = Image.FromFile("Resources/rgv03.png");
  315. con.button1.Tag = "pall";
  316. }
  317. }
  318. else
  319. {
  320. if (con.button1.Tag.ToString() != "empty")
  321. {
  322. con.button1.BackgroundImage = Image.FromFile("Resources/shelf16UD1.png");
  323. con.button1.Tag = "empty";
  324. }
  325. }
  326. }
  327. }
  328. }
  329. }
  330. //输送线
  331. foreach (var item in convdata.Datas)
  332. {
  333. var control = FindControl("con" + item.Code);
  334. if (control != null)
  335. {
  336. if (control is Conveyor)
  337. {
  338. var con = (Conveyor)control;
  339. con.button1.Text = item.Code.ToString();
  340. if (item.D521.PH_STATUS == true)
  341. {
  342. if (con.button1.Tag.ToString() != "pall")
  343. {
  344. con.button1.BackgroundImage = Image.FromFile("Resources/Rgv02.png");
  345. con.button1.Tag = "pall";
  346. }
  347. }
  348. else
  349. {
  350. if (con.button1.Tag.ToString() != "empty")
  351. {
  352. con.button1.BackgroundImage = Image.FromFile("Resources/shelf16UD.png");
  353. con.button1.Tag = "empty";
  354. }
  355. }
  356. }
  357. else if (control is Conveyor_L)
  358. {
  359. var con = (Conveyor_L)control;
  360. con.button1.Text = item.Code.ToString();
  361. if (item.D521.PH_STATUS == true)
  362. {
  363. if (con.button1.Tag.ToString() != "pall")
  364. {
  365. con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor_L.png");//1009L11.png
  366. con.button1.Tag = "pall";
  367. }
  368. }
  369. else
  370. {
  371. if (con.button1.Tag.ToString() != "empty")
  372. {
  373. con.button1.BackgroundImage = Image.FromFile("Resources/1009L11.png");//1009L11.png
  374. con.button1.Tag = "empty";
  375. }
  376. }
  377. }
  378. else if (control is Conveyor_R)
  379. {
  380. var con = (Conveyor_R)control;
  381. con.button1.Text = item.Code.ToString();
  382. if (item.D521.PH_STATUS == true)
  383. {
  384. if (con.button1.Tag.ToString() != "pall")
  385. {
  386. con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor_R.png");//1009L1.png
  387. con.button1.Tag = "pall";
  388. }
  389. }
  390. else
  391. {
  392. if (con.button1.Tag.ToString() != "empty")
  393. {
  394. con.button1.BackgroundImage = Image.FromFile("Resources/1009L1.png");//1009L1.png
  395. con.button1.Tag = "empty";
  396. }
  397. }
  398. }
  399. else if (control is Conveyor4_L_R)
  400. {
  401. var con = (Conveyor4_L_R)control;
  402. con.button1.Text = item.Code.ToString();
  403. if (item.D521.PH_STATUS == true)
  404. {
  405. if (con.button1.Tag.ToString() != "pall")
  406. {
  407. con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor4_L_R.png");
  408. con.button1.Tag = "pall";
  409. }
  410. }
  411. else
  412. {
  413. if (con.button1.Tag.ToString() != "empty")
  414. {
  415. con.button1.BackgroundImage = Image.FromFile("Resources/1001LR.gif");
  416. con.button1.Tag = "empty";
  417. }
  418. }
  419. }
  420. else if (control is Conveyor3)
  421. {
  422. var con = (Conveyor3)control;
  423. con.button1.Text = item.Code.ToString();
  424. if (item.D521.PH_STATUS == true)
  425. {
  426. if (con.button1.Tag.ToString() != "pall")
  427. {
  428. con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor3.png");//1009R1_A.png
  429. con.button1.Tag = "pall";
  430. }
  431. }
  432. else
  433. {
  434. if (con.button1.Tag.ToString() != "empty")
  435. {
  436. con.button1.BackgroundImage = Image.FromFile("Resources/1004LR.png");//1009R1.png
  437. con.button1.Tag = "empty";
  438. }
  439. }
  440. }
  441. else if (control is Conveyor3_A)
  442. {
  443. var con = (Conveyor3_A)control;
  444. con.button1.Text = item.Code.ToString();
  445. if (item.D521.PH_STATUS == true)
  446. {
  447. if (con.button1.Tag.ToString() != "pall")
  448. {
  449. con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor3_A_Box.png");//Conveyor3_A_Box.png
  450. con.button1.Tag = "pall";
  451. }
  452. }
  453. else
  454. {
  455. if (con.button1.Tag.ToString() != "empty")
  456. {
  457. con.button1.BackgroundImage = Image.FromFile("Resources/1009_A.png");//1009_A.png
  458. con.button1.Tag = "empty";
  459. }
  460. }
  461. }
  462. else if (control is Conveyor3_B)
  463. {
  464. var con = (Conveyor3_B)control;
  465. con.button1.Text = item.Code.ToString();
  466. if (item.D521.PH_STATUS == true)
  467. {
  468. if (con.button1.Tag.ToString() != "pall")
  469. {
  470. con.button1.BackgroundImage = Image.FromFile("Resources/1009R1_B.png");//1009R1_A.png
  471. con.button1.Tag = "pall";
  472. }
  473. }
  474. else
  475. {
  476. if (con.button1.Tag.ToString() != "empty")
  477. {
  478. con.button1.BackgroundImage = Image.FromFile("Resources/1009R1.png");//1009R1.png
  479. con.button1.Tag = "empty";
  480. }
  481. }
  482. }
  483. else if (control is Conveyor4_left)
  484. {
  485. var con = (Conveyor4_left)control;
  486. con.button1.Text = item.Code.ToString();
  487. if (item.D521.PH_STATUS == true)
  488. {
  489. if (con.button1.Tag.ToString() != "pall")
  490. {
  491. con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor4_left.png");
  492. con.button1.Tag = "pall";
  493. }
  494. }
  495. else
  496. {
  497. if (con.button1.Tag.ToString() != "empty")
  498. {
  499. con.button1.BackgroundImage = Image.FromFile("Resources/1001L.gif");
  500. con.button1.Tag = "empty";
  501. }
  502. }
  503. }
  504. else if (control is Conveyor4_right)
  505. {
  506. var con = (Conveyor4_right)control;
  507. con.button1.Text = item.Code.ToString();
  508. if (item.D521.PH_STATUS == true)
  509. {
  510. if (con.button1.Tag.ToString() != "pall")
  511. {
  512. con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor4_right.png");
  513. con.button1.Tag = "pall";
  514. }
  515. }
  516. else
  517. {
  518. if (con.button1.Tag.ToString() != "empty")
  519. {
  520. con.button1.BackgroundImage = Image.FromFile("Resources/1001LR.gif");
  521. con.button1.Tag = "empty";
  522. }
  523. }
  524. }
  525. }
  526. }
  527. eqpData.deviceDataPack = pack;
  528. }
  529. catch (Exception ex)
  530. {
  531. }
  532. }
  533. private void lblsrm01_Click(object sender, EventArgs e)
  534. {
  535. Label srm = (Label)sender;
  536. string equName = srm.Name.Substring(3);
  537. FrmEquMsg_dtl Frm = new FrmEquMsg_dtl(equName);
  538. Frm.Show();
  539. }
  540. private void Frm_YongGuanMontior_FormClosing(object sender, FormClosingEventArgs e)
  541. {
  542. _timer.Stop();
  543. _timer.Elapsed -= new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;
  544. }
  545. private void con2114_Load(object sender, EventArgs e)
  546. {
  547. }
  548. private void tableCellLabel23_Load(object sender, EventArgs e)
  549. {
  550. }
  551. private void con2035_Load(object sender, EventArgs e)
  552. {
  553. }
  554. }
  555. public class DDJSatatus
  556. {
  557. /// <summary>
  558. /// 状态图标
  559. /// </summary>
  560. public PictureBox G { get; set; }
  561. /// <summary>
  562. /// 堆垛机名称
  563. /// </summary>
  564. public string SrmName { get; set; }
  565. /// <summary>
  566. /// 入库状态
  567. /// </summary>
  568. public Label LblInStatus { get; set; }
  569. /// <summary>
  570. /// 出库状态
  571. /// </summary>
  572. public Label LblOutStatus { get; set; }
  573. /// <summary>
  574. /// 堆垛机模式
  575. /// </summary>
  576. public Label DdjMode { get; set; }
  577. /// <summary>
  578. /// 堆垛机工作状态
  579. /// </summary>
  580. public Label DdjStatus { get; set; }
  581. /// <summary>
  582. /// 堆垛机工作任务
  583. /// </summary>
  584. public Label DdjOrdId { get; set; }
  585. /// <summary>
  586. /// 堆垛机作业类型
  587. /// </summary>
  588. public Label DdjOptType { get; set; }
  589. /// <summary>
  590. /// 堆垛机当前位置
  591. /// </summary>
  592. public Label DdjPosCurr { get; set; }
  593. /// <summary>
  594. /// 运行时间
  595. /// </summary>
  596. public Label DdjWorkTime { get; set; }
  597. /// <summary>
  598. /// 里程数
  599. /// </summary>
  600. public Label DdjTotal_KM { get; set; }
  601. /// <summary>
  602. /// 源仓位
  603. /// </summary>
  604. public Label DdjPosFrom { get; set; }
  605. /// <summary>
  606. /// 目标仓位
  607. /// </summary>
  608. public Label DdjPosTo { get; set; }
  609. }
  610. public class RGVSatatus
  611. {
  612. /// <summary>
  613. /// 状态图标
  614. /// </summary>
  615. public PictureBox G { get; set; }
  616. /// <summary>
  617. /// RGV名称
  618. /// </summary>
  619. public string RGVName { get; set; }
  620. /// <summary>
  621. /// RGV模式
  622. /// </summary>
  623. public Label RGVMode { get; set; }
  624. /// <summary>
  625. /// RGV工作状态
  626. /// </summary>
  627. public Label RGVStatus { get; set; }
  628. /// <summary>
  629. /// RGV工作任务
  630. /// </summary>
  631. public Label RGVOrdId { get; set; }
  632. /// <summary>
  633. /// RGV作业类型
  634. /// </summary>
  635. public Label RGVOptType { get; set; }
  636. /// <summary>
  637. /// RGV当前位置
  638. /// </summary>
  639. public Label RGVPosCurr { get; set; }
  640. /// <summary>
  641. /// 起始站台
  642. /// </summary>
  643. public Label RGVPosFrom { get; set; }
  644. /// <summary>
  645. /// 目标站台
  646. /// </summary>
  647. public Label RGVPosTo { get; set; }
  648. }
  649. }