537 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			537 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System;
 | ||
| using System.Collections.Generic;
 | ||
| using System.ComponentModel;
 | ||
| using System.Data;
 | ||
| using System.Drawing;
 | ||
| using System.Linq;
 | ||
| using System.Text;
 | ||
| using System.Windows.Forms;
 | ||
| using System.ServiceModel;
 | ||
| using DeiNiu.Utils;
 | ||
| using System.ServiceModel.Description;
 | ||
| using System.Net;
 | ||
| using System.Runtime.Serialization.Json;
 | ||
| using System.IO;
 | ||
| using System.Threading;
 | ||
| using elelab;
 | ||
| using dn_wms;
 | ||
| using Model;
 | ||
| 
 | ||
| namespace DeiNiu.wms.win
 | ||
| {
 | ||
|     public partial class LightSeviceHostForm : BasicRibbonForm
 | ||
|     {
 | ||
|         static log4net.ILog log = log4net.LogManager.GetLogger("light");
 | ||
|         private ServiceHost host = null;
 | ||
|         public static List<ELabel> labelPool = new List<ELabel>();
 | ||
|          string svrUrl = "http://127.0.0.1:9998/DNLight";
 | ||
|         public LightSeviceHostForm()
 | ||
|         {
 | ||
|             InitializeComponent();
 | ||
|            // startHost();
 | ||
|             //startHost2();
 | ||
|             elelab.pick.init_port(enumLabelPickType.seed);
 | ||
|             Thread threadPreProcess = new Thread(startHost2);
 | ||
|             threadPreProcess.IsBackground = true;
 | ||
|             threadPreProcess.Start();
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         void startHost()
 | ||
|         {
 | ||
|             ServiceLight service = new ServiceLight();
 | ||
|             service.newLabels += this.newLabels;
 | ||
|             service.lightUp += this.lightUp;
 | ||
|             
 | ||
|             host = new ServiceHost(service);
 | ||
|             host.Open();  
 | ||
|         }
 | ||
|         delegate void showStatus();
 | ||
|         void startHost2()
 | ||
|         {
 | ||
|           //  lbStatus.Text = "服务启动失败";
 | ||
|             try
 | ||
|             {
 | ||
|                 svrUrl = System.Configuration.ConfigurationManager.AppSettings["BaseUri"];
 | ||
|                 Uri baseAddress = new Uri(svrUrl);
 | ||
|                 ServiceLight service = new ServiceLight();
 | ||
|                 service.newLabels += this.newLabels;
 | ||
|                 service.lightUp += this.lightUp;
 | ||
|                 service.turnOff += this.turnOff;
 | ||
|                 service.turnOnLts += this.turnOnLights;
 | ||
|                 service.turnOffLts += this.turnOffLights;
 | ||
| 
 | ||
| 
 | ||
|                 host = new ServiceHost(service, baseAddress);
 | ||
|                 elelab.pick.lightOffEvent += testPicked; 
 | ||
|                 WebHttpBinding binding = new WebHttpBinding();
 | ||
|                 ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IServiceLight), binding, baseAddress);
 | ||
|                 WebHttpBehavior httpBehavior = new WebHttpBehavior();
 | ||
|                 endpoint.Behaviors.Add(httpBehavior);
 | ||
|                 host.Opened += delegate
 | ||
|                 {
 | ||
| 
 | ||
|                     if (InvokeRequired)
 | ||
|                     {
 | ||
|                         this.Invoke(new showStatus(delegate()
 | ||
|                         {
 | ||
|                             lbStatus.Text = "服务已启动";
 | ||
|                             lbUrl.Text = svrUrl;
 | ||
|                         }));
 | ||
| 
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         lbStatus.Text = "服务已启动";
 | ||
|                         lbUrl.Text = svrUrl;
 | ||
|                        // lbStatus.Text = "服务启动失败";
 | ||
|                       //  lbUrl.Text ="";
 | ||
|                     }
 | ||
|                 };
 | ||
|                 host.Open();
 | ||
| 
 | ||
|             }
 | ||
|             catch (Exception e)
 | ||
|             {
 | ||
|                 MessageBox.Show("启动服务失败:  "+e.Message);
 | ||
|             }
 | ||
| 
 | ||
|              
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         void testPicked(int eleId, int port, int eleAddress, int count)
 | ||
|         {
 | ||
|             if (InvokeRequired)
 | ||
|             {
 | ||
|                 this.Invoke(new showStatus(delegate()
 | ||
|                 {
 | ||
|                     showResult(eleId, port, eleAddress, count);
 | ||
|                 }));
 | ||
| 
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 showResult(eleId, port, eleAddress, count);
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         void showResult(int eleId, int color, int eleAddress, int count)
 | ||
|         {
 | ||
| 
 | ||
|             lbreturn.Text = string.Format("标签ID:{0} \n\n 端口:{1} \n\n 地址:{2} \n\n 数量:{3}", eleId, color, eleAddress, count);
 | ||
|         }
 | ||
| 
 | ||
|         void newLabels(List<ELabel> lables)
 | ||
|         {
 | ||
|             labelPool = labelPool.Union(lables).ToList<ELabel>();
 | ||
|             labelPool = labelPool.Concat(lables).ToList<ELabel>();
 | ||
| 
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         System.Timers.Timer timer = new System.Timers.Timer();//实例化Timer类 
 | ||
|    
 | ||
|         private void initialTimer()
 | ||
|         {
 | ||
|             int intTime = 5000;
 | ||
|             timer.Interval = intTime;//设置间隔时间,为毫秒;
 | ||
|             timer.Elapsed += new System.Timers.ElapsedEventHandler(lightUp);//到达时间的时候执行事件;
 | ||
|             timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
 | ||
|             timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
 | ||
|             timer.Start();
 | ||
|         }
 | ||
| 
 | ||
|         void lightUp(object source, System.Timers.ElapsedEventArgs e)
 | ||
|         {
 | ||
| 
 | ||
|             if (labelPool.Count == 0)
 | ||
|             { 
 | ||
|                 return; 
 | ||
|             }
 | ||
| 
 | ||
|             ELabel lb = labelPool[0];
 | ||
| 
 | ||
|             int[] ids = new int[] { lb.labelId };
 | ||
|             string[] ele_address = new string[] { lb.address.ToString() };
 | ||
| 
 | ||
|             elelab.pick.init_port(enumLabelPickType.seed);
 | ||
| 
 | ||
|             //  string result = elelab.pick.send_data_pick(null, enumLabelPickType.pick);
 | ||
| 
 | ||
|             bool result = elelab.pick.lightLabels2(labelPool,1,1, enumLabelPickType.seed);
 | ||
| 
 | ||
| 
 | ||
|             if (result)
 | ||
|             {
 | ||
|                 labelPool.Remove(lb);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|      
 | ||
|         
 | ||
| 
 | ||
|         void lightUp(List<ELabel> lables,int portNo)
 | ||
|         {
 | ||
|             //to lightup
 | ||
| 
 | ||
| #if DEBUG
 | ||
|            // portNo = 13;
 | ||
| #endif
 | ||
| 
 | ||
|             int[] ids = new int[lables.Count] ;
 | ||
|             string[] ele_address = new string[lables.Count];
 | ||
|             for(int i=0; i< lables.Count;i++  )
 | ||
|             {
 | ||
|                 ids[i] = lables[i].labelId;
 | ||
| 
 | ||
|                 ele_address[i] = lables[i].address.ToString();       
 | ||
|             
 | ||
|             } 
 | ||
|             elelab.pick.init_port(enumLabelPickType.seed);
 | ||
|             elelab.pick.lightLabels2(lables, portNo,1,enumLabelPickType.seed);
 | ||
|         }
 | ||
| 
 | ||
|         #region a
 | ||
|         private void insertTestData() 
 | ||
|         {
 | ||
|             string url = svrUrl + "/uploadSeeds";
 | ||
| 
 | ||
|             try
 | ||
|             {
 | ||
| 
 | ||
|            //    #region JosnPost
 | ||
|                 List<SeedsItem> seeds   = new    List<SeedsItem>();
 | ||
| 
 | ||
|                 int maxLbId = 1;
 | ||
|                 int k = 0;
 | ||
|                 for (int i = 401; i < 800; i++)
 | ||
|                 {
 | ||
| 
 | ||
|                     SeedsItem si = new SeedsItem();
 | ||
| 
 | ||
| 
 | ||
|                     si.count = i * 9 +1;
 | ||
|                     si.custOrder = "CO" + i * 100 / 3 + 1;
 | ||
|                     si.seedsNo = "seedsNo0" + (i / maxLbId + 1);
 | ||
|                     if (k >= maxLbId)
 | ||
|                     {
 | ||
|                         k = 0;
 | ||
|                     }
 | ||
| 
 | ||
|                     k++;
 | ||
|                     si.elabId = k;
 | ||
|                     si.barcode = k / 5 + 1+ "";
 | ||
|                     si.deskId = 1;
 | ||
| 
 | ||
| 
 | ||
|                     si.itemName = "name" + si.barcode;
 | ||
|                     si.port = si.deskId;
 | ||
|                     si.unit = "each";
 | ||
|                     seeds.Add(si);
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             DataContractJsonSerializer dcSerializer = new DataContractJsonSerializer(typeof(List<SeedsItem> ));
 | ||
| 
 | ||
|             MemoryStream stream = new MemoryStream();
 | ||
| 
 | ||
|             dcSerializer.WriteObject(stream, seeds);
 | ||
| 
 | ||
|             string data = Encoding.UTF8.GetString(stream.ToArray(), 0, (int)stream.Length);
 | ||
| 
 | ||
|             //HttpClient client = new HttpClient();
 | ||
| 
 | ||
|             //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 | ||
| 
 | ||
|             string link = url;
 | ||
| 
 | ||
|             //HttpResponseMessage respondse = await client.PostAsync(link, new StringContent(data));
 | ||
| 
 | ||
|             //string dataWithJason = await respondse.Content.ReadAsStringAsync();
 | ||
|  
 | ||
|             var request = (HttpWebRequest)WebRequest.Create(new Uri(link));
 | ||
|             request.ContentType = "application/json";
 | ||
|             request.Method = "POST";
 | ||
|             var requestStream = request.GetRequestStream();
 | ||
|             using (var writer = new StreamWriter(requestStream))
 | ||
|             { 
 | ||
|                 writer.Write(data);
 | ||
|                 writer.Flush();
 | ||
|             }
 | ||
| 
 | ||
|             /*using (var resp = request.GetResponse())
 | ||
|             {
 | ||
|                 using (var responseStream = resp.GetResponseStream())
 | ||
|                 {
 | ||
|                     var reader = new StreamReader(responseStream);
 | ||
|                     var result = reader.ReadToEnd();
 | ||
|                 }
 | ||
|             }*/
 | ||
| 
 | ||
|             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 | ||
|          
 | ||
|             string json = null;
 | ||
|             using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")))
 | ||
|             {
 | ||
|                 json = reader.ReadToEnd();
 | ||
|             }
 | ||
|            // WebResponse response = request.GetResponse();
 | ||
|           // string json = null;
 | ||
|          //   using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")))
 | ||
|             {
 | ||
|          //       json = reader.ReadToEnd();
 | ||
|             }
 | ||
|            
 | ||
| 
 | ||
|             /*   
 | ||
|             using (var requestStream = await  request.GetRequestStreamAsync())
 | ||
|             {
 | ||
|                 var writer = new StreamWriter(requestStream);
 | ||
|                 writer.Write(data);
 | ||
|                 writer.Flush();
 | ||
|             }
 | ||
| 
 | ||
|             using (var resp = await request.GetResponseAsync())
 | ||
|             {
 | ||
|                 using (var responseStream = resp.GetResponseStream())
 | ||
|                 {
 | ||
|                     var reader = new StreamReader(responseStream);
 | ||
|                     var result = reader.ReadToEnd();
 | ||
|                 }
 | ||
|             }*/
 | ||
| 
 | ||
| 
 | ||
|                 /*
 | ||
|              HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@url);
 | ||
|             request.ContentType = "application/json";
 | ||
|             request.Method = "POST";
 | ||
|             string inputString = data;//"{\"Key\":\"ABCDEFG\"}";
 | ||
|             Byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(inputString);
 | ||
|             request.ContentLength = byteArray.Length;
 | ||
|             Stream rstream = request.GetRequestStream();
 | ||
|             rstream.Write(byteArray, 0, byteArray.Length);
 | ||
|             rstream.Close();
 | ||
|  
 | ||
|  
 | ||
|             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 | ||
|             Stream streams = response.GetResponseStream();
 | ||
|             StreamReader SR = new StreamReader(streams);
 | ||
|             String info = SR.ReadToEnd();
 | ||
|             SR.Dispose();
 | ||
|            */
 | ||
| 
 | ||
|             MessageBox.Show("导入成功");
 | ||
| 
 | ||
|             }
 | ||
|             catch (Exception ex)
 | ||
|             {
 | ||
|                 MessageBox.Show(ex.Message);
 | ||
|             }
 | ||
|              
 | ||
|         }
 | ||
|         #endregion
 | ||
|         private void btnLightSeeds_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         private void LightSeviceHostForm_FormClosing(object sender, FormClosingEventArgs e)
 | ||
|         {
 | ||
|             turnOffLights();
 | ||
|             if (host != null)
 | ||
|             {
 | ||
|                 host.Close();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         void turnOff(int portNo)
 | ||
|         {
 | ||
|             if (unart_manage.com_manage[portNo] == null)
 | ||
|             {
 | ||
|                 return;
 | ||
|             }
 | ||
|              Model.dis_id id;
 | ||
|             //id.ele_id = Convert.ToInt16(new_id.Text);
 | ||
|             id.order = 1;
 | ||
|             id.ele_id = 65535; 
 | ||
|             id.state = 1;
 | ||
|         
 | ||
|             unart_manage.com_manage[portNo].init_port.write_clear_comment(id);
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         void turnOffLights()
 | ||
|         {
 | ||
|              Model.dis_id id;
 | ||
|             //id.ele_id = Convert.ToInt16(new_id.Text);
 | ||
|             id.order = 1;
 | ||
|             id.ele_id = 65535; 
 | ||
|             id.state = 1;
 | ||
|             //id.
 | ||
| 
 | ||
|             foreach (int port in pick.activeComports)//WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS.Keys)
 | ||
|             {
 | ||
|                 if (port == 0)
 | ||
|                 {
 | ||
|                     continue;
 | ||
|                 }
 | ||
|                 //  unart_manage.com_manage[port].write_reset_device(); 复位各个硬件,通道灯,标签。。。
 | ||
| 
 | ||
|                 unart_manage.com_manage[port].init_port.write_clear_comment(id);
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         private void simpleButton1_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             insertTestData();
 | ||
|         }
 | ||
| 
 | ||
|         private void simpleButton1_Click_1(object sender, EventArgs e)
 | ||
|         {
 | ||
|             insertTestData();
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         /*
 | ||
|         void turnOnLights( int portNo,List<ELight> lights )
 | ||
|         {
 | ||
|             foreach(ELight el in lights){
 | ||
|                 
 | ||
|                      channel_led id =new channel_led();
 | ||
|                     id.channel_id = el.lightId;
 | ||
|                     //id.config_word = led_rgb;
 | ||
|                     id.color = el.color;
 | ||
|                     id.state = 1;
 | ||
|                   bool rt=  pick.turnOnLight(portNo, id);
 | ||
|                
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         void turnOffLights(int portNo, List<ELight> lights)
 | ||
|         {
 | ||
|             foreach (ELight el in lights)
 | ||
|             {
 | ||
| 
 | ||
|                 channel_led id = new channel_led();
 | ||
|                 id.channel_id = el.lightId;
 | ||
|                 //id.config_word = led_rgb;
 | ||
|                 id.state = 1;
 | ||
|                 pick.turnOffLight(portNo, id);
 | ||
|                  
 | ||
|             }
 | ||
|         }
 | ||
|         */
 | ||
| 
 | ||
|         int baseLightId = 5000;
 | ||
|         int currentPort = 11;
 | ||
|         bool turnOnLights(int portNo, List<ELight> lights)
 | ||
|         {
 | ||
|             if (portNo == 0)
 | ||
|             {
 | ||
|                 portNo = currentPort;
 | ||
|             }
 | ||
|             // bool rt=false;
 | ||
|             List<ELight> fail = new List<ELight>();
 | ||
|             log.Debug("start light on request ------>");
 | ||
|             foreach (ELight el in lights)
 | ||
|             {
 | ||
|                 channel_led id = new channel_led();
 | ||
|                 id.channel_id = baseLightId + el.lightId;
 | ||
|                 //id.config_word = led_rgb;
 | ||
|                 id.color = el.which;
 | ||
|                 id.state = 1;
 | ||
|                 if (el.port == 0)
 | ||
|                 {
 | ||
|                     el.port = portNo;
 | ||
|                 }
 | ||
|                 if (!pick.turnOnLight(el.port, id))
 | ||
|                 {
 | ||
|                     log.Debug(getJson(el) + " light on failed. redo...");
 | ||
| 
 | ||
|                     fail.Add(el);
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     log.Debug(getJson(el));
 | ||
|                 }
 | ||
| 
 | ||
|                 Thread.Sleep(50);
 | ||
|             }
 | ||
| 
 | ||
|             if (fail.Count > 0)
 | ||
|             {
 | ||
|                 turnOnLights(portNo, fail);
 | ||
|             }
 | ||
|             log.Debug("<----------- end light on request ");
 | ||
|             return fail.Count == 0;
 | ||
|         }
 | ||
| 
 | ||
|         bool turnOffLights(int portNo, List<ELight> lights)
 | ||
|         {
 | ||
|             if (portNo == 0)
 | ||
|             {
 | ||
|                 portNo = currentPort;
 | ||
|             }
 | ||
|             bool rt = false;
 | ||
|             List<ELight> fail = new List<ELight>();
 | ||
|             log.Debug("start light off request ------>");
 | ||
|             foreach (ELight el in lights)
 | ||
|             {
 | ||
| 
 | ||
|                 channel_led id = new channel_led();
 | ||
|                 id.channel_id = baseLightId + el.lightId;
 | ||
|                 //id.config_word = led_rgb;
 | ||
|                 id.color = el.which;
 | ||
|                 id.state = 1;
 | ||
|                 if (el.port == 0)
 | ||
|                 {
 | ||
|                     el.port = portNo;
 | ||
|                 }
 | ||
| 
 | ||
|                 if (!pick.turnOffLight(el.port, id))
 | ||
|                 {
 | ||
|                     log.Debug(getJson(el) + " light off failed. redo...");
 | ||
| 
 | ||
|                     fail.Add(el);
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     log.Debug(getJson(el));
 | ||
|                 }
 | ||
|                 Thread.Sleep(50);
 | ||
| 
 | ||
|             }
 | ||
|             if (fail.Count > 0)
 | ||
|             {
 | ||
|                 turnOffLights(portNo, fail);
 | ||
| 
 | ||
|             }
 | ||
|             log.Debug("<----------- end light off  request ");
 | ||
|             return fail.Count == 0;
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         public string getJson(ELight light)
 | ||
|         {
 | ||
|             string json = "";
 | ||
|           
 | ||
|             json = String.Format("\"lightId\":{0},\"which\":{1}, \"port\":{2}"
 | ||
|               , light.lightId, light.which, light.port);
 | ||
| 
 | ||
| 
 | ||
|             return "{" + json + "}";
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     }
 | ||
| }
 |