DispatchSystem7515.cs 105 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099
  1. using AGV_WPF.Tools;
  2. using AGV_WPF_Global;
  3. using HslCommunication;
  4. using HslCommunication.LogNet;
  5. using Newtonsoft.Json.Linq;
  6. using System;
  7. using System.Collections.Concurrent;
  8. using System.Collections.Generic;
  9. using System.ComponentModel;
  10. using System.Configuration;
  11. using System.Data;
  12. using System.Data.OleDb;
  13. using System.Drawing;
  14. using System.IO;
  15. using System.Linq;
  16. using System.Net;
  17. using System.Text;
  18. using System.Threading;
  19. using System.Threading.Tasks;
  20. using System.Windows.Forms;
  21. using WCS.API;
  22. using WCS.API.Model;
  23. namespace AGV_WPF
  24. {
  25. public partial class DispatchSystem7515 : Form
  26. {
  27. public static DataTable dtStation = new DataTable();
  28. public static DataTable dtStation1 = new DataTable();
  29. public static DataTable dtStationPLC = new DataTable();
  30. public static DataTable dtType = new DataTable();
  31. static LogNetDateTime logNetDateTimeSPS;
  32. private static object portLock1 = new object();
  33. private delegate void InvokeDelegate();
  34. List<string> listTypeRoutes = new List<string>();
  35. List<string> listTypes = new List<string>();
  36. List<Button> listTypeBtns = new List<Button>();
  37. public static DataTable dtCombineTraffic = new DataTable();
  38. public static DataTable dtCombineTrafficPLC = new DataTable();
  39. static LogNetDateTime logNetDateTimeCJYTraffic;
  40. static LogNetDateTime logNetDateTimeCTraffic;
  41. DataTable DtTraffic = new DataTable();
  42. LogNetDateTime logNetTraffic;
  43. static LogNetDateTime logNetDateTimeError;
  44. LogNetDateTime logNetTraffic2;
  45. DataTable DtRedGreenBox = new DataTable();
  46. public DispatchSystem7515()
  47. {
  48. InitializeComponent();
  49. }
  50. private void DispatchSystem7515_Load(object sender, EventArgs e)
  51. {
  52. if (!Directory.Exists("D:/Logs/工位放行记录"))
  53. {
  54. Directory.CreateDirectory("D:/Logs/工位放行记录");
  55. }
  56. logNetDateTimeSPS = new LogNetDateTime("D:/Logs/工位放行记录", GenerateMode.ByEveryDay);
  57. if (!Directory.Exists("D:/Logs/调度报错记录"))
  58. {
  59. Directory.CreateDirectory("D:/Logs/调度报错记录");
  60. }
  61. logNetDateTimeError = new LogNetDateTime("D:/Logs/调度报错记录", GenerateMode.ByEveryDay);
  62. if (!Directory.Exists("D:/Logs/井源联合管制记录"))
  63. {
  64. Directory.CreateDirectory("D:/Logs/井源联合管制记录");
  65. }
  66. logNetDateTimeCJYTraffic = new LogNetDateTime("D:/Logs/井源联合管制记录", GenerateMode.ByEveryDay);
  67. if (!Directory.Exists("D:/Logs/联合管制记录"))
  68. {
  69. Directory.CreateDirectory("D:/Logs/联合管制记录");
  70. }
  71. logNetDateTimeCTraffic = new LogNetDateTime("D:/Logs/联合管制记录", GenerateMode.ByEveryDay);
  72. string path = "管制点记录";
  73. if (!Directory.Exists("D:/AGVLogs/" + path))
  74. {
  75. Directory.CreateDirectory("D:/AGVLogs/" + path);
  76. }
  77. logNetTraffic = new LogNetDateTime("D:/AGVLogs/" + path, GenerateMode.ByEveryDay);
  78. string path2 = "管制点记录2";
  79. if (!Directory.Exists("D:/AGVLogs/" + path2))
  80. {
  81. Directory.CreateDirectory("D:/AGVLogs/" + path2);
  82. }
  83. logNetTraffic2 = new LogNetDateTime("D:/AGVLogs/" + path2, GenerateMode.ByEveryDay);
  84. this.FormClosing += DispatchSystem7515_FormClosing;
  85. StartHttpServer();
  86. LoadConfig();
  87. Task.Factory.StartNew(() => ScanLogFilesDateTime());
  88. }
  89. void ScanLogFilesDateTime()
  90. {
  91. while (true)
  92. {
  93. try
  94. {
  95. string m_Directory = @"Exception";
  96. string[] logNetExceptionFiles = Directory.GetFiles(m_Directory);
  97. if (logNetExceptionFiles != null && logNetExceptionFiles.Length > 7)
  98. {
  99. foreach (var file in logNetExceptionFiles)
  100. {
  101. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  102. {
  103. File.Delete(file);
  104. }
  105. }
  106. }
  107. string m_DirectoryLog = @"Log";
  108. if (!System.IO.Directory.Exists(m_DirectoryLog))
  109. {
  110. System.IO.Directory.CreateDirectory(m_DirectoryLog);
  111. }
  112. string[] logNetFiles = Directory.GetFiles(m_DirectoryLog);
  113. if (logNetFiles != null && logNetFiles.Length > 7)
  114. {
  115. foreach (var file in logNetFiles)
  116. {
  117. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  118. {
  119. File.Delete(file);
  120. }
  121. }
  122. }
  123. string[] logNetBoxFiles = Directory.GetFiles("D:/Logs/对接盒记录");
  124. if (logNetBoxFiles != null && logNetBoxFiles.Length > 7)
  125. {
  126. foreach (var file in logNetBoxFiles)
  127. {
  128. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  129. {
  130. File.Delete(file);
  131. }
  132. }
  133. }
  134. string[] logNetStationReleaseAGVFiles = Directory.GetFiles("D:/Logs/工位放行记录");
  135. if (logNetStationReleaseAGVFiles != null && logNetStationReleaseAGVFiles.Length > 7)
  136. {
  137. foreach (var file in logNetStationReleaseAGVFiles)
  138. {
  139. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  140. {
  141. File.Delete(file);
  142. }
  143. }
  144. }
  145. string[] logNetErrorFiles = Directory.GetFiles("D:/Logs/调度报错记录");
  146. if (logNetErrorFiles != null && logNetErrorFiles.Length > 7)
  147. {
  148. foreach (var file in logNetErrorFiles)
  149. {
  150. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  151. {
  152. File.Delete(file);
  153. }
  154. }
  155. }
  156. string[] logNetJYUnionTrafficFiles = Directory.GetFiles("D:/Logs/井源联合管制记录");
  157. if (logNetJYUnionTrafficFiles != null && logNetJYUnionTrafficFiles.Length > 7)
  158. {
  159. foreach (var file in logNetJYUnionTrafficFiles)
  160. {
  161. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  162. {
  163. File.Delete(file);
  164. }
  165. }
  166. }
  167. string[] logNetUnionTrafficFiles = Directory.GetFiles("D:/Logs/联合管制记录");
  168. if (logNetUnionTrafficFiles != null && logNetUnionTrafficFiles.Length > 7)
  169. {
  170. foreach (var file in logNetUnionTrafficFiles)
  171. {
  172. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  173. {
  174. File.Delete(file);
  175. }
  176. }
  177. }
  178. string path2 = "管制点记录2";
  179. string[] logNetTraffic2Files = Directory.GetFiles("D:/AGVLogs/" + path2);
  180. if (logNetTraffic2Files != null && logNetTraffic2Files.Length > 7)
  181. {
  182. foreach (var file in logNetTraffic2Files)
  183. {
  184. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  185. {
  186. File.Delete(file);
  187. }
  188. }
  189. }
  190. string path = "管制点记录";
  191. string[] logNetTrafficFiles = Directory.GetFiles("D:/AGVLogs/" + path);
  192. if (logNetTrafficFiles != null && logNetTrafficFiles.Length > 7)
  193. {
  194. foreach (var file in logNetTrafficFiles)
  195. {
  196. if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-7))
  197. {
  198. File.Delete(file);
  199. }
  200. }
  201. }
  202. }
  203. catch
  204. {
  205. }
  206. Thread.Sleep(60000);
  207. }
  208. }
  209. private void DispatchSystem7515_FormClosing(object sender, FormClosingEventArgs e)
  210. {
  211. e.Cancel = true;
  212. }
  213. ConcurrentDictionary<string, TrafficCombineConnector> dictTrafficCombineConnector = new ConcurrentDictionary<string, TrafficCombineConnector>();
  214. ConcurrentDictionary<int, Button> dictRegionLockButton = new ConcurrentDictionary<int, Button>();
  215. public void LoadConfig()
  216. {
  217. string currPath = System.AppDomain.CurrentDomain.BaseDirectory;
  218. string dataPath = currPath + @"data";
  219. string dataFile = dataPath + @"\物料信息表.xls";
  220. try
  221. {
  222. string confStr1 = @"Provider=Microsoft.ACE.OLEDB.12.0;";
  223. string confStr2 = @"Persist Security Info=false;";
  224. string confStr3 = @"Data Source=" + dataFile + ";";
  225. string confStr4 = @"Extended Properties=" + "'Excel 12.0;HDR=YES;IMEX=1'";
  226. string connStr = confStr1 + confStr2 + confStr3 + confStr4;
  227. OleDbConnection oleDC = new OleDbConnection(connStr);
  228. OleDbDataAdapter oleDDA1 = new OleDbDataAdapter("Select * From [放行配置表$]", oleDC);
  229. oleDDA1.Fill(dtStation);
  230. OleDbDataAdapter oleDDA2 = new OleDbDataAdapter("Select * From [自动工位表$]", oleDC);
  231. oleDDA2.Fill(dtStationPLC);
  232. OleDbDataAdapter oleDDA3 = new OleDbDataAdapter("Select * From [类型配置表$]", oleDC);
  233. oleDDA3.Fill(dtType);
  234. OleDbDataAdapter oleDDA4 = new OleDbDataAdapter("Select * From [联合管制表$]", oleDC);
  235. oleDDA4.Fill(dtCombineTraffic);
  236. OleDbDataAdapter oleDDA5 = new OleDbDataAdapter("Select * From [放行盒配置表$]", oleDC);
  237. oleDDA5.Fill(dtStation1);
  238. OleDbDataAdapter oleDDA22 = new OleDbDataAdapter("Select * From [管制配置表$]", oleDC);
  239. oleDDA22.Fill(DtTraffic);
  240. OleDbDataAdapter oleDDA222 = new OleDbDataAdapter("Select * From [红绿灯配置$]", oleDC);
  241. oleDDA222.Fill(DtRedGreenBox);
  242. try
  243. {
  244. OleDbDataAdapter oleDDA40 = new OleDbDataAdapter("Select * From [井源联合管制表$]", oleDC);
  245. oleDDA40.Fill(dtCombineTrafficPLC);
  246. }
  247. catch (Exception ex)
  248. {
  249. //MessageBox.Show(ex.StackTrace);
  250. }
  251. oleDC.Close();
  252. //foreach (DataColumn dcol in dtCombineTrafficPLC.Columns)
  253. //{
  254. // if (dcol.ColumnName.Contains("DB"))// && !dcol.ColumnName.Contains("心跳"))
  255. // {
  256. // DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn();
  257. // col.HeaderText = dcol.ColumnName;
  258. // col.Name = dcol.ColumnName;
  259. // col.ReadOnly = true;
  260. // col.Resizable = DataGridViewTriState.True;
  261. // col.SortMode = DataGridViewColumnSortMode.Automatic;
  262. // dataGridView2.Columns.Add(col);
  263. // }
  264. //}
  265. //for (int i = 0; i < dtCombineTrafficPLC.Rows.Count; i++)
  266. //{
  267. // if (dtCombineTrafficPLC.Columns.Contains("PLC地址"))
  268. // {
  269. // int index = dataGridView2.Rows.Add();
  270. // dataGridView2.Rows[index].Cells[0].Value = dtCombineTrafficPLC.Rows[i][0].ToString();
  271. // var dr = dtCombineTrafficPLC.Rows[i];
  272. // string ip = dr["PLC地址"].ToString();
  273. // string agvheartbitdb = dr["AGV心跳DB"].ToString();
  274. // string plcheartbitdb = dr["PLC心跳DB"].ToString();
  275. // if (!string.IsNullOrEmpty(ip) && IPAddress.TryParse(ip, out IPAddress iPAddress))
  276. // {
  277. // if (!dictTrafficCombineConnector.ContainsKey(ip))
  278. // {
  279. // dictTrafficCombineConnector[ip] = new TrafficCombineConnector(ip, agvheartbitdb, plcheartbitdb);
  280. // }
  281. // Task.Factory.StartNew(() => TrafficCombine(dr, dictTrafficCombineConnector[ip]));
  282. // Thread.Sleep(50);
  283. // }
  284. // }
  285. //}
  286. if (dtCombineTraffic.Rows.Count > 0)
  287. {
  288. DAL.ZSql zSql = new DAL.ZSql();
  289. foreach (DataRow dr in dtCombineTraffic.Rows)
  290. {
  291. string sql = "if not exists (select 1 from T_TrafficCombine where TrafficCombineID = " + dr["管制区号"].ToString() + ") " +
  292. "INSERT INTO T_TrafficCombine(TrafficCombineID) VALUES(" + dr["管制区号"].ToString() + ")";
  293. zSql.Open(sql);
  294. }
  295. zSql.Close();
  296. }
  297. //for (int i = 0; i < dtTraffic.Rows.Count; i++)
  298. //{
  299. // MyTest.ManagedThreadPoolcs.ManagedThreadPool.QueueUserWorkItem(new WaitCallback(TrafficByDispatch), dtTraffic.Rows[i]);
  300. //}
  301. {
  302. //listTypeRoutes.AddRange(dtType.Rows[2][1].ToString().Split(';'));
  303. //listTypes.AddRange(dtType.Rows[1][1].ToString().Split(';'));
  304. int X = 10, Y = 10;
  305. GroupBox gp = new GroupBox();
  306. // for (int a = 0; a < dtType.Rows.Count; a++)
  307. {
  308. //gp = new GroupBox();
  309. //gp.Text = "类型";
  310. //gp.Location = new Point(X, Y);
  311. //gp.AutoSize = true;
  312. //tabPage3.Controls.Add(gp);
  313. //int x = 10, y = 50;
  314. //listTypeRoutes = dtType.Rows[2][1].ToString().Split(';').ToList();
  315. //var listType = dtType.Rows[1][1].ToString().Split(';');
  316. //listTypes = listType.ToList();
  317. //for (int i = 0; i < listType.Length; i++)
  318. //{
  319. // Button btn = new Button();
  320. // btn.Text = listType[i].ToString();
  321. // btn.Location = new Point(x, y);
  322. // btn.Font = new Font("宋体", 12);
  323. // btn.Size = new Size(100, 80);
  324. // btn.Tag = listTypeRoutes[i];
  325. // btn.BackColor = Color.FromKnownColor(KnownColor.Control);
  326. // if (listType[i] == GlobalPara.Type.ToString())
  327. // {
  328. // btn.BackColor = Color.FromKnownColor(KnownColor.Green);
  329. // }
  330. // btn.Click += new EventHandler(Btn_Click1);
  331. // gp.Controls.Add(btn);
  332. // x += btn.Size.Width + 20;
  333. // listTypeBtns.Add(btn);
  334. //}
  335. }
  336. Button btnShiled = new Button();
  337. btnShiled.Text = GlobalPara.CombineTrafficShield ? "联合管制区屏蔽模式" : "联合管制区申请模式";
  338. btnShiled.Location = new Point(X, Y);
  339. btnShiled.Font = new Font("宋体", 15);
  340. btnShiled.Size = new Size(360, 80);
  341. //btn.Tag = trafficid;
  342. btnShiled.Click += BtnShiled_Click; ;
  343. //btn.MouseClick += Btn_MouseClick;
  344. btnShiled.BackColor = GlobalPara.CombineTrafficShield ? Color.Red : Color.Green;
  345. tabPage3.Controls.Add(btnShiled);
  346. X = 10; Y = 150;
  347. if (dtCombineTraffic.Rows.Count > 0)
  348. {
  349. foreach (DataRow dr in dtCombineTraffic.Rows)
  350. {
  351. //List<string> listIn = dr["进管制地标"].ToString().Split(';').ToList();
  352. //List<string> listTraffic = dr["管制区内地标"].ToString().Split(';').ToList();
  353. //List<string> listOut = dr["出管制地标"].ToString().Split(';').ToList();
  354. int.TryParse(dr["管制区号"].ToString(), out int trafficid);
  355. if (trafficid <= 0)
  356. {
  357. continue;
  358. }
  359. Button btn = new Button();
  360. string regionarrange = "(双击释放)";
  361. btn.Text = "联合管制区" + trafficid + regionarrange;
  362. btn.Location = new Point(X, Y);
  363. btn.Font = new Font("宋体", 15);
  364. btn.Size = new Size(360, 80);
  365. btn.Tag = trafficid;
  366. btn.Click += BtnHuaXiao_Click;//Btn_Click
  367. //btn.MouseClick += Btn_MouseClick;
  368. btn.BackColor = Color.FromKnownColor(KnownColor.Control);
  369. X += btn.Size.Width + 20;
  370. tabPage3.Controls.Add(btn);
  371. dictRegionLockButton[trafficid] = btn;
  372. //if (j % 8 == 0)
  373. //{
  374. // X = 10; Y += btn.Height + 20;
  375. //}
  376. }
  377. }
  378. //Task.Factory.StartNew(() => TypeThread());
  379. new Task(() => ScanHuaXiaoRegionLockButtons()).Start();//ScanRegionLockButtons
  380. }
  381. //foreach (DataColumn dcol in dtStationPLC.Columns)
  382. //{
  383. // if (dcol.ColumnName.Contains("DB"))// && !dcol.ColumnName.Contains("心跳"))
  384. // {
  385. // DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn();
  386. // col.HeaderText = dcol.ColumnName;
  387. // col.Name = dcol.ColumnName;
  388. // col.ReadOnly = true;
  389. // col.Resizable = DataGridViewTriState.True;
  390. // col.SortMode = DataGridViewColumnSortMode.Automatic;
  391. // dataGridView1.Columns.Add(col);
  392. // }
  393. //}
  394. //for (int i = 0; i < dtStationPLC.Rows.Count; i++)
  395. //{
  396. // int index = dataGridView1.Rows.Add();
  397. // dataGridView1.Rows[index].Cells[0].Value = dtStationPLC.Rows[i][0].ToString();
  398. // dataGridView1.Rows[index].Cells[1].Value = dtStationPLC.Rows[i][1].ToString();
  399. // dataGridView1.Rows[index].Cells[1].ToolTipText = dtStationPLC.Rows[i]["PLC地址"].ToString();
  400. // var dr = dtStationPLC.Rows[i];
  401. // // MyTest.ManagedThreadPoolcs.ManagedThreadPool.QueueUserWorkItem(new WaitCallback(Test), dtStation.Rows[i]);
  402. // Task.Factory.StartNew(() => Test(dr));
  403. // Thread.Sleep(50);
  404. //}
  405. for (int i = 0; i < dtCombineTraffic.Rows.Count; i++)
  406. {
  407. var dr = dtCombineTraffic.Rows[i];
  408. Task.Factory.StartNew(() => TrafficCombineRequest(dr));//TrafficCombineItself
  409. Thread.Sleep(50);
  410. }
  411. for (int i = 0; i < dtStation1.Rows.Count; i++)
  412. {
  413. var dr = dtStation1.Rows[i];
  414. Task.Factory.StartNew(() => ReleaseThread(dr));
  415. Thread.Sleep(50);
  416. }
  417. for (int i = 0; i < DtTraffic.Rows.Count; i++)
  418. {
  419. var a = i;
  420. Task.Factory.StartNew(() => TrafficByDispatch(a));
  421. Thread.Sleep(50);
  422. }
  423. Task.Factory.StartNew(ThreadProc2);
  424. }
  425. catch (System.Exception ex)
  426. {
  427. MessageBox.Show(ex.StackTrace);
  428. }
  429. }
  430. private void BtnShiled_Click(object sender, EventArgs e)
  431. {
  432. Button btn = sender as Button;
  433. if (GlobalPara.CombineTrafficShield)
  434. {
  435. if (MessageBox.Show("是否切换为联合管制申请模式", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
  436. {
  437. GlobalPara.CombineTrafficShield = false;
  438. Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  439. cfa.AppSettings.Settings["CombineTrafficShield"].Value = GlobalPara.CombineTrafficShield.ToString();
  440. cfa.Save();
  441. btn.Text = GlobalPara.CombineTrafficShield ? "联合管制区屏蔽模式" : "联合管制区申请模式";
  442. string temp0 = $"按钮切换为联合管制申请模式";
  443. AddLog(temp0, "联合管制");
  444. }
  445. }
  446. else
  447. {
  448. if (MessageBox.Show("是否切换为联合管制屏蔽模式", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
  449. {
  450. GlobalPara.CombineTrafficShield = true;
  451. Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  452. cfa.AppSettings.Settings["CombineTrafficShield"].Value = GlobalPara.CombineTrafficShield.ToString();
  453. cfa.Save();
  454. btn.Text = GlobalPara.CombineTrafficShield ? "联合管制区屏蔽模式" : "联合管制区申请模式";
  455. string temp0 = $"按钮切换为联合管制屏蔽模式";
  456. AddLog(temp0, "联合管制");
  457. }
  458. }
  459. btn.BackColor = GlobalPara.CombineTrafficShield ? Color.Red : Color.Green;
  460. }
  461. DateTime datetimeClick = DateTime.Now;
  462. private void Btn_Click(object sender, EventArgs e)
  463. {
  464. if (datetimeClick.AddSeconds(0.6) > DateTime.Now)
  465. {
  466. datetimeClick = DateTime.Now;
  467. Button btn = sender as Button;
  468. if (btn != null)
  469. {
  470. btn.Invoke(new InvokeDelegate(delegate
  471. {
  472. int regionlockid = (int)btn.Tag;
  473. if (regionlockid > 0)
  474. {
  475. JObject objCombineTrafficState = new JObject();
  476. objCombineTrafficState["TrafficID"] = regionlockid;
  477. string resultCombineTrafficStateStr = GlobalPara.PostUrl(objCombineTrafficState.ToString(), GlobalPara.CombineTrafficStateURL);
  478. JObject objResult = JObject.Parse(resultCombineTrafficStateStr);
  479. string str = objResult["RequestTime"].ToString();
  480. if (DateTime.TryParse(str, out DateTime dtRequestTime))
  481. {
  482. int.TryParse(objResult["TrafficAGV"].ToString(), out int trafficagv);
  483. int.TryParse(objResult["RequestID"].ToString(), out int occupyID);
  484. string occupyCompany = occupyID == 1 ? "佳顺" : occupyID >= 1 ? "华晓" : "未知";
  485. if (occupyID > 0 && trafficagv > 0)
  486. {
  487. JObject obj = new JObject();
  488. obj["RequestID"] = objResult["RequestID"].ToString();
  489. obj["TrafficAGV"] = objResult["TrafficAGV"].ToString();
  490. obj["Step"] = 2;
  491. obj["TrafficID"] = regionlockid;
  492. obj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  493. string temp = $"强制是释放{occupyCompany}AGV{trafficagv}占用的管制区:{obj["TrafficID"]}";
  494. AddLog(temp.ToString(), "联合管制");
  495. string resultStr = GlobalPara.PostUrl(obj.ToString(), GlobalPara.CombineTrafficURL);
  496. JObject objResult1 = JObject.Parse(resultStr);
  497. if (bool.TryParse(objResult1["Success"].ToString(), out bool result) && result)
  498. {
  499. temp = $"强制释放{occupyCompany}AGV{trafficagv}占用的管制区:{obj["TrafficID"]}成功";
  500. AddLog(temp.ToString(), "联合管制");
  501. }
  502. else
  503. {
  504. temp = $"强制释放{occupyCompany}AGV{trafficagv}占用的管制区:{obj["TrafficID"]}失败";
  505. AddLog(temp.ToString(), "联合管制");
  506. }
  507. }
  508. }
  509. }
  510. }));
  511. }
  512. }
  513. else
  514. {
  515. datetimeClick = DateTime.Now;
  516. }
  517. }
  518. void ScanRegionLockButtons()
  519. {
  520. while (true)
  521. {
  522. try
  523. {
  524. if (dictRegionLockButton != null)
  525. {
  526. foreach (var item in dictRegionLockButton)
  527. {
  528. int trafficid = item.Key;
  529. JObject objCombineTrafficState = new JObject();
  530. objCombineTrafficState["TrafficID"] = trafficid;
  531. string resultCombineTrafficStateStr = GlobalPara.PostUrl(objCombineTrafficState.ToString(), GlobalPara.CombineTrafficStateURL);
  532. JObject objResult = JObject.Parse(resultCombineTrafficStateStr);
  533. string str = objResult["RequestTime"].ToString();
  534. int.TryParse(objResult["TrafficAGV"].ToString(), out int trafficagv);
  535. int.TryParse(objResult["RequestID"].ToString(), out int occupyID);
  536. string occupyCompany = occupyID == 1 ? "佳顺" : occupyID >= 1 ? "华晓" : "未知";
  537. string msg = objResult["Msg"].ToString();// = "未知";
  538. string regionarrange = "(双击释放)";
  539. if (string.IsNullOrEmpty(msg))
  540. {
  541. string tip = "联合管制区" + trafficid + regionarrange;
  542. if (occupyID > 0)
  543. {
  544. tip = tip + "\r\n" + "occupyCompany" + "AGV" + trafficagv + "占用";
  545. }
  546. else
  547. {
  548. tip = tip + "\r\n未占用";
  549. }
  550. if (dictRegionLockButton.ContainsKey(trafficid))
  551. {
  552. Button btn = dictRegionLockButton[trafficid];
  553. btn.Invoke(new InvokeDelegate(delegate
  554. {
  555. btn.Text = tip;
  556. }));
  557. }
  558. }
  559. else
  560. {
  561. string tip = "联合管制区" + trafficid + regionarrange;
  562. if (occupyID > 0)
  563. {
  564. tip = tip + "\r\n" + msg;
  565. }
  566. }
  567. }
  568. }
  569. }
  570. catch
  571. {
  572. }
  573. Thread.Sleep(1000);
  574. }
  575. }
  576. private void BtnHuaXiao_Click(object sender, EventArgs e)
  577. {
  578. if (datetimeClick.AddSeconds(0.6) > DateTime.Now)
  579. {
  580. datetimeClick = DateTime.Now;
  581. Button btn = sender as Button;
  582. if (btn != null)
  583. {
  584. btn.Invoke(new InvokeDelegate(delegate
  585. {
  586. int Areacode = (int)btn.Tag;
  587. if (Areacode > 0 && btn.Text.Contains("双击释放"))
  588. {
  589. try
  590. {
  591. string resultCombineTrafficStateStr = GlobalPara.GetUrl(GlobalPara.HuaXiaoCombineTrafficStateURL + "/" + Areacode);
  592. if (!string.IsNullOrEmpty(resultCombineTrafficStateStr))
  593. {
  594. JObject objResult = JObject.Parse(resultCombineTrafficStateStr);
  595. int code = (int)objResult["code"];
  596. if (code == 200)
  597. {
  598. string strData = objResult["data"].ToString();
  599. if (!string.IsNullOrEmpty(strData))
  600. {
  601. JObject objData = JObject.Parse(strData);
  602. int.TryParse(objData["AgvNum"].ToString(), out int agvnum);
  603. bool.TryParse(objData["IsLocked"].ToString(), out bool islocked);
  604. if (islocked)
  605. {
  606. JObject obj = new JObject();
  607. obj["mapid"] = 1;
  608. obj["passingagv"] = agvnum;
  609. obj["areacode"] = Areacode;
  610. //obj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  611. string temp = $"双击按钮强制释放AGV:{agvnum}占用联合管制区:{Areacode}";
  612. AddLog(temp.ToString(), "联合管制");
  613. AddLog("请求内容:" + obj.ToString(), "联合管制");
  614. string resultStr = GlobalPara.PostUrl(obj.ToString(), GlobalPara.HuaXiaoCombineTrafficUnLockURL);
  615. AddLog("响应内容:" + resultStr, "联合管制");
  616. JObject objResult1 = JObject.Parse(resultStr);
  617. if ((int)objResult1["code"] == 200&& (bool)objResult1["code"])
  618. {
  619. temp = $"双击按钮强制释放AGV:{agvnum}占用联合管制区:{Areacode}成功";
  620. AddLog(temp, "联合管制");
  621. }
  622. else
  623. {
  624. temp = $"双击按钮强制释放AGV:{agvnum}占用联合管制区:{Areacode}失败";
  625. AddLog(temp, "联合管制");
  626. }
  627. }
  628. }
  629. else
  630. {
  631. AddLog($"双击按钮强制释放,获取联合管制区{Areacode}占用状态data为空", "联合管制");
  632. }
  633. }
  634. }
  635. else
  636. {
  637. AddLog($"双击按钮强制释放,获取联合管制区{Areacode}占用状态失败", "联合管制");
  638. }
  639. }
  640. catch (Exception ex)
  641. {
  642. AddLog("双击按钮强制释放异常:" + ex.ToString(), "联合管制");
  643. }
  644. }
  645. }));
  646. }
  647. }
  648. else
  649. {
  650. datetimeClick = DateTime.Now;
  651. }
  652. }
  653. void ScanHuaXiaoRegionLockButtons()
  654. {
  655. while (true)
  656. {
  657. try
  658. {
  659. if (dictRegionLockButton != null)
  660. {
  661. foreach (var item in dictRegionLockButton)
  662. {
  663. int Areacode = item.Key;
  664. string tip = "联合管制区" + Areacode;
  665. string tipBellow = "";
  666. try
  667. {
  668. string resultCombineTrafficStateStr = GlobalPara.GetUrl(GlobalPara.HuaXiaoCombineTrafficStateURL + "/" + Areacode);
  669. if (!string.IsNullOrEmpty(resultCombineTrafficStateStr))
  670. {
  671. JObject objResult = JObject.Parse(resultCombineTrafficStateStr);
  672. int code = (int)objResult["code"];
  673. if (code == 200)
  674. {
  675. string strData = objResult["data"].ToString();
  676. if (!string.IsNullOrEmpty(strData))
  677. {
  678. JObject objData = JObject.Parse(strData);
  679. int.TryParse(objData["AgvNum"].ToString(), out int agvnum);
  680. bool.TryParse(objData["IsLocked"].ToString(), out bool islocked);
  681. if (!islocked)
  682. {
  683. tipBellow = "未占用";
  684. }
  685. else if (islocked && agvnum < 10000)
  686. {
  687. tip = tip + "(双击释放)";
  688. tipBellow = "佳顺AGV" + agvnum + "占用";
  689. }
  690. if (islocked && agvnum > 10000)
  691. {
  692. tip = tip + "(双击释放)";
  693. tipBellow = "华晓AGV" + agvnum + "占用";
  694. }
  695. }
  696. else
  697. {
  698. tipBellow = "区域状态返回data为空";
  699. }
  700. }
  701. }
  702. else
  703. {
  704. tipBellow = $"获取联合管制区占用状态失败";
  705. }
  706. }
  707. catch (Exception ex)
  708. {
  709. tipBellow = $"获取联合管制区占用状态接口异常";
  710. }
  711. tip = tip + "\r\n" + tipBellow;
  712. if (dictRegionLockButton.ContainsKey(Areacode))
  713. {
  714. Button btn = dictRegionLockButton[Areacode];
  715. btn.Invoke(new InvokeDelegate(delegate
  716. {
  717. btn.Text = tip;
  718. }));
  719. }
  720. }
  721. }
  722. }
  723. catch
  724. {
  725. }
  726. Thread.Sleep(1000);
  727. }
  728. }
  729. public void ThreadProc2()
  730. {
  731. while (true)
  732. {
  733. try
  734. {
  735. var infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true).ToList();
  736. for (int i = 0; i < DtRedGreenBox.Rows.Count; i++)
  737. {
  738. var info = infos.Find(o => DtRedGreenBox.Rows[i][2].ToString().Split(';').Contains(o.MARKNUM.ToString()));
  739. if (info != null)
  740. {
  741. Tools.DispatcherTool.AlarmStartOrStop(1, int.Parse(DtRedGreenBox.Rows[i][0].ToString()), DtRedGreenBox.Rows[i][3].ToString());
  742. }
  743. else
  744. {
  745. Tools.DispatcherTool.AlarmStartOrStop(2, int.Parse(DtRedGreenBox.Rows[i][0].ToString()), DtRedGreenBox.Rows[i][3].ToString());
  746. }
  747. }
  748. }
  749. catch (Exception)
  750. {
  751. }
  752. Thread.Sleep(200);
  753. }
  754. }
  755. public void ThreadProc3(DataRow dr)
  756. {
  757. while (true)
  758. {
  759. try
  760. {
  761. var infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true).ToList();
  762. {
  763. var info = infos.Find(o => dr["放行盒地标"].ToString().Equals(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  764. if (info != null)
  765. {
  766. Tools.DispatcherTool.AgvReadOnStop(info.MARKNUM, info.ROUTENUM, 0, dr["IP地址"].ToString());
  767. }
  768. else
  769. {
  770. Tools.DispatcherTool.AgvReleasedOnStop(int.Parse(dr["放行盒地标"].ToString()), 0, 0, dr["IP地址"].ToString());
  771. }
  772. }
  773. }
  774. catch (Exception)
  775. {
  776. }
  777. Thread.Sleep(1000);
  778. }
  779. }
  780. private void Btn_Click1(object sender, EventArgs e)
  781. {
  782. Button btn = (Button)sender;
  783. if (btn.BackColor == SystemColors.Control)
  784. {
  785. if (MessageBox.Show("是否切换类型为:" + btn.Text, "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
  786. {
  787. btn.BackColor = Color.Green;
  788. // GlobalPara.TypeRoute = int.Parse(btn.Tag.ToString());
  789. GlobalPara.Type = btn.Text;
  790. Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  791. cfa.AppSettings.Settings[GlobalPara.strType].Value = btn.Text.ToString();
  792. cfa.Save();
  793. for (int i = 0; i < listTypeBtns.Count; i++)
  794. {
  795. if (listTypeBtns[i].Text != btn.Text)
  796. {
  797. listTypeBtns[i].BackColor = SystemColors.Control;
  798. }
  799. }
  800. }
  801. }
  802. }
  803. public void ReleaseThread(DataRow dr)
  804. {
  805. while (true)
  806. {
  807. try
  808. {
  809. var Infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true);
  810. var info = Infos.Find(o => dr["放行地标"].ToString().Equals(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  811. if (info != null)
  812. {
  813. DispatcherTool.AgvReadOnStop(info.MARKNUM, info.ROUTENUM, dr["IP地址"].ToString());
  814. }
  815. else
  816. {
  817. DispatcherTool.AgvReleasedOnStop(int.Parse(dr["放行地标"].ToString()), 0, dr["IP地址"].ToString());
  818. }
  819. }
  820. catch (Exception)
  821. {
  822. }
  823. Thread.Sleep(500);
  824. }
  825. }
  826. public void TypeThread()
  827. {
  828. while (true)
  829. {
  830. try
  831. {
  832. var infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true && o.AGVNUM > 0).ToList();
  833. var info = infos.Find(o => o.MARKNUM.ToString() == dtType.Rows[0][1].ToString() && o.RUNSTATUS_Cur == 0x41);
  834. if (info != null)
  835. {
  836. if (listTypes.Contains(GlobalPara.Type))
  837. {
  838. int route = int.Parse(listTypeRoutes[listTypes.IndexOf(GlobalPara.Type)]);
  839. DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, route);
  840. }
  841. }
  842. }
  843. catch (Exception)
  844. {
  845. }
  846. Thread.Sleep(500);
  847. }
  848. }
  849. public void TrafficCombine(DataRow dr)
  850. {
  851. HslCommunication.Profinet.Siemens.SiemensS7Net s7 = null;
  852. {
  853. {
  854. {
  855. s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S200Smart,
  856. dr["PLC地址"].ToString());
  857. }
  858. }
  859. s7.ConnectTimeOut = 1200;
  860. s7.ReceiveTimeOut = 1200;
  861. s7.SetPersistentConnection();
  862. }
  863. while (true)
  864. {
  865. try
  866. {
  867. var Infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true);
  868. var info = Infos.Find(o => dr["进管制地标"].ToString().Split(';').Contains(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  869. if (info != null)
  870. {
  871. var result0 = s7.ReadBool(dr["进管制DB"].ToString());
  872. if (result0.Content != true)
  873. {
  874. s7.Write(dr["进管制DB"].ToString(), true);
  875. string str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},写入请求信号", info.AGVNUM, info.MARKNUM, info.ROUTENUM, dr["管制区号"].ToString());
  876. AddLog(str, "井源联合管制");
  877. }
  878. var result = s7.ReadBool(dr["允许进入DB"].ToString());
  879. if (result.Content == true)
  880. {
  881. DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 0, 10);
  882. string str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},收到允许进入信号", info.AGVNUM, info.MARKNUM, info.ROUTENUM, dr["管制区号"].ToString());
  883. AddLog(str, "井源联合管制");
  884. Thread.Sleep(2000);
  885. var info2 = GlobalPara.AgvInfoDic.Values.ToList().Find(o => o.AGVNUM == info.AGVNUM && o.RUNSTATUS_Cur == 0x40 && o.ConnectStatus == true);
  886. if (info2 != null)
  887. {
  888. s7.Write(dr["管制区DB"].ToString(), true);
  889. str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},写入管制区有车信号(AGV在请求卡已被放行)", info.AGVNUM, info.MARKNUM, info.ROUTENUM, dr["管制区号"].ToString());
  890. AddLog(str, "井源联合管制");
  891. }
  892. }
  893. }
  894. else
  895. {
  896. var result0 = s7.ReadBool(dr["进管制DB"].ToString());
  897. if (result0.Content != false)
  898. {
  899. s7.Write(dr["进管制DB"].ToString(), false);
  900. string str = string.Format("管制区编号:{0},无车在请求卡停止,清除请求信息", dr["管制区号"].ToString());
  901. AddLog(str, "井源联合管制");
  902. }
  903. }
  904. info = Infos.Find(o => dr["管制区内地标"].ToString().Split(';').Contains(o.MARKNUM.ToString()));
  905. if (info != null)
  906. {
  907. var result0 = s7.ReadBool(dr["管制区DB"].ToString());
  908. if (result0.Content != true)
  909. {
  910. s7.Write(dr["管制区DB"].ToString(), true);
  911. string str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},写入管制区有车信号(AGV在读到管制区内的卡)", info.AGVNUM, info.MARKNUM, info.ROUTENUM, dr["管制区号".ToString()]);
  912. AddLog(str, "井源联合管制");
  913. }
  914. }
  915. else
  916. {
  917. var result0 = s7.ReadBool(dr["管制区DB"].ToString());
  918. if (result0.Content != false)
  919. {
  920. s7.Write(dr["管制区DB"].ToString(), false);
  921. string str = string.Format("管制区编号:{0},无车在管制区内,清除管制区有车信息", dr["管制区号"].ToString());
  922. AddLog(str, "井源联合管制");
  923. }
  924. }
  925. }
  926. catch (Exception)
  927. {
  928. }
  929. Thread.Sleep(500);
  930. }
  931. }
  932. //void TrafficCombine(DataRow dr, TrafficCombineConnector trafficCombineConnector)
  933. //{
  934. // int index = dtCombineTrafficPLC.Rows.IndexOf(dr);
  935. // while (true)
  936. // {
  937. // try
  938. // {
  939. // //读取PLC值显示
  940. // foreach (DataColumn dcol in dtCombineTrafficPLC.Columns)
  941. // {
  942. // if (dcol.ColumnName.Contains("DB") && !string.IsNullOrEmpty(dr[dcol.ColumnName].ToString()))
  943. // {
  944. // var result = trafficCombineConnector.ReadBool(dr[dcol.ColumnName].ToString());
  945. // if (dataGridView2.IsHandleCreated && this.IsHandleCreated)
  946. // {
  947. // dataGridView2.Invoke(new InvokeDelegate(delegate
  948. // {
  949. // dataGridView2.Rows[index].Cells[dcol.ColumnName].Value = result;
  950. // if (dataGridView2.Rows[index].Cells[dcol.ColumnName].ToolTipText != dr[dcol.ColumnName].ToString())
  951. // {
  952. // dataGridView2.Rows[index].Cells[dcol.ColumnName].ToolTipText = dr[dcol.ColumnName].ToString();
  953. // }
  954. // }));
  955. // }
  956. // }
  957. // }
  958. // if (!trafficCombineConnector.PLCAlive)
  959. // {
  960. // AddLog("PLC连接断开", "井源联合管制");
  961. // continue;
  962. // }
  963. // bool entering = false;
  964. // var Infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true);
  965. // var infoAtRequestIn = Infos.Find(o => dr["进管制地标"].ToString().Split(';').Contains(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur != 0x41);
  966. // if (infoAtRequestIn != null)
  967. // {
  968. // entering = true;
  969. // }
  970. // var infoInRegion = Infos.Find(o => dr["管制区内地标"].ToString().Split(';').Contains(o.MARKNUM.ToString()));
  971. // if (infoInRegion != null|| entering)//正在进入或者,管制区内有车
  972. // {
  973. // var result0 = trafficCombineConnector.ReadBool(dr["管制区DB"].ToString());
  974. // if (result0 != true)
  975. // {
  976. // trafficCombineConnector.Write(dr["进管制DB"].ToString(), true);
  977. // trafficCombineConnector.Write(dr["管制区DB"].ToString(), true);
  978. // string str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},写入管制区有车信号(AGV在读到管制区内的卡)", infoInRegion.AGVNUM, infoInRegion.MARKNUM, infoInRegion.ROUTENUM, dr["管制区号".ToString()]);
  979. // AddLog(str, "井源联合管制");
  980. // }
  981. // }
  982. // else
  983. // {
  984. // var info = Infos.Find(o => dr["进管制地标"].ToString().Split(';').Contains(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  985. // if (info != null)
  986. // {
  987. // //entering = true;
  988. // var result0 = trafficCombineConnector.ReadBool(dr["进管制DB"].ToString());
  989. // if (result0 != true)
  990. // {
  991. // trafficCombineConnector.Write(dr["进管制DB"].ToString(), true);
  992. // string str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},写入请求信号", info.AGVNUM, info.MARKNUM, info.ROUTENUM, dr["管制区号"].ToString());
  993. // AddLog(str, "井源联合管制");
  994. // }
  995. // var result = trafficCombineConnector.ReadBool(dr["允许进入DB"].ToString());
  996. // if (result == true)
  997. // {
  998. // trafficCombineConnector.Write(dr["管制区DB"].ToString(), true);
  999. // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 0, 10);//info.AGVNUM,
  1000. // string str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},收到允许进入信号,放行AGV", info.AGVNUM, info.MARKNUM, info.ROUTENUM, dr["管制区号"].ToString());
  1001. // AddLog(str, "井源联合管制");
  1002. // //Thread.Sleep(2000);
  1003. // //var info2 = GlobalPara.AgvInfoDic.Values.ToList().Find(o => o.AGVNUM == info.AGVNUM && o.RUNSTATUS_Cur == 0x40 && o.ConnectStatus == true);
  1004. // //if (info2 != null)
  1005. // //{
  1006. // // //trafficCombineConnector.Write(dr["管制区DB"].ToString(), true);
  1007. // // str = string.Format("AGV编号{0},地标:{1},路线:{2},管制区编号:{3},写入管制区有车信号(AGV在请求卡已被放行)", info.AGVNUM, info.MARKNUM, info.ROUTENUM, dr["管制区号"].ToString());
  1008. // // AddLog(str, "联合管制");
  1009. // //}
  1010. // }
  1011. // }
  1012. // else
  1013. // {
  1014. // var result00 = trafficCombineConnector.ReadBool(dr["管制区DB"].ToString());
  1015. // var result01 = trafficCombineConnector.ReadBool(dr["进管制DB"].ToString());
  1016. // if (result00 || result01)
  1017. // {
  1018. // trafficCombineConnector.Write(dr["进管制DB"].ToString(), false);
  1019. // trafficCombineConnector.Write(dr["管制区DB"].ToString(), false);
  1020. // string str = string.Format("管制区编号:{0},无车在管制区内,且无车在请求进入卡,清除管制区有车信息", dr["管制区号"].ToString());
  1021. // AddLog(str, "井源联合管制");
  1022. // }
  1023. // }
  1024. // }
  1025. // //var result1 = trafficCombineConnector.ReadBool(dr["管制区DB"].ToString());
  1026. // //if (!result1)//管制区内无车
  1027. // //{
  1028. // //}
  1029. // }
  1030. // catch (Exception ex)
  1031. // {
  1032. // AddLog(ex.ToString(), "井源联合管制");
  1033. // }
  1034. // Thread.Sleep(500);
  1035. // }
  1036. //}
  1037. //public void Test(object Dr)
  1038. //{
  1039. // if (Dr != null)
  1040. // {
  1041. // DataRow dr = (DataRow)Dr;
  1042. // int index = dtStationPLC.Rows.IndexOf(dr);
  1043. // HslCommunication.Profinet.Siemens.SiemensS7Net s7 = null;
  1044. // {
  1045. // if (dr.Table.Columns.Contains("PLC类型")&&!string.IsNullOrEmpty(dr["PLC类型"].ToString()))
  1046. // {
  1047. // if (dr["PLC类型"].ToString().Trim() == "2")
  1048. // {
  1049. // s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S200Smart,
  1050. // dr["PLC地址"].ToString());
  1051. // }
  1052. // if (dr["PLC类型"].ToString().Trim() == "1")
  1053. // {
  1054. // s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1200,
  1055. // dr["PLC地址"].ToString());
  1056. // }
  1057. // }
  1058. // else
  1059. // {
  1060. // s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1200,
  1061. // dr["PLC地址"].ToString());
  1062. // s7.Rack = (byte)0;
  1063. // s7.Slot = (byte)0;
  1064. // }
  1065. // s7.ConnectTimeOut = 1200;
  1066. // s7.ReceiveTimeOut = 1200;
  1067. // s7.SetPersistentConnection();
  1068. // }
  1069. // while (true)
  1070. // {
  1071. // try
  1072. // {
  1073. // //心跳
  1074. // if (!string.IsNullOrEmpty(dr["中控心跳DB"].ToString()))
  1075. // {
  1076. // var HeartBit = s7.ReadBool(dr["中控心跳DB"].ToString());
  1077. // if (!HeartBit.IsSuccess)
  1078. // {
  1079. // Thread.Sleep(1000);
  1080. // continue;
  1081. // }
  1082. // {
  1083. // s7.Write(dr["中控心跳DB"].ToString(), !HeartBit.Content);
  1084. // }
  1085. // }
  1086. // var infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true && o.AGVNUM > 0).ToList();
  1087. // //进入
  1088. // {
  1089. // var info = infos.Find(o => o.MARKNUM.ToString() == dr["请求进入地标"].ToString() && o.RUNSTATUS_Cur == 0x41);
  1090. // if (info != null)
  1091. // {
  1092. // s7.Write(dr["请求进入DB"].ToString(), true);
  1093. // var inResult = s7.ReadBool(dr["允许进入DB"].ToString());
  1094. // if (inResult.Content == true)
  1095. // {
  1096. // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1097. // }
  1098. // }
  1099. // else
  1100. // {
  1101. // s7.Write(dr["请求进入DB"].ToString(), false);
  1102. // }
  1103. // }
  1104. // //到位
  1105. // {
  1106. // var info = infos.Find(o => o.MARKNUM.ToString() == dr["工位地标"].ToString()&& o.RUNSTATUS_Cur == 0x41);
  1107. // if (info != null)
  1108. // {
  1109. // s7.Write(dr["到位DB"].ToString(), true);
  1110. // var inResult = s7.ReadBool(dr["放行DB"].ToString());
  1111. // if (inResult.Content == true)
  1112. // {
  1113. // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1114. // }
  1115. // }
  1116. // else
  1117. // {
  1118. // s7.Write(dr["到位DB"].ToString(), false);
  1119. // }
  1120. // }
  1121. // //离开
  1122. // {
  1123. // var info = infos.Find(o => o.MARKNUM.ToString() == dr["离开完成地标"].ToString()&& o.RUNSTATUS_Cur == 0x41);
  1124. // if (info != null)
  1125. // {
  1126. // for (int i = 0; i < 5; i++)
  1127. // {
  1128. // s7.Write(dr["离开完成DB"].ToString(), true);
  1129. // Thread.Sleep(300);
  1130. // }
  1131. // //if (info.RUNSTATUS_Cur == 0x41)
  1132. // {
  1133. // if(dr.Table.Columns.Contains("离开完成自动放行"))
  1134. // {
  1135. // if (dr["离开完成自动放行"].ToString().Trim() == "1")
  1136. // {
  1137. // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1138. // }
  1139. // }
  1140. // else
  1141. // {
  1142. // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1143. // }
  1144. // }
  1145. // }
  1146. // else
  1147. // {
  1148. // s7.Write(dr["离开完成DB"].ToString(), false);
  1149. // }
  1150. // }
  1151. // {
  1152. // if (dr.Table.Columns.Contains("安全DB"))
  1153. // {
  1154. // if(!string.IsNullOrEmpty(dr["安全DB"].ToString()))
  1155. // {
  1156. // var inResult = s7.ReadBool(dr["安全DB"].ToString());
  1157. // if (inResult.Content == false)
  1158. // {
  1159. // var info1 = infos.Find(o => o.MARKNUM.ToString() == dr["请求进入地标"].ToString() && o.RUNSTATUS_Cur == 0x40);
  1160. // var info2 = infos.Find(o => o.MARKNUM.ToString() == dr["工位地标"].ToString() && o.RUNSTATUS_Cur == 0x40);
  1161. // if (info1 != null || info2 != null)
  1162. // {
  1163. // var info = info1 == null ? info2 : info1;
  1164. // DispatcherTool.ControlAGVBy1071(info.AGVNUM, 1);
  1165. // }
  1166. // }
  1167. // else if (inResult.Content == true)
  1168. // {
  1169. // var info1 = infos.Find(o => o.MARKNUM.ToString() == dr["请求进入地标"].ToString() && o.RUNSTATUS_Cur == 0x43);
  1170. // var info2 = infos.Find(o => o.MARKNUM.ToString() == dr["工位地标"].ToString() && o.RUNSTATUS_Cur == 0x43);
  1171. // if (info1 != null || info2 != null)
  1172. // {
  1173. // var info = info1 == null ? info2 : info1;
  1174. // DispatcherTool.ControlAGVBy1071(info.AGVNUM, 0);
  1175. // }
  1176. // }
  1177. // }
  1178. // }
  1179. // }
  1180. // {
  1181. // if (dr.Table.Columns.Contains("叫车DB")&& dr.Table.Columns.Contains("叫车地标"))
  1182. // {
  1183. // if (!string.IsNullOrEmpty(dr["叫车DB"].ToString())&& !string.IsNullOrEmpty(dr["叫车地标"].ToString()))
  1184. // {
  1185. // var inResult = s7.ReadBool(dr["叫车DB"].ToString());
  1186. // if (inResult.Content == true)
  1187. // {
  1188. // var info1 = infos.Find(o => o.MARKNUM.ToString() == dr["叫车地标"].ToString() && (o.RUNSTATUS_Cur == 0x41|| o.RUNSTATUS_Cur == 0x44));
  1189. // if (info1 != null )
  1190. // {
  1191. // DispatcherTool.ReleaseAgvOnStop(info1.MARKNUM, 0);
  1192. // }
  1193. // }
  1194. // }
  1195. // }
  1196. // }
  1197. // //读取PLC值显示
  1198. // foreach (DataColumn dcol in dtStationPLC.Columns)
  1199. // {
  1200. // if (dcol.ColumnName.Contains("DB")&&!string.IsNullOrEmpty(dr[dcol.ColumnName].ToString()))
  1201. // {
  1202. // var result = s7.ReadBool(dr[dcol.ColumnName].ToString());
  1203. // if (dataGridView1.IsHandleCreated && this.IsHandleCreated)
  1204. // {
  1205. // dataGridView1.Invoke(new InvokeDelegate(delegate
  1206. // {
  1207. // dataGridView1.Rows[index].Cells[dcol.ColumnName].Value = result.Content;
  1208. // if(dataGridView1.Rows[index].Cells[dcol.ColumnName].ToolTipText!= dr[dcol.ColumnName].ToString())
  1209. // {
  1210. // dataGridView1.Rows[index].Cells[dcol.ColumnName].ToolTipText = dr[dcol.ColumnName].ToString();
  1211. // }
  1212. // }));
  1213. // }
  1214. // }
  1215. // }
  1216. // Thread.Sleep(500);
  1217. // }
  1218. // catch (Exception)
  1219. // {
  1220. // }
  1221. // }
  1222. // }
  1223. //}
  1224. public void StartHttpServer()
  1225. {
  1226. string address = "http://" + GlobalPara.HostIPSPS + ":" + GlobalPara.HostIPSPSPort;
  1227. if (WcsServerHost.Instance.StartServer(address))
  1228. {
  1229. toolStripStatusLabel1.Text = $"Http服务启动成功,地址:{address}";
  1230. }
  1231. else
  1232. {
  1233. toolStripStatusLabel1.Text = $"Http服务启动失败,地址:{address}";
  1234. }
  1235. }
  1236. public static void AddLog(string log, string FileName)
  1237. {
  1238. try
  1239. {
  1240. string content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\t\t" + log;
  1241. RichTextBox richTextBox = new RichTextBox();
  1242. if (FileName.Contains("放行交互"))
  1243. {
  1244. //richTextBox = richTextBox1;
  1245. //if (logNetDateTimeSPS != null)
  1246. //{
  1247. // logNetDateTimeSPS.WriteInfo(log);
  1248. //}
  1249. }
  1250. else if (FileName.Contains("井源联合管制"))
  1251. {
  1252. //richTextBox = richTextBox2;
  1253. //if (logNetDateTimeCJYTraffic != null)
  1254. //{
  1255. // logNetDateTimeCJYTraffic.WriteInfo(log);
  1256. //}
  1257. }
  1258. else if (FileName.Contains("联合管制"))
  1259. {
  1260. richTextBox = richTextBox2;
  1261. if (logNetDateTimeCTraffic != null)
  1262. {
  1263. logNetDateTimeCTraffic.WriteInfo(log);
  1264. }
  1265. }
  1266. else if (FileName.Contains("调度管制"))
  1267. {
  1268. richTextBox = richTextBox3;
  1269. }
  1270. richTextBox.BeginInvoke((Action)(() =>
  1271. {
  1272. if (richTextBox.Lines.Length > 1000)
  1273. {
  1274. richTextBox.Clear();
  1275. }
  1276. int textLength = richTextBox.TextLength;
  1277. richTextBox.AppendText(content);
  1278. richTextBox.AppendText(Environment.NewLine);
  1279. richTextBox.Select(textLength, 4);
  1280. {
  1281. richTextBox.ScrollToCaret();
  1282. }
  1283. }));
  1284. }
  1285. catch (Exception e) { }
  1286. }
  1287. public static DataResponseSPS2 ReleaseAGV(Model.ReleaseInfo3 StationInfo)
  1288. {
  1289. DataResponseSPS2 dataResponse = new DataResponseSPS2();
  1290. dataResponse.code = "E";
  1291. var drs = dtStation.Select("boxParts='" + StationInfo.boxParts + "' and trigger='" + StationInfo.trigger + "'");
  1292. if (drs != null && drs.Length > 0)
  1293. {
  1294. var Infos = GlobalPara.AgvInfoDic.Values.ToList();
  1295. var infos = Infos.FindAll(o => o.MARKNUM.ToString() == drs[0]["工位地标"].ToString() && o.ConnectStatus);
  1296. if (infos != null && infos.Count > 0)
  1297. {
  1298. var info = infos.Find(o => o.RUNSTATUS_Cur == 0x41);
  1299. if (info != null)
  1300. {
  1301. DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1302. dataResponse.code = "S";
  1303. dataResponse.desc = string.Format("AGV车号:{0},地标:{1},路线:{2},boxParts:{3},trigger:{5},状态:{4},放行成功", info.AGVNUM, info.MARKNUM, info.ROUTENUM, StationInfo.boxParts, info.RUNSTATUS_Cur, StationInfo.trigger);
  1304. //var temp = listReleaseInfos.Find(o => o.AGVNUM == info.AGVNUM && o.MARKNUM == info.MARKNUM);
  1305. //if (temp != null)
  1306. //{
  1307. // listReleaseInfos.Remove(temp);
  1308. //}
  1309. }
  1310. else
  1311. {
  1312. dataResponse.desc = string.Format("AGV车号:{0},地标:{1},路线:{2},boxParts:{3},trigger:{5},状态:{4},AGV未处于停止状态,无法放行", info.AGVNUM, info.MARKNUM, info.ROUTENUM, StationInfo.boxParts, info.RUNSTATUS_Cur, StationInfo.trigger);
  1313. }
  1314. }
  1315. else
  1316. {
  1317. dataResponse.desc = string.Format("无AGV在 boxParts:{0},trigger:{1} 上,无法放行", StationInfo.boxParts, StationInfo.trigger);
  1318. }
  1319. }
  1320. else
  1321. {
  1322. dataResponse.desc = string.Format("无工位信息 boxParts:{0},trigger:{1} ,无法放行", StationInfo.boxParts, StationInfo.trigger);
  1323. }
  1324. return dataResponse;
  1325. }
  1326. public void TrafficByDispatch(int i)
  1327. {
  1328. if (DtTraffic.Rows.Count > 0)
  1329. {
  1330. bool b = true;
  1331. while (b)
  1332. {
  1333. try
  1334. {
  1335. // if (!GlobalPara.IsOneKeySleep)
  1336. {
  1337. var listModel = GlobalPara.AgvInfoDic.Values.ToList();
  1338. // for (int i = 0; i < DtTraffic.Rows.Count; i++)
  1339. {
  1340. List<string> listIn = DtTraffic.Rows[i][0].ToString().Split(';').ToList();
  1341. List<string> listTraffic = DtTraffic.Rows[i][1].ToString().Split(';').ToList();
  1342. var results = listModel.FindAll(o => listIn.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
  1343. // }
  1344. if (results != null && results.Count > 0)
  1345. {
  1346. var result = results.OrderBy(o => o.LastModifyMarkTime).ToList()[0];
  1347. var results2 = listModel.FindAll(o => listTraffic.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
  1348. if (listIn.Count == 1 && results.Count > 1)
  1349. {
  1350. logNetTraffic2.WriteInfo("管制区号:" + DtTraffic.Rows[i][2].ToString() + ",管制区进卡有两台的车,重新判断,等待AGV车:(" + result.AGVNUM + "," + result.MARKNUM + ")");
  1351. Thread.Sleep(500);
  1352. continue;
  1353. }
  1354. if (results == null || results2.Count <= 0)
  1355. {
  1356. var results3 = listModel.FindAll(o => result.MARKNUM == o.MARKNUM && o.RUNSTATUS_Cur != 0x41 && o.ConnectStatus == true);
  1357. if (results3 != null && results3.Count <= 0)
  1358. {
  1359. int route = 0; int targetMark = 0;
  1360. DispatcherTool.ReleaseAgvOnStop(result.MARKNUM, route, targetMark, 1);
  1361. lock (portLock1)
  1362. {
  1363. logNetTraffic.WriteInfo(result.AGVNUM + "号AGV符合放行条件,地标为:" + result.MARKNUM + ",路线为" + route + ",目的地标为" + targetMark);
  1364. string content = result.AGVNUM + "号AGV符合放行条件,地标为:" + result.MARKNUM + ",路线为" + route + ",目的地标为" + targetMark;
  1365. AddLog(content, "调度管制");
  1366. }
  1367. }
  1368. else
  1369. {
  1370. if (results3 != null && results3.Count > 0)
  1371. {
  1372. if (results3[0].AGVNUM == result.AGVNUM && result.RUNSTATUS_Cur == 0x41)
  1373. {
  1374. int route = 0; int targetMark = 0;
  1375. DispatcherTool.ReleaseAgvOnStop(result.MARKNUM, route, targetMark, 1);
  1376. lock (portLock1)
  1377. {
  1378. logNetTraffic.WriteInfo(result.AGVNUM + "号AGV符合放行条件2,地标为:" + result.MARKNUM + ",路线为" + route + ",目的地标为" + targetMark);
  1379. string content = result.AGVNUM + "号AGV符合放行条件2,地标为:" + result.MARKNUM + ",路线为" + route + ",目的地标为" + targetMark;
  1380. AddLog(content, "调度管制");
  1381. }
  1382. }
  1383. else
  1384. {
  1385. logNetTraffic2.WriteInfo("管制区号:" + DtTraffic.Rows[i][2].ToString() + ",管制点有车:(" + results3[0].AGVNUM + "," + results3[0].MARKNUM + "),重新判断,等待AGV车:(" + result.AGVNUM + "," + result.MARKNUM + ")");
  1386. }
  1387. }
  1388. }
  1389. }
  1390. else
  1391. {
  1392. if (results2 != null && results2.Count > 0)
  1393. {
  1394. logNetTraffic2.WriteInfo("管制区号:" + DtTraffic.Rows[i][2].ToString() + ",管制区有车:(" + results2[0].AGVNUM + "," + results2[0].MARKNUM + "),重新判断,等待AGV车:(" + result.AGVNUM + "," + result.MARKNUM + ")");
  1395. }
  1396. }
  1397. }
  1398. }
  1399. }
  1400. }
  1401. catch (Exception e)
  1402. {
  1403. logNetDateTimeError.WriteInfo(e.StackTrace);
  1404. }
  1405. finally
  1406. {
  1407. }
  1408. Thread.Sleep(500);
  1409. }
  1410. }
  1411. }
  1412. public void TrafficByDispatch0(int i)
  1413. {
  1414. if (DtTraffic.Rows.Count > 0)
  1415. {
  1416. bool b = true;
  1417. while (b)
  1418. {
  1419. try
  1420. {
  1421. // if (!GlobalPara.IsOneKeySleep)
  1422. {
  1423. var listModel = GlobalPara.AgvInfoDic.Values.ToList();
  1424. // for (int i = 0; i < DtTraffic.Rows.Count; i++)
  1425. {
  1426. List<string> listIn = DtTraffic.Rows[i][0].ToString().Split(';').ToList();
  1427. List<string> listTraffic = DtTraffic.Rows[i][1].ToString().Split(';').ToList();
  1428. var results = listModel.FindAll(o => listIn.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
  1429. // }
  1430. if (results != null && results.Count > 0)
  1431. {
  1432. var result = results.OrderBy(o => o.LastModifyMarkTime).ToList()[0];
  1433. var results2 = listModel.FindAll(o => listTraffic.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
  1434. if (listIn.Count == 1 && results.Count > 1)
  1435. {
  1436. continue;
  1437. }
  1438. if (results == null || results2.Count <= 0)
  1439. {
  1440. var results3 = listModel.FindAll(o => result.MARKNUM == o.MARKNUM && o.RUNSTATUS != 0x41 && o.ConnectStatus == true);
  1441. if (results3 != null && results3.Count <= 0)
  1442. {
  1443. int route = result.ROUTENUM; int targetMark = 0;
  1444. DispatcherTool.ReleaseAgvOnStop(result.MARKNUM, route, targetMark, 1);
  1445. string content = result.AGVNUM + "号AGV符合放行条件,地标为:" + result.MARKNUM + ",路线为" + route + ",目的地标为" + targetMark;
  1446. AddLog(content, "调度管制");
  1447. logNetTraffic.WriteInfo(content);
  1448. }
  1449. }
  1450. }
  1451. }
  1452. }
  1453. }
  1454. catch (Exception e)
  1455. {
  1456. }
  1457. finally
  1458. {
  1459. }
  1460. Thread.Sleep(500);
  1461. }
  1462. }
  1463. }
  1464. public static JObject TrafficCombineLock(JObject obj)
  1465. {
  1466. JObject resultObj = new JObject();
  1467. resultObj["Status"] = "NG";
  1468. resultObj["Message"] = "请求的主机无效";
  1469. lock (portLock1)
  1470. {
  1471. try
  1472. {
  1473. //int Step = (int)obj["Step"];
  1474. int TrafficID = (int)obj["AreaName"];
  1475. int TrafficFlag = (int)obj["EquipType"];
  1476. string AGVID = obj["EquipNumber"].ToString();
  1477. string RequestTime = DateTime.Now.ToString();
  1478. //if (Step == 1)
  1479. {
  1480. DAL.ZSql zsql = new DAL.ZSql();
  1481. string sql = "select * from T_TrafficCombine where TrafficCombineID=" + TrafficID;
  1482. zsql.Open(sql);
  1483. DataTable temp = zsql.m_table.Copy();
  1484. if (temp.Rows.Count > 0)
  1485. {
  1486. var dr = temp.Rows[0];
  1487. if (dr["TrafficFlag"].ToString() == "0" || dr["TrafficFlag"].ToString() == TrafficFlag.ToString() && dr["TrafficAGV"].ToString() == AGVID)
  1488. {
  1489. resultObj["Status"] = "OK";
  1490. resultObj["Message"] = "申请进入成功,请快速通过";
  1491. sql = "update T_TrafficCombine set TrafficFlag=" + TrafficFlag + ",LastInTime='" + RequestTime + "',TrafficAGV='" + AGVID + "' where TrafficCombineID=" + TrafficID;
  1492. zsql.Open(sql);
  1493. }
  1494. else
  1495. {
  1496. resultObj["Status"] = "NG4";
  1497. resultObj["Message"] = "该管制区内已有车";
  1498. }
  1499. }
  1500. else
  1501. {
  1502. resultObj["Status"] = "NG3";
  1503. resultObj["Message"] = "TrafficID不存在";
  1504. }
  1505. zsql.Close();
  1506. }
  1507. }
  1508. catch (Exception e)
  1509. {
  1510. resultObj["Status"] = "NG1";
  1511. resultObj["Message"] = e.Message;
  1512. }
  1513. }
  1514. return resultObj;
  1515. }
  1516. public static JObject TrafficCombineUnLock(JObject obj)
  1517. {
  1518. JObject resultObj = new JObject();
  1519. resultObj["Status"] = "NG";
  1520. resultObj["Message"] = "请求的主机无效";
  1521. lock (portLock1)
  1522. {
  1523. try
  1524. {
  1525. //int Step = (int)obj["Step"];
  1526. int TrafficID = (int)obj["AreaName"];
  1527. int TrafficFlag = (int)obj["EquipType"];
  1528. string AGVID = obj["EquipNumber"].ToString();
  1529. string RequestTime = DateTime.Now.ToString();
  1530. {
  1531. DAL.ZSql zsql = new DAL.ZSql();
  1532. string sql = "select * from T_TrafficCombine where TrafficCombineID=" + TrafficID;
  1533. zsql.Open(sql);
  1534. DataTable temp = zsql.m_table.Copy();
  1535. if (temp.Rows.Count > 0)
  1536. {
  1537. var dr = temp.Rows[0];
  1538. if (dr["TrafficFlag"].ToString() == TrafficFlag.ToString() && dr["TrafficAGV"].ToString() == AGVID)
  1539. {
  1540. resultObj["Status"] = "OK";
  1541. resultObj["Message"] = "申请离开成功,请快速离开";
  1542. sql = "update T_TrafficCombine set TrafficFlag=0,LastOutTime='" + RequestTime + "',TrafficAGV='NOAGV' where TrafficCombineID=" + TrafficID;
  1543. zsql.Open(sql);
  1544. }
  1545. else
  1546. {
  1547. resultObj["Status"] = "NG5";
  1548. resultObj["Message"] = "该车已离开管制区";
  1549. }
  1550. }
  1551. else
  1552. {
  1553. resultObj["Status"] = "NG3";
  1554. resultObj["Message"] = "TrafficID不存在";
  1555. }
  1556. zsql.Close();
  1557. }
  1558. //else
  1559. //{
  1560. // resultObj["Status"] = "NG2";
  1561. // resultObj["Message"] = "Step参数大于2,不合格";
  1562. //}
  1563. }
  1564. catch (Exception e)
  1565. {
  1566. resultObj["Status"] = "NG1";
  1567. resultObj["Message"] = e.Message;
  1568. }
  1569. }
  1570. return resultObj;
  1571. }
  1572. public static JObject TrafficCombine(JObject obj)
  1573. {
  1574. JObject resultObj = new JObject();
  1575. resultObj["Code"] = 100;
  1576. resultObj["Success"] = false;
  1577. resultObj["Msg"] = "未知异常";
  1578. lock (portLock1)
  1579. {
  1580. try
  1581. {
  1582. int Step = (int)obj["Step"];
  1583. int TrafficID = (int)obj["TrafficID"];
  1584. int TrafficFlag = (int)obj["RequestID"];
  1585. string AGVID = obj["TrafficAGV"].ToString();
  1586. string RequestTime = obj["RequestTime"].ToString();
  1587. if (Step == 1)
  1588. {
  1589. DAL.ZSql zsql = new DAL.ZSql();
  1590. string sql = "select * from T_TrafficCombine where TrafficCombineID=" + TrafficID;
  1591. zsql.Open(sql);
  1592. DataTable temp = zsql.m_table.Copy();
  1593. if (temp.Rows.Count > 0)
  1594. {
  1595. var dr = temp.Rows[0];
  1596. if (dr["TrafficFlag"].ToString() == "0" || dr["TrafficFlag"].ToString() == TrafficFlag.ToString() && dr["TrafficAGV"].ToString() == AGVID)
  1597. {
  1598. resultObj["Code"] = 0;
  1599. resultObj["Success"] = true;
  1600. resultObj["Msg"] = "申请进入成功,请快速通过";
  1601. sql = "update T_TrafficCombine set TrafficFlag=" + TrafficFlag + ",LastInTime='" + RequestTime + "',TrafficAGV='" + AGVID + "' where TrafficCombineID=" + TrafficID;
  1602. zsql.Open(sql);
  1603. }
  1604. else
  1605. {
  1606. resultObj["Code"] = 4;
  1607. resultObj["Msg"] = "该管制区内已有车";
  1608. }
  1609. }
  1610. else
  1611. {
  1612. resultObj["Code"] = 3;
  1613. resultObj["Msg"] = "TrafficID不存在";
  1614. }
  1615. zsql.Close();
  1616. }
  1617. else if (Step == 2)
  1618. {
  1619. DAL.ZSql zsql = new DAL.ZSql();
  1620. string sql = "select * from T_TrafficCombine where TrafficCombineID=" + TrafficID;
  1621. zsql.Open(sql);
  1622. DataTable temp = zsql.m_table.Copy();
  1623. if (temp.Rows.Count > 0)
  1624. {
  1625. var dr = temp.Rows[0];
  1626. if (dr["TrafficFlag"].ToString() == TrafficFlag.ToString() && dr["TrafficAGV"].ToString() == AGVID)
  1627. {
  1628. resultObj["Code"] = 0;
  1629. resultObj["Success"] = true;
  1630. resultObj["Msg"] = "申请离开成功,请快速离开";
  1631. sql = "update T_TrafficCombine set TrafficFlag=0,LastOutTime='" + RequestTime + "',TrafficAGV='NOAGV' where TrafficCombineID=" + TrafficID;
  1632. zsql.Open(sql);
  1633. }
  1634. else
  1635. {
  1636. resultObj["Code"] = 5;
  1637. resultObj["Msg"] = "该车已离开管制区";
  1638. }
  1639. }
  1640. else
  1641. {
  1642. resultObj["Code"] = 3;
  1643. resultObj["Msg"] = "TrafficID不存在";
  1644. }
  1645. zsql.Close();
  1646. }
  1647. else
  1648. {
  1649. resultObj["Code"] = 2;
  1650. resultObj["Msg"] = "Step参数大于2,不合格";
  1651. }
  1652. }
  1653. catch (Exception e)
  1654. {
  1655. resultObj["Code"] = 1;
  1656. resultObj["Msg"] = e.Message;
  1657. }
  1658. }
  1659. return resultObj;
  1660. }
  1661. public static JObject TrafficCombineState(JObject obj)
  1662. {
  1663. //JObject resultObj = new JObject();
  1664. //resultObj["Code"] = 100;
  1665. //resultObj["Success"] = false;
  1666. //resultObj["Msg"] = "未知异常";
  1667. JObject resultObj = new JObject();
  1668. resultObj["RequestID"] = "0";
  1669. resultObj["TrafficAGV"] = "UnKown";
  1670. //obj["Step"] = 1;
  1671. resultObj["TrafficID"] = obj["TrafficID"].ToString();
  1672. resultObj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1673. resultObj["Msg"] = "未知";
  1674. lock (portLock1)
  1675. {
  1676. try
  1677. {
  1678. int TrafficID = (int)obj["TrafficID"];
  1679. DAL.ZSql zsql = new DAL.ZSql();
  1680. string sql = "select * from T_TrafficCombine where TrafficCombineID=" + TrafficID;
  1681. zsql.Open(sql);
  1682. DataTable temp = zsql.m_table.Copy();
  1683. if (temp.Rows.Count > 0)
  1684. {
  1685. var dr = temp.Rows[0];
  1686. resultObj["RequestID"] = dr["TrafficFlag"].ToString();
  1687. resultObj["TrafficAGV"] = dr["TrafficAGV"].ToString();
  1688. resultObj["RequestTime"] = dr["LastInTime"].ToString();
  1689. resultObj["Msg"] = "";
  1690. }
  1691. else
  1692. {
  1693. resultObj["Msg"] = "TrafficID不存在";
  1694. }
  1695. zsql.Close();
  1696. }
  1697. catch (Exception e)
  1698. {
  1699. resultObj["Msg"] = "获取管制区:" + obj["TrafficID"] + "异常," + e.Message;
  1700. }
  1701. }
  1702. return resultObj;
  1703. }
  1704. public void TrafficCombineItself(DataRow dr)
  1705. {
  1706. List<string> listIn = dr["进管制地标"].ToString().Split(';').ToList();
  1707. List<string> listTraffic = dr["管制区内地标"].ToString().Split(';').ToList();
  1708. List<string> listOut = dr["出管制地标"].ToString().Split(';').ToList();
  1709. while (true)
  1710. {
  1711. try
  1712. {
  1713. var infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true).ToList();
  1714. {
  1715. //var info = infos.Find(o => dr["进管制地标"].ToString().Equals(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  1716. var info = infos.Find(o => listIn.Contains(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  1717. if (info != null)
  1718. {
  1719. if (GlobalPara.CombineTrafficShield)
  1720. {
  1721. string temp0 = $"联合管制申请屏蔽,AGV{info.AGVNUM}自动放行进入联合管制区:{dr["管制区号"].ToString()}";
  1722. AddLog(temp0, "联合管制");
  1723. DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1724. }
  1725. else
  1726. {
  1727. JObject obj = new JObject();
  1728. obj["RequestID"] = GlobalPara.CombineTrafficID;
  1729. obj["TrafficAGV"] = info.AGVNUM.ToString();
  1730. obj["Step"] = 1;
  1731. obj["TrafficID"] = int.Parse(dr["管制区号"].ToString());
  1732. obj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1733. string temp = $"佳顺AGV:{info.AGVNUM}申请进入管制区:{obj["TrafficID"]},等待允许";
  1734. AddLog(temp.ToString(), "联合管制");
  1735. string resultStr = GlobalPara.PostUrl(obj.ToString(), GlobalPara.CombineTrafficURL);
  1736. JObject objResult = JObject.Parse(resultStr);
  1737. if ((int)objResult["Code"] == 0)
  1738. {
  1739. temp = $"佳顺AGV:{info.AGVNUM}申请进入管制区:{obj["TrafficID"]},联合管制允许进入";
  1740. AddLog(temp, "联合管制");
  1741. DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1742. }
  1743. }
  1744. }
  1745. //info = infos.Find(o => dr["出管制地标"].ToString().Equals(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  1746. //info = infos.Find(o => listOut.Contains(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  1747. //if (info != null)
  1748. //{
  1749. // JObject obj = new JObject();
  1750. // obj["RequestID"] = GlobalPara.CombineTrafficID;
  1751. // obj["TrafficAGV"] = info.AGVNUM.ToString();
  1752. // obj["Step"] = 2;
  1753. // obj["TrafficID"] = int.Parse(dr["管制区号"].ToString());
  1754. // obj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1755. // string resultStr = GlobalPara.PostUrl(obj.ToString(), GlobalPara.CombineTrafficURL);
  1756. // JObject objResult = JObject.Parse(resultStr);
  1757. // if ((int)objResult["Code"] == 0)
  1758. // {
  1759. // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1760. // }
  1761. //}
  1762. info = infos.Find(o => listOut.Contains(o.MARKNUM.ToString()) || (listIn.Contains(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur != 0x41) || listTraffic.Contains(o.MARKNUM.ToString()));
  1763. if (info == null)
  1764. {
  1765. JObject objCombineTrafficState = new JObject();
  1766. objCombineTrafficState["TrafficID"] = int.Parse(dr["管制区号"].ToString());
  1767. string resultCombineTrafficStateStr = GlobalPara.PostUrl(objCombineTrafficState.ToString(), GlobalPara.CombineTrafficStateURL);
  1768. JObject objResult = JObject.Parse(resultCombineTrafficStateStr);
  1769. string str = objResult["RequestTime"].ToString();
  1770. //if (DateTime.TryParse(str, out DateTime dtRequestTime))
  1771. {
  1772. if (objResult["RequestID"].ToString() == GlobalPara.CombineTrafficID)//&& dtRequestTime.AddSeconds(3) <= DateTime.Now
  1773. {
  1774. JObject obj = new JObject();
  1775. obj["RequestID"] = GlobalPara.CombineTrafficID;
  1776. obj["TrafficAGV"] = objResult["TrafficAGV"].ToString();
  1777. obj["Step"] = 2;
  1778. obj["TrafficID"] = int.Parse(dr["管制区号"].ToString());
  1779. obj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1780. string temp = $"佳顺AGV:{objResult["TrafficAGV"]}申请离开管制区:{obj["TrafficID"]}";
  1781. AddLog(temp.ToString(), "联合管制");
  1782. string resultStr = GlobalPara.PostUrl(obj.ToString(), GlobalPara.CombineTrafficURL);
  1783. }
  1784. }
  1785. }
  1786. }
  1787. }
  1788. catch (Exception ex)
  1789. {
  1790. AddLog(ex.ToString(), "联合管制");
  1791. }
  1792. Thread.Sleep(1000);
  1793. }
  1794. }
  1795. public void TrafficCombineRequest(DataRow dr)
  1796. {
  1797. List<string> listIn = dr["进管制地标"].ToString().Split(';').ToList();
  1798. List<string> listTraffic = dr["管制区内地标"].ToString().Split(';').ToList();
  1799. List<string> listOut = dr["出管制地标"].ToString().Split(';').ToList();
  1800. int Areacode = int.Parse(dr["管制区号"].ToString());
  1801. while (true)
  1802. {
  1803. try
  1804. {
  1805. var infos = GlobalPara.AgvInfoDic.Values.ToList().FindAll(o => o.ConnectStatus == true).ToList();
  1806. {
  1807. //var info = infos.Find(o => dr["进管制地标"].ToString().Equals(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur == 0x41);
  1808. var info = infos.Find(o => listIn.Contains(o.MARKNUM.ToString())&& !o.TrafficFlag && o.RUNSTATUS_Cur == 0x41);
  1809. if (info != null)
  1810. {
  1811. if (GlobalPara.CombineTrafficShield)
  1812. {
  1813. string temp0 = $"当前为联合管制屏蔽模式,AGV{info.AGVNUM}自动放行进入联合管制区:{Areacode}";
  1814. AddLog(temp0, "联合管制");
  1815. DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1816. }
  1817. else
  1818. {
  1819. JObject obj = new JObject();
  1820. obj["mapid"] = 1;
  1821. obj["passingagv"] = info.AGVNUM;
  1822. obj["specifiedagvunlock"] = true;
  1823. obj["areacode"] = Areacode;
  1824. //obj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1825. string temp = $"佳顺AGV:{info.AGVNUM}申请进入管制区:{Areacode},等待允许";
  1826. AddLog(temp.ToString(), "联合管制");
  1827. AddLog("请求内容:"+obj.ToString(), "联合管制");
  1828. string resultStr = GlobalPara.PostUrl(obj.ToString(), GlobalPara.HuaXiaoCombineTrafficLockURL);
  1829. AddLog("响应内容:" + resultStr, "联合管制");
  1830. JObject objResult = JObject.Parse(resultStr);
  1831. if ((int)objResult["code"] == 200&& (bool)objResult["data"])
  1832. {
  1833. temp = $"佳顺AGV:{info.AGVNUM}申请进入管制区:{Areacode},联合管制允许进入";
  1834. AddLog(temp, "联合管制");
  1835. DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0);
  1836. Thread.Sleep(3000);
  1837. continue;
  1838. }
  1839. else
  1840. {
  1841. temp = $"佳顺AGV:{info.AGVNUM}申请进入管制区:{Areacode},联合管制禁止进入,原因:{objResult["msg"].ToString()}";
  1842. AddLog(temp, "联合管制");
  1843. }
  1844. }
  1845. }
  1846. if (!GlobalPara.CombineTrafficShield)
  1847. {
  1848. info = infos.Find(o => (listIn.Contains(o.MARKNUM.ToString()) && o.RUNSTATUS_Cur != 0x41) || listTraffic.Contains(o.MARKNUM.ToString()));//listOut.Contains(o.MARKNUM.ToString()) ||
  1849. if (info == null)
  1850. {
  1851. string resultCombineTrafficStateStr = GlobalPara.GetUrl(GlobalPara.HuaXiaoCombineTrafficStateURL + "/" + Areacode);
  1852. if (!string.IsNullOrEmpty(resultCombineTrafficStateStr))
  1853. {
  1854. JObject objResult = JObject.Parse(resultCombineTrafficStateStr);
  1855. int code = (int)objResult["code"];
  1856. if (code == 200)
  1857. {
  1858. string strData = objResult["data"].ToString();
  1859. if (!string.IsNullOrEmpty(strData))
  1860. {
  1861. JObject objData = JObject.Parse(strData);
  1862. int.TryParse(objData["AgvNum"].ToString(), out int agvnum);
  1863. bool.TryParse(objData["IsLocked"].ToString(), out bool islocked);
  1864. if (islocked && agvnum < 10000)
  1865. {
  1866. JObject obj = new JObject();
  1867. obj["mapid"] = 1;
  1868. obj["passingagv"] = agvnum;
  1869. obj["areacode"] = Areacode;
  1870. //obj["RequestTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1871. string temp = $"佳顺AGV:{agvnum}上报离开管制区:{Areacode}";
  1872. AddLog(temp.ToString(), "联合管制");
  1873. AddLog("请求内容:" + obj.ToString(), "联合管制");
  1874. string resultStr = GlobalPara.PostUrl(obj.ToString(), GlobalPara.HuaXiaoCombineTrafficUnLockURL);
  1875. AddLog("响应内容:" + resultStr, "联合管制");
  1876. JObject objResult1 = JObject.Parse(resultStr);
  1877. if ((int)objResult1["code"] == 200&& (bool)objResult1["code"])
  1878. {
  1879. temp = $"佳顺AGV:{agvnum}上报离开管制区:{Areacode}成功";
  1880. AddLog(temp, "联合管制");
  1881. }
  1882. else
  1883. {
  1884. temp = $"佳顺AGV:{agvnum }上报离开管制区:{Areacode}失败";
  1885. AddLog(temp, "联合管制");
  1886. }
  1887. }
  1888. }
  1889. else
  1890. {
  1891. AddLog($"联合管制区{Areacode}占用状态data为空", "联合管制");
  1892. }
  1893. }
  1894. }
  1895. else
  1896. {
  1897. AddLog($"获取联合管制区{Areacode}占用状态失败", "联合管制");
  1898. }
  1899. }
  1900. }
  1901. }
  1902. }
  1903. catch (Exception ex)
  1904. {
  1905. AddLog(ex.InnerException.ToString(), "联合管制");
  1906. }
  1907. Thread.Sleep(1000);
  1908. }
  1909. }
  1910. }
  1911. class TrafficCombineConnector
  1912. {
  1913. public HslCommunication.Profinet.Siemens.SiemensS7Net s7 = null;
  1914. public string PLCIP;
  1915. public string AGVHeartBitDB;
  1916. public string PLCHeartBitDB;
  1917. public TrafficCombineConnector(string plcip, string agvheartbitdb, string plcheartbitdb)
  1918. {
  1919. PLCIP = plcip;
  1920. AGVHeartBitDB = agvheartbitdb;
  1921. PLCHeartBitDB = plcheartbitdb;
  1922. s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S200Smart,
  1923. PLCIP);
  1924. s7.ConnectTimeOut = 1200;
  1925. s7.ReceiveTimeOut = 1200;
  1926. s7.SetPersistentConnection();
  1927. Task.Factory.StartNew(() => ScanHeartBit());
  1928. }
  1929. public bool PLCAlive = false;
  1930. void ScanHeartBit()
  1931. {
  1932. bool plcheartbit = false;
  1933. bool agvheartbit = false;
  1934. DateTime chageDateTime = DateTime.MinValue;
  1935. while (true)
  1936. {
  1937. try
  1938. {
  1939. agvheartbit = !agvheartbit;
  1940. s7.Write(AGVHeartBitDB, agvheartbit);
  1941. OperateResult operateResult = s7.ReadBool(PLCHeartBitDB);
  1942. if (s7.ReadBool(PLCHeartBitDB).IsSuccess)
  1943. {
  1944. if (plcheartbit != s7.ReadBool(PLCHeartBitDB).Content)
  1945. {
  1946. plcheartbit = !plcheartbit;
  1947. chageDateTime = DateTime.Now;
  1948. }
  1949. }
  1950. if (chageDateTime.AddSeconds(5) < DateTime.Now)
  1951. {
  1952. PLCAlive = false;
  1953. }
  1954. else
  1955. {
  1956. PLCAlive = true;
  1957. }
  1958. }
  1959. catch
  1960. {
  1961. }
  1962. Thread.Sleep(500);
  1963. }
  1964. }
  1965. public bool ReadBool(string db)
  1966. {
  1967. return s7.ReadBool(db).IsSuccess && s7.ReadBool(db).Content;
  1968. }
  1969. public bool Write(string db, bool value)
  1970. {
  1971. s7.Write(db, value);
  1972. return s7.ReadBool(db).IsSuccess && (s7.ReadBool(db).Content == value);
  1973. }
  1974. }
  1975. }