Form1.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. 
  2. using FANUC;
  3. using fanuc采集;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Net;
  12. using System.Net.NetworkInformation;
  13. using System.Text;
  14. using System.Threading;
  15. using System.Threading.Tasks;
  16. using System.Windows.Forms;
  17. using static fanuc采集.ConDevice;
  18. namespace HttpServer
  19. {
  20. public partial class Form1 : Form
  21. {
  22. string Http_Request_Url = "http://127.0.0.1:5100/fanuc/";
  23. bool _contine = true;//用于线程循环
  24. private AutoResetEvent autoConnectEvent = new AutoResetEvent(false);//此处需要调用System.Threading;用于触发等待的线程已发生的事件(连接)
  25. public delegate void RecvAndSendHandler(HttpListenerContext s);//此处需要调用System.Net用于请求和响应HttpListener类
  26. public event RecvAndSendHandler RecvAndSend;
  27. AsyncCallback callback;
  28. HttpListenerContext context = null;
  29. public Form1()
  30. {
  31. InitializeComponent();
  32. }
  33. private void Form1_Load(object sender, EventArgs e)
  34. {
  35. this.RecvAndSend += new RecvAndSendHandler(HttpListen_RecvAndSend);
  36. #region 添加监听的信息线程添加到线程池
  37. WaitCallback wc = new WaitCallback(http_Listen);
  38. ThreadPool.QueueUserWorkItem(wc);
  39. label1.Text = "HttpServer已开启:" + Http_Request_Url;
  40. #endregion
  41. }
  42. /// <summary>
  43. /// 监听的线程
  44. /// </summary>
  45. /// <param name="ob"></param>
  46. private void http_Listen(object ob)
  47. {
  48. callback = new AsyncCallback(acceptCallback);
  49. HttpListener httpListenner;
  50. httpListenner = new HttpListener();
  51. httpListenner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
  52. httpListenner.Prefixes.Add(Http_Request_Url);
  53. httpListenner.Start();
  54. while (_contine)
  55. {
  56. try
  57. {
  58. httpListenner.BeginGetContext(callback, httpListenner);
  59. autoConnectEvent.WaitOne();
  60. }
  61. catch (Exception ex)
  62. {
  63. YG.Log.Instance.WriteLogAdd(">>>===服务异常 : >>>>===" + ex.Message);
  64. }
  65. Thread.Sleep(10);
  66. }
  67. }
  68. /// <summary>
  69. /// 回调函数
  70. /// </summary>
  71. /// <param name="ar"></param>
  72. private void acceptCallback(IAsyncResult ar)
  73. {
  74. try
  75. {
  76. context = ((HttpListener)ar.AsyncState).EndGetContext(ar);
  77. }
  78. catch (Exception)
  79. {
  80. autoConnectEvent.Set();
  81. }
  82. if (context != null)
  83. {
  84. RecvAndSend(context);//触发我们一开始声明的事件
  85. autoConnectEvent.Set();
  86. }
  87. }
  88. /// <summary>
  89. /// 接听到消息的方法
  90. /// </summary>
  91. /// <param name="cont"></param>
  92. private void HttpListen_RecvAndSend(HttpListenerContext cont)
  93. {
  94. HttpListenerRequest request = cont.Request;
  95. HttpListenerResponse response = context.Response;
  96. Servlet servlet = new MyServlet();
  97. servlet.onCreate();
  98. try {
  99. if (request.HttpMethod == "GET")
  100. {
  101. {
  102. if (!request.Url.ToString().Contains("favicon"))
  103. {
  104. string ip = request.QueryString["ip"];
  105. string port = request.QueryString["port"];
  106. string fun = request.QueryString["fun"];
  107. int ret = 0;
  108. ConDevice CIF = new ConDevice();
  109. switch (fun)
  110. {
  111. #region
  112. case "All":
  113. ConDevice2 CIF2 = new ConDevice2(ip, port);
  114. DeviceInfo info = new DeviceInfo();
  115. if (CIF2.h > 0)
  116. {
  117. info.MainProg = CIF2.MainProg();
  118. info.CurProg = CIF2.MainProg();
  119. info.Status = CIF2.Status();
  120. info.EMG = CIF2.EMG();
  121. info.ActFeed = CIF2.ActFeed();
  122. info.ActSpindle = CIF2.ActSpindle();
  123. info.SpindleLoad = CIF2.SpindleLoad();
  124. info.spindleMagnification = CIF2.spindleMagnification();
  125. info.ServoLoadX = CIF2.ServoLoadX();
  126. info.ServoLoadY = CIF2.ServoLoadY();
  127. info.ServoLoadZ = CIF2.ServoLoadZ();
  128. info.PowerOnTime = CIF2.PowerOnTime();
  129. info.AccumulateCuttingTime = CIF2.AccumulateCuttingTime();
  130. info.CuttingTimePerCycle = CIF2.CuttingTimePerCycle();
  131. info.WorkTime = CIF2.WorkTime();
  132. info.Part_Count = CIF2.Part_Count();
  133. string isalarm = "";
  134. //info.AlmMsg = CIF2.AlmMsg(out isalarm);
  135. info.AlmMsg = CIF2.operationAlarm();
  136. info.IsAlarm = isalarm;
  137. info.ToolNo = CIF2.ToolNo();
  138. info.ToolLife = CIF2.ToolLife();
  139. //info.ToolLife = CIF2.ToolLife(ip, port);
  140. string jsonalldata = JsonConvert.SerializeObject(info);
  141. CIF2.freehand();
  142. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), jsonalldata);
  143. servlet.onGet(request, response, jsonalldata);
  144. }
  145. else
  146. {
  147. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), CIF2.h.ToString());
  148. servlet.onGet(request, response, CIF2.h.ToString());
  149. }
  150. break;
  151. case "UploadFile":
  152. try
  153. {
  154. string prgname = request.QueryString["prgname"];
  155. YG.Log.Instance.WriteLogAdd(">>>===上传文件名 : >>>>===" + prgname);
  156. ret = CIF.UploadNcProg(ip, port, prgname);
  157. if (ret == Fanuc.EW_OK)
  158. {
  159. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK");
  160. servlet.onGet(request, response, "0");
  161. }
  162. else
  163. {
  164. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString());
  165. servlet.onGet(request, response, ret.ToString());
  166. }
  167. }
  168. catch (Exception uploadex)
  169. {
  170. servlet.onGet(request, response, uploadex.Message);
  171. }
  172. break;
  173. case "DeleteNCProgram":
  174. try
  175. {
  176. string prgname = request.QueryString["prgname"];
  177. ret = CIF.DeleteNcProg(ip, port, prgname);
  178. if (ret == Fanuc.EW_OK)
  179. {
  180. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK");
  181. servlet.onGet(request, response, "0");
  182. }
  183. else
  184. {
  185. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString());
  186. servlet.onGet(request, response, ret.ToString());
  187. }
  188. }
  189. catch (Exception uploadex)
  190. {
  191. servlet.onGet(request, response, uploadex.Message);
  192. }
  193. break;
  194. case "SelectNcProgram":
  195. try
  196. {
  197. string prgname = request.QueryString["prgname"];
  198. YG.Log.Instance.WriteLogAdd(">>>===选择程序文件名 : >>>>===" + prgname);
  199. ret = CIF.SelectedNcProg(ip, port, prgname);
  200. if (ret == Fanuc.EW_OK)
  201. {
  202. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK");
  203. servlet.onGet(request, response, "0");
  204. }
  205. else
  206. {
  207. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString());
  208. servlet.onGet(request, response, ret.ToString());
  209. }
  210. }
  211. catch (Exception uploadex)
  212. {
  213. servlet.onGet(request, response, uploadex.Message);
  214. }
  215. break;
  216. case "StartNCProgram":
  217. try
  218. {
  219. string prgname = request.QueryString["prgname"];
  220. ret = CIF.ReadPmcMarco(ip, port, prgname);
  221. if (ret == Fanuc.EW_OK)
  222. {
  223. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK");
  224. servlet.onGet(request, response, "0");
  225. }
  226. else
  227. {
  228. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString());
  229. servlet.onGet(request, response, ret.ToString());
  230. }
  231. }
  232. catch (Exception uploadex)
  233. {
  234. servlet.onGet(request, response, uploadex.Message);
  235. }
  236. break;
  237. // 读写NCDATA
  238. case "ReadNcdataMarco":
  239. string ncDateaddress = request.QueryString["address"];
  240. int ReadncdataMarco = CIF.ReadMacroRange(ip, port, ncDateaddress);
  241. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ReadncdataMarco\": \"" + ReadncdataMarco + "\"}");
  242. servlet.onGet(request, response, "{\"ReadncdataMarco\": \"" + ReadncdataMarco + "\"}");
  243. break;
  244. // 读写G54工件坐标系
  245. case "ReadWriteZofs":
  246. int ReadWriteZofs = CIF.ReadWriteZofs(ip, port);
  247. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ReadWriteZofs\": \"" + ReadWriteZofs + "\"}");
  248. servlet.onGet(request, response, "{\"ReadWriteZofs\": \"" + ReadWriteZofs + "\"}");
  249. break;
  250. case "Connect":///连接测试
  251. try
  252. {
  253. Ping pingSender = new Ping();
  254. PingReply reply = pingSender.Send(ip);
  255. if (reply.Status!= IPStatus.Success)
  256. {
  257. ret = -16;
  258. }
  259. //retConnect = Fanuc.cnc_allclibhndl3(ip, Convert.ToUInt16(port), 2, out Fanuc.h);
  260. Thread.Sleep(100);
  261. }
  262. catch (Exception ex)
  263. {
  264. servlet.onGet(request, response, ex.Message);
  265. }
  266. if (ret == Fanuc.EW_OK)
  267. {
  268. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "OK");
  269. servlet.onGet(request, response, "0");
  270. }
  271. else
  272. {
  273. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), ret.ToString());
  274. servlet.onGet(request, response, ret.ToString());
  275. }
  276. break;
  277. case "MainProg":
  278. string MainProg = CIF.MainProg(ip, port);
  279. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"MainProg\": \"" + MainProg + "\"}");
  280. servlet.onGet(request, response, "{\"MainProg\": \"" + MainProg + "\"}");
  281. break;
  282. case "CurProg":
  283. string CurProg = CIF.MainProg(ip, port);
  284. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"CurProg\": \"" + CurProg + "\"}");
  285. servlet.onGet(request, response, "{\"CurProg\": \"" + CurProg + "\"}");
  286. break;
  287. case "Status":
  288. string Status = CIF.Status(ip, port);
  289. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"Status\": \"" + Status + "\"}");
  290. servlet.onGet(request, response, "{\"Status\": \"" + Status + "\"}");
  291. break;
  292. case "Mode":
  293. string Mode = CIF.Mode(ip, port);
  294. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"Mode\": \"" + Mode + "\"}");
  295. servlet.onGet(request, response, "{\"Mode\": \"" + Mode + "\"}");
  296. break;
  297. case "EMG":
  298. string EMG = CIF.EMG(ip, port);
  299. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"EMG\": \"" + EMG + "\"}");
  300. servlet.onGet(request, response, "{\"EMG\": \"" + EMG + "\"}");
  301. break;
  302. case "ActFeed":
  303. string ActFeed = CIF.ActFeed(ip, port);
  304. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ActFeed\": \"" + ActFeed + "\"}");
  305. servlet.onGet(request, response, "{\"ActFeed\": \"" + ActFeed + "\"}");
  306. break;
  307. case "ActSpindle":
  308. string ActSpindle = CIF.ActSpindle(ip, port);
  309. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ActSpindle\": \"" + ActSpindle + "\"}");
  310. servlet.onGet(request, response, "{\"ActSpindle\": \"" + ActSpindle + "\"}");
  311. break;
  312. case "ServoLoadX":
  313. string ServoLoadX = CIF.ServoLoadX(ip, port);
  314. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ServoLoadX\": \"" + ServoLoadX + "\"}");
  315. servlet.onGet(request, response, "{\"ServoLoadX\": \"" + ServoLoadX + "\"}");
  316. break;
  317. case "ServoLoadY":
  318. string ServoLoadY = CIF.ServoLoadY(ip, port);
  319. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ServoLoadY\": \"" + ServoLoadY + "\"}");
  320. servlet.onGet(request, response, "{\"ServoLoadY\": \"" + ServoLoadY + "\"}");
  321. break;
  322. case "ServoLoadZ":
  323. string ServoLoadZ = CIF.ServoLoadZ(ip, port);
  324. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ServoLoadZ\": \"" + ServoLoadZ + "\"}");
  325. servlet.onGet(request, response, "{\"ServoLoadZ\": \"" + ServoLoadZ + "\"}");
  326. break;
  327. case "PowerOnTime":
  328. string PowerOnTime = CIF.PowerOnTime(ip, port);
  329. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"PowerOnTime\": \"" + PowerOnTime + "\"}");
  330. servlet.onGet(request, response, "{\"PowerOnTime\": \"" + PowerOnTime + "\"}");
  331. break;
  332. case "AccumulateCuttingTime":
  333. string AccumulateCuttingTime = CIF.AccumulateCuttingTime(ip, port);
  334. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"AccumulateCuttingTime\": \"" + AccumulateCuttingTime + "\"}");
  335. servlet.onGet(request, response, "{\"AccumulateCuttingTime\": \"" + AccumulateCuttingTime + "\"}");
  336. break;
  337. case "CuttingTimePerCycle":
  338. string CuttingTimePerCycle = CIF.CuttingTimePerCycle(ip, port);
  339. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"CuttingTimePerCycle\": \"" + CuttingTimePerCycle + "\"}");
  340. servlet.onGet(request, response, "{\"CuttingTimePerCycle\": \"" + CuttingTimePerCycle + "\"}");
  341. break;
  342. case "WorkTime":
  343. string WorkTime = CIF.WorkTime(ip, port);
  344. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"WorkTime\": \"" + WorkTime + "\"}");
  345. servlet.onGet(request, response, "{\"WorkTime\": \"" + WorkTime + "\"}");
  346. break;
  347. case "Part_Count":
  348. string Part_Count = CIF.Part_Count(ip, port);
  349. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"Part_Count\": \"" + Part_Count + "\"}");
  350. servlet.onGet(request, response, "{\"Part_Count\": \"" + Part_Count + "\"}");
  351. break;
  352. case "ToolNo":
  353. string ToolNo = CIF.ToolNo(ip, port);
  354. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ToolNo\": \"" + ToolNo + "\"}");
  355. servlet.onGet(request, response, "{\"ToolNo\": \"" + ToolNo + "\"}");
  356. break;
  357. case "ToolList":
  358. List<Tool> tools = CIF.ToolLife(ip, port);
  359. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"ToolLife\": \"" + tools + "\"}");
  360. servlet.onGet(request, response, JsonConvert.SerializeObject(tools));
  361. break;
  362. case "AlmInfo":
  363. try {
  364. List<ConDevice.AlmInfo> allAlmList = new List<AlmInfo>();
  365. ConDevice2 con2 = new ConDevice2(ip, port);
  366. //实时报警
  367. List<ConDevice.AlmInfo> alms = con2.operationAlarm();
  368. //信息履历
  369. List<ConDevice.AlmInfo> almLL = con2.rdalmhistry5();
  370. if (alms != null && alms.Count() > 0)
  371. {
  372. allAlmList.AddRange(alms);
  373. }
  374. if (almLL != null && almLL.Count() > 0)
  375. {
  376. allAlmList.AddRange(almLL);
  377. }
  378. con2.freehand();
  379. string jsonData = JsonConvert.SerializeObject(allAlmList);
  380. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"AlmInfo\": \"" + allAlmList.Count() + "\"}");
  381. servlet.onGet(request, response, jsonData);
  382. }
  383. catch(Exception ex)
  384. {
  385. servlet.onGet(request, response, ex.Message);
  386. }
  387. break;
  388. case "IsAlarm":
  389. string state1 = "";
  390. List<ConDevice.AlmInfo> s1 = CIF.AlmMsg(ip, port, out state1);
  391. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"IsAlarm\": \"" + state1 + "\"}");
  392. servlet.onGet(request, response, "{\"IsAlarm\": \"" + state1 + "\"}");
  393. break;
  394. case "NcList":
  395. List<ConDevice.NcInfo> ncinfo = CIF.NcList(ip, port);
  396. string ncinfojson = JsonConvert.SerializeObject(ncinfo);
  397. AddList(DateTime.Now.ToString(), "GET", request.Url.ToString(), "{\"NcList\": \"" + ncinfojson + "\"}");
  398. servlet.onGet(request, response, "{\"NcList\": \"" + ncinfojson + "\"}");
  399. break;
  400. #endregion
  401. default: servlet.onGet(request, response, "无效的请求"); break;
  402. }
  403. }
  404. }
  405. response.Close();
  406. }
  407. else if (request.HttpMethod == "POST")
  408. {
  409. }
  410. }catch(Exception ex)
  411. {
  412. YG.Log.Instance.WriteLogAdd(">>>===服务异常 : >>>>===" + ex.Message);
  413. }
  414. }
  415. public class DeviceInfo
  416. {
  417. public string MainProg { get; set; }
  418. public string CurProg
  419. { get; set; }
  420. public string Status
  421. { get; set; }
  422. public string Mode
  423. { get; set; }
  424. public string EMG
  425. { get; set; }
  426. public string ActFeed
  427. { get; set; }
  428. public string ActSpindle
  429. { get; set; }
  430. public string spindleMagnification
  431. { get; set; }
  432. public string SpindleLoad
  433. { get; set; }
  434. public string ServoLoadX
  435. { get; set; }
  436. public string ServoLoadY
  437. { get; set; }
  438. public string ServoLoadZ
  439. { get; set; }
  440. public string PowerOnTime
  441. { get; set; }
  442. public string AccumulateCuttingTime
  443. { get; set; }
  444. public string CuttingTimePerCycle
  445. { get; set; }
  446. public string WorkTime
  447. { get; set; }
  448. public string Part_Count
  449. { get; set; }
  450. public string IsAlarm
  451. { get; set; }
  452. public List<ConDevice.AlmInfo> AlmMsg
  453. { get; set; }
  454. public string ToolNo
  455. { get; set; }
  456. public string ToolLife
  457. { get; set; }
  458. }
  459. public class Servlet
  460. {
  461. public virtual void onGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response, string info) { }
  462. public virtual void onPost(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { }
  463. public virtual void onCreate()
  464. {
  465. }
  466. }
  467. public void AddList(string dtime, string type, string url, string res)
  468. {
  469. this.Invoke(new Action(delegate ()
  470. {
  471. listView1.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
  472. ListViewItem lvi = new ListViewItem();
  473. lvi.Text = dtime;
  474. lvi.SubItems.Add(type);
  475. lvi.SubItems.Add(url);
  476. lvi.SubItems.Add(res);
  477. this.listView1.Items.Insert(0, lvi);
  478. if(this.listView1.Items.Count > 10)
  479. {
  480. this.listView1.Items.Clear();
  481. }
  482. this.listView1.EndUpdate(); //结束数据处理,UI界面一次性绘制。}
  483. }));
  484. }
  485. public class MyServlet : Servlet
  486. {
  487. public override void onCreate()
  488. {
  489. //base.onCreate();
  490. }
  491. public override void onGet(HttpListenerRequest request, HttpListenerResponse response, string info)
  492. {
  493. Console.WriteLine("GET:" + request.Url);
  494. byte[] buffer = Encoding.UTF8.GetBytes(info);
  495. //string sss = request.QueryString["ty"];
  496. System.IO.Stream output = response.OutputStream;
  497. output.Write(buffer, 0, buffer.Length);
  498. // You must close the output stream.
  499. output.Close();
  500. //listener.Stop();
  501. }
  502. public override void onPost(HttpListenerRequest request, HttpListenerResponse response)
  503. {
  504. Console.WriteLine("POST:" + request.Url);
  505. byte[] res = Encoding.UTF8.GetBytes("OK");
  506. response.OutputStream.Write(res, 0, res.Length);
  507. }
  508. }
  509. }
  510. }