988 lines
		
	
	
		
			39 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			988 lines
		
	
	
		
			39 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Collections.Generic; | |||
|  | using System.Linq; | |||
|  | using System.Text; | |||
|  | using System.Threading; | |||
|  | using System.Data; | |||
|  | using System.Windows.Forms; | |||
|  | using Model; | |||
|  | using DeiNiu.wms.Data; | |||
|  | using DeiNiu.wms.Data.Model; | |||
|  | using DeiNiu.Utils; | |||
|  |  using DeiNiu.wms.Logical; | |||
|  |   | |||
|  | namespace elelab | |||
|  | { | |||
|  |     public class pick | |||
|  |     { | |||
|  |         public delegate void lightReturn(int eleId, int colorPort, int eleAddress, int count); | |||
|  |         public static event lightReturn lightOffEvent; | |||
|  |         public static Thread pick_work; | |||
|  |         public static Thread pick_work_support; | |||
|  |      | |||
|  |             | |||
|  |         public static bool begain_pick = false; | |||
|  |         //  public static bool Threads_state; | |||
|  |         // public static bool out_start_state; | |||
|  |         public static byte[,] ele_lab = new byte[3000, 100];//ele_id address type 0 拣选 1 播种 2 装车 | |||
|  |         public static uart_dis_data[] ele_lab_data = new uart_dis_data[10000];//ele_id address type 0 拣选 1 播种 2 装车 | |||
|  |         public static int receive_add = 0; | |||
|  |         public static int manage_add = 0; | |||
|  |         public static int add_max = 10000; | |||
|  | 
 | |||
|  |         public static int[] pick_part_task = new int[100];//分区名称 分区结果 0 没有任务 正在处理任务 | |||
|  |         public static int[] seed_part_task = new int[100];//分区名称 分区结果 0 没有任务 正在处理任务 | |||
|  |         public static int[] tran_part_task = new int[100];//分区名称 分区结果 0 没有任务 正在处理任务 | |||
|  | 
 | |||
|  |    //     public static int port_max = 100; | |||
|  | 
 | |||
|  |         public static bool pick_task = true; | |||
|  | 
 | |||
|  |         public static List<int> activeComports = new List<int>() ;//激活的com口 | |||
|  |           | |||
|  | 
 | |||
|  |         private static byte get_byte(string data) | |||
|  |         { | |||
|  |             int length = data.Length; | |||
|  |             List<string> str = new List<string>(); | |||
|  |             for (int i = 0; i < length; i++) | |||
|  |             { | |||
|  |                 string result = data.Substring(i, 1); | |||
|  |                 char aaaq = Convert.ToChar(result); | |||
|  |                 if ((aaaq >= 0x30) && (aaaq <= 0x39)) | |||
|  |                 { | |||
|  |                     str.Add(data.Substring(i, 1)); | |||
|  |                 } | |||
|  |             } | |||
|  |             if (str.Count == 1) | |||
|  |             { | |||
|  |                 return Convert.ToByte(str[0]); | |||
|  |             } | |||
|  |             else if (str.Count == 2) | |||
|  |             { | |||
|  |                 int len = Convert.ToInt16(str[0]); | |||
|  |                 int len1 = Convert.ToInt16(str[1]); | |||
|  |                 len = len * 10 + len1; | |||
|  |                 return Convert.ToByte(len); | |||
|  |             } | |||
|  |             else if (str.Count == 3) | |||
|  |             { | |||
|  |                 int len = Convert.ToInt16(str[0]); | |||
|  |                 int len1 = Convert.ToInt16(str[1]); | |||
|  |                 int len2 = Convert.ToInt16(str[2]); | |||
|  | 
 | |||
|  |                 len = len * 100 + len1 * 10 + len2; | |||
|  |                 return Convert.ToByte(len); | |||
|  | 
 | |||
|  |             } | |||
|  |             return 0; | |||
|  |         } | |||
|  |         private bool send_data(DataTable[] ds, byte byt) | |||
|  |         { | |||
|  |             for (int j = 0; j < ds.Length; j++) | |||
|  |             { | |||
|  |                 //string part = ; | |||
|  |                 byte part_byte = get_byte(ds[j].Rows[0]["part"].ToString()); | |||
|  |                 string port = ds[j].Rows[0]["port"].ToString(); | |||
|  |                 byte port_byte = get_byte(port); | |||
|  |                 byte led_color = get_byte(ds[j].Rows[0]["color"].ToString()); | |||
|  |                 elelab.pick.make_data(ds[j], led_color, part_byte, port_byte, null, null, null, byt); | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  |         | |||
|  | 
 | |||
|  |         private static void init_sys_port(enumLabelPickType pickType) | |||
|  |         { | |||
|  | 
 | |||
|  |            // activeComports.Clear(); | |||
|  |             clear_order order = new clear_order(); | |||
|  |             int port; | |||
|  |             for (int i = 0; i < unart_manage.com_count; i++)//init com0-10 | |||
|  |             { | |||
|  |                 int com = Convert.ToByte(i); | |||
|  |                 if (elelab.unart_manage.init_com_sys(com, true) == true) | |||
|  |                 { | |||
|  |                     port = Convert.ToInt16(i); | |||
|  |                     // order = Convert.ToInt16(dt.Rows[i]["ele_order"]); | |||
|  |                     order.order = Convert.ToByte(i); | |||
|  |                     order.state =Convert.ToByte((int)pickType); | |||
|  |                     if (unart_manage.com_manage[port].clear_order(order)) | |||
|  |                     { | |||
|  |                         activeComports.Add( port); | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |               | |||
|  |             init_pick(); | |||
|  |             // clear_order(dt); | |||
|  |         } | |||
|  |          | |||
|  |        /* public static bool clear_order(DataTable dt) | |||
|  |         { | |||
|  |             int port; | |||
|  |             clear_order order = new clear_order(); | |||
|  |             for (int i = 0; i < dt.Rows.Count; i++) | |||
|  |             { | |||
|  |                 port = Convert.ToInt16(dt.Rows[i]["port"]); | |||
|  |                 // order = Convert.ToInt16(dt.Rows[i]["ele_order"]); | |||
|  |                 order.order = Convert.ToByte(dt.Rows[i]["ele_order"]); | |||
|  |                 order.state = 1; | |||
|  |                 unart_manage.com_manage[port].clear_order(order); | |||
|  |             } | |||
|  |             return true;  | |||
|  |         } | |||
|  |         * */ | |||
|  | 
 | |||
|  |         public static void init_pick() | |||
|  |         { | |||
|  |             //为数据处理开辟线程 | |||
|  |             // Thread workTicketThread; | |||
|  |             //Thread workTicketThread; | |||
|  |             if (pick_work != null) | |||
|  |                 return; | |||
|  |             pick_work = new Thread(pick_sys); | |||
|  |             // Make this a background thread, so it will terminate when the main thread/process is de-activated | |||
|  |             pick_work.IsBackground = true; | |||
|  |             //pick_work.SetApartmentState(ApartmentState.STA); | |||
|  |             pick_work.SetApartmentState(ApartmentState.MTA); | |||
|  |             // Start the Work | |||
|  |             pick_work.Start(); | |||
|  |             //workerThreads[i] = workTicketThread; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void init_pick_support() | |||
|  |         { | |||
|  |             //为数据处理开辟线程 | |||
|  |             // Thread workTicketThread; | |||
|  |             //Thread workTicketThread; | |||
|  |             pick_work_support = new Thread(pick_sys_support); | |||
|  |             // Make this a background thread, so it will terminate when the main thread/process is de-activated | |||
|  |             pick_work_support.IsBackground = true; | |||
|  |             //pick_work.SetApartmentState(ApartmentState.STA); | |||
|  |             pick_work_support.SetApartmentState(ApartmentState.MTA); | |||
|  |             // Start the Work | |||
|  |             pick_work_support.Start(); | |||
|  |             //workerThreads[i] = workTicketThread; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void wake_thread() | |||
|  |         { | |||
|  | 
 | |||
|  |           //  if (Convert.ToInt16(pick_work.ThreadState) == 68) | |||
|  |             { | |||
|  |                 try | |||
|  |                 { | |||
|  |                     if (Convert.ToInt16(pick_work.ThreadState) == 68) | |||
|  |                     pick_work.Resume(); | |||
|  |                 } | |||
|  |                 catch(Exception  er) | |||
|  |                 { | |||
|  |                     LogHelper.WriteLog(typeof(pick), er); | |||
|  | 
 | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void wake_support_thread() | |||
|  |         { | |||
|  |             if (Convert.ToInt16(pick_work_support.ThreadState) == 68) | |||
|  |                 pick_work_support.Resume(); | |||
|  |         } | |||
|  |         private static void get_data(string data, out int dot_station, out int total_num) | |||
|  |         { | |||
|  |             data = Convert.ToDouble(data).ToString(); | |||
|  |             string[] count = data.Split('.');//Out_count | |||
|  |             int full = Convert.ToInt16(count[0]); | |||
|  |             int dot_num; | |||
|  |             dot_station = 0; | |||
|  |             total_num = full; | |||
|  |             if (count.Length > 1) | |||
|  |             { | |||
|  |                 dot_num = Convert.ToInt16(count[1]); | |||
|  |                 if (dot_num > 0) | |||
|  |                 { | |||
|  |                     if (dot_num < 10) | |||
|  |                     { | |||
|  |                         total_num = full * 10 + dot_num; | |||
|  |                         dot_station = 1; | |||
|  |                     } | |||
|  |                     else if ((dot_num > 9) && (dot_num < 100)) | |||
|  |                     { | |||
|  |                         total_num = full * 100 + dot_num; | |||
|  |                         dot_station = 2; | |||
|  |                     } | |||
|  |                     else if ((dot_num > 99) && (dot_num < 1000)) | |||
|  |                     { | |||
|  |                         total_num = full * 1000 + dot_num; | |||
|  |                         dot_station = 3; | |||
|  |                     } | |||
|  |                     else if ((dot_num > 999) && (dot_num < 10000)) | |||
|  |                     { | |||
|  |                         total_num = full * 10000 + dot_num; | |||
|  |                         dot_station = 4; | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         dot_station = 0; | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |          | |||
|  |         public static bool make_data(DataTable ds, byte led_color, byte ele_order_id, byte port, | |||
|  |                      string[] ele_lab_id, string[] ele_address, string[] Out_count, byte type) | |||
|  |         { | |||
|  |               | |||
|  |             List<string> statuKeys = new List<string>(); | |||
|  |             if (ds != null) | |||
|  |             { | |||
|  |                 if (ds.Rows.Count == 0) | |||
|  |                     return false; | |||
|  |                 uart_dis_data[] ele_data_comment = new uart_dis_data[ds.Rows.Count]; | |||
|  |                 for (int j = 0; j < ds.Rows.Count; j++) | |||
|  |                 { | |||
|  |                     ele_data_comment[j].channel_id = 0;  | |||
|  |                     ele_data_comment[j].dis_type = Convert.ToByte(ds.Rows[j]["color"].ToString()); ;  | |||
|  |                     ele_data_comment[j].ele_id =  Convert.ToInt16(ds.Rows[j]["ele_lab_id"].ToString()); | |||
|  |                     ele_data_comment[j].kucun_id = 0; | |||
|  |                     ele_data_comment[j].little_ele_id = Convert.ToByte(ds.Rows[j]["ele_address"].ToString()); | |||
|  |                     ele_data_comment[j].order = Convert.ToByte(ele_order_id); | |||
|  | 
 | |||
|  |                     ele_data_comment[j].port = "1"; | |||
|  |                     ele_data_comment[j].receive_count = 0; | |||
|  |                     int dot_station; | |||
|  |                     int total_num; | |||
|  |                     string[] count = ds.Rows[j]["send_count"].ToString().Split('.');//Out_count | |||
|  | 
 | |||
|  |                     get_data(ds.Rows[j]["send_count"].ToString(), out dot_station, out total_num); | |||
|  | 
 | |||
|  |                     //total_num = Convert.ToInt16(count[0]); | |||
|  |                     ele_data_comment[j].send_count = total_num;//.ToString()); | |||
|  |                     ele_data_comment[j].dot = Convert.ToByte(0); | |||
|  |                     //ele_data_comment[j].dot = 0; | |||
|  |                     ele_data_comment[j].WarehousingID = 0; | |||
|  |                     ele_lab[ele_data_comment[j].ele_id, ele_data_comment[j].little_ele_id] = type; | |||
|  | 
 | |||
|  |                     statuKeys.Add(Util.getLightKey(led_color,  Convert.ToInt16(ds.Rows[j]["ele_lab_id"].ToString()), Convert.ToByte(ds.Rows[j]["ele_address"].ToString()))); | |||
|  | 
 | |||
|  |                 }  | |||
|  |                 clear_order order = new clear_order(); | |||
|  |                 order.order = Convert.ToByte(ele_order_id); | |||
|  |                 order.state = 1; | |||
|  |                 if (unart_manage.com_manage[port].clear_order(order) == false) | |||
|  |                 { | |||
|  |                     LogHelper.WriteLog(typeof(pick), string.Format(" port {0} clear fail",port)); | |||
|  |                     //MessageBox.Show("clear fail"); | |||
|  |                      return false; | |||
|  |                 } | |||
|  |                 //elelab.ele_base.usart_send_state = false; //ele .usart_send_state = false; | |||
|  |                 while (unart_manage.com_manage[port].send_state_finish == false) ; | |||
|  |                 unart_manage.com_manage[port].send_state_finish = false; | |||
|  |                 unart_manage.com_manage[port].usart_send_state = false; | |||
|  |                 unart_manage.com_manage[port].usart_send_result = ""; | |||
|  |                 if (unart_manage.com_manage[port].write_data(ele_data_comment) == false) | |||
|  |                 { | |||
|  |                     LogHelper.WriteLog(typeof(pick), string.Format(" port {0} send fail", port)); | |||
|  |                     //MessageBox.Show("send  fail") ; | |||
|  |                     unart_manage.com_manage[port].send_state_finish = true; | |||
|  |                     unart_manage.com_manage[port].usart_send_state = true; | |||
|  |                     unart_manage.com_manage[port].usart_send_result = ""; | |||
|  |                      return false; | |||
|  |                 } | |||
|  |                 string result; | |||
|  |                 bool isLightsSuccess = unart_manage.com_manage[port].wait_ack(out result); | |||
|  | 
 | |||
|  |                 foreach(string key in statuKeys){ | |||
|  |                     WmsConstants.WAVE_CURRENT_LIGHTS_STATUS[key] = isLightsSuccess; | |||
|  |                 }  | |||
|  |                 return isLightsSuccess; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 uart_dis_data[] ele_data_comment = new uart_dis_data[ele_lab_id.Length]; | |||
|  |                 for (int j = 0; j < ele_lab_id.Length; j++) | |||
|  |                 { | |||
|  |                     ele_data_comment[j].channel_id = 0;  | |||
|  |                     ele_data_comment[j].dis_type = led_color;  | |||
|  |                     ele_data_comment[j].ele_id = Convert.ToInt16(ele_lab_id[j].ToString()); | |||
|  |                     ele_data_comment[j].kucun_id = 0; | |||
|  |                     ele_data_comment[j].little_ele_id = Convert.ToByte(ele_address[j].ToString()); | |||
|  |                     ele_data_comment[j].order = Convert.ToByte(ele_order_id); | |||
|  |                     ele_data_comment[j].port = "1"; | |||
|  |                     ele_data_comment[j].receive_count = 0; | |||
|  |                     string[] count = Out_count[j].ToString().Split('.'); | |||
|  |                     ele_data_comment[j].send_count = Convert.ToInt16(count[0]);//.ToString()); | |||
|  |                     ele_data_comment[j].state = 1; | |||
|  |                     ele_data_comment[j].WarehousingID = 0; | |||
|  |                     ele_lab[ele_data_comment[j].ele_id, ele_data_comment[j].little_ele_id] = type; | |||
|  |                 }// //向串口发送数据 | |||
|  |                 clear_order order = new clear_order(); | |||
|  |                 order.order = Convert.ToByte(ele_order_id); | |||
|  |                 order.state = 1; | |||
|  |                 if (unart_manage.com_manage[port].clear_order(order) == false) | |||
|  |                 { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 if (unart_manage.com_manage[port].write_data(ele_data_comment) == false) | |||
|  |                 { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 return true; | |||
|  |             } | |||
|  |         } | |||
|  |          public static bool clear_dis(byte port, byte ele_order_id) | |||
|  |         { | |||
|  |             clear_order order = new clear_order(); | |||
|  |             order.order = Convert.ToByte(ele_order_id); | |||
|  |             order.state = 1; | |||
|  |             return unart_manage.com_manage[port].clear_order(order); | |||
|  |         } | |||
|  |         public static bool rest_sys_device(byte port) | |||
|  |         { | |||
|  |             //clear_order order = new clear_order(); | |||
|  |             //order.order = Convert.ToByte(ele_order_id); | |||
|  |             //order.state = 1; | |||
|  |             unart_manage.com_manage[port].write_reset_device(); | |||
|  |             return true; | |||
|  |         } | |||
|  |         //依次点亮数据 | |||
|  |         private void order_by_desc(string wave_order, string part, bool order) | |||
|  |         { | |||
|  | 
 | |||
|  |             //make_data(); | |||
|  |             // unart_manage.com_manage[port - 1]. | |||
|  |         } | |||
|  |         private static void read_single(int address) | |||
|  |         { | |||
|  |             while (unart_manage.com_manage[address].manage_address != unart_manage.com_manage[address].receive_address) | |||
|  |             { | |||
|  |                 ele_lab_data[receive_add] = unart_manage.com_manage[address].return_data[unart_manage.com_manage[address].manage_address]; | |||
|  |                 receive_add++; | |||
|  |                 if (receive_add >= add_max) | |||
|  |                 { | |||
|  |                     receive_add = 0; | |||
|  |                 } | |||
|  |                 unart_manage.com_manage[address].manage_address++; | |||
|  |                 if (unart_manage.com_manage[address].manage_address >= unart_manage.com_manage[address].return_max) | |||
|  |                 { | |||
|  |                     unart_manage.com_manage[address].manage_address = 0; | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |         private static void receive_data() | |||
|  |         { | |||
|  |             for (int i = 0; i < unart_manage.com_manage.Length; i++) | |||
|  |             { | |||
|  |                 if (unart_manage.com_manage[i] != null) | |||
|  |                 { | |||
|  |                     if (unart_manage.com_manage[i].wait_data == true) | |||
|  |                     {//读取数据 | |||
|  |                         unart_manage.com_manage[i].wait_data = false; | |||
|  |                         read_single(i); | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |         private static string receive_data_dot(int count, int dot_station) | |||
|  |         { | |||
|  |             string result = "0"; | |||
|  |             if (dot_station == 0) | |||
|  |             { | |||
|  |                 result = count.ToString(); | |||
|  |             } | |||
|  |             else if (dot_station == 1) | |||
|  |             { | |||
|  |                 result = (count / 10).ToString() + "." + (count % 10).ToString(); | |||
|  |             } | |||
|  |             else if (dot_station == 2) | |||
|  |             { | |||
|  |                 result = (count / 100).ToString() + "." + (count % 100).ToString(); | |||
|  |             } | |||
|  |             else if (dot_station == 3) | |||
|  |             { | |||
|  |                 result = (count / 1000).ToString() + "." + (count % 1000).ToString(); | |||
|  |             } | |||
|  |             return result; | |||
|  |         } | |||
|  | 
 | |||
|  |       //  static WmsOutPickLable outPick = new WmsOutPickLable(); | |||
|  |        // static lWmsOutPickRequest lpickRequest = new lWmsOutPickRequest(); | |||
|  |        /// <summary> | |||
|  |        /// send back from elabel | |||
|  |        /// </summary> | |||
|  |         public static void return_data1() | |||
|  |         { | |||
|  | 
 | |||
|  |             List<string> statuKeys = new List<string>(); | |||
|  |           //  string sql, table; | |||
|  |             int ele_id; | |||
|  |             int little_ele_id; | |||
|  |             int receive_count; | |||
|  |             int little_ele_id_2; | |||
|  |             string color; | |||
|  |             int seedsId;//[t_wmsOutSeeds_tmp].id 区分同一个标签对应多个货物的情况 | |||
|  |            // WmsOutPickLable outPick = new WmsOutPickLable(); | |||
|  |             int orderNo; | |||
|  |             enumLabelPickType pickType =enumLabelPickType.pick; //同一个控制器应该拣选类型唯一 | |||
|  |           //  int cnt = 0; | |||
|  |             Dictionary<string, bool> tmp = WmsConstants.WAVE_CURRENT_PICK_STATUS; | |||
|  |             while (receive_add != manage_add) | |||
|  |             { | |||
|  |               //  cnt++; | |||
|  |                  | |||
|  |                 receive_count =Convert.ToInt16( receive_data_dot(Convert.ToInt32(ele_lab_data[manage_add].receive_count), Convert.ToInt16(ele_lab_data[manage_add].dot))); | |||
|  |                 // ele_lab_data[receive_add] | |||
|  |                 //receive_count = "0"; | |||
|  |                 ele_id = Convert.ToInt16(ele_lab_data[manage_add].ele_id.ToString()); //label id | |||
|  |                 color = ele_lab_data[manage_add].dis_type.ToString();//.order.ToString();//color | |||
|  |                 little_ele_id = Convert.ToInt16(ele_lab_data[manage_add].little_ele_id.ToString()); //ele address | |||
|  |                 little_ele_id_2 = Convert.ToInt16(ele_lab_data[manage_add].little_ele_idH2.ToString()); //ele address | |||
|  |                 int state = elelab.pick.ele_lab[ele_id, little_ele_id]; | |||
|  |                 pickType = (enumLabelPickType)state; | |||
|  |                 orderNo = Convert.ToInt16(ele_lab_data[manage_add].order.ToString()); //port | |||
|  |                 seedsId =  ele_lab_data[manage_add].WarehousingID ; //port | |||
|  |                    string key;// = Util.getLightKey(Convert.ToInt16(color), ele_id, little_ele_id); | |||
|  |                    lWmsOutPickLable lwp; | |||
|  |                    bool isPickOver = false;   | |||
|  |                 //WmsConstants.WAVE_CURRENT_PICK_STATUS[key] = true; | |||
|  | 
 | |||
|  |                    if (ele_id == 0) | |||
|  |                    { | |||
|  |                        manage_add = receive_add; | |||
|  |                        break; | |||
|  |                    } | |||
|  | 
 | |||
|  |                 switch (pickType) | |||
|  |                 { | |||
|  |                     case enumLabelPickType.pick: | |||
|  |                         key = Util.getLightKey(Convert.ToInt16(color), ele_id, little_ele_id); | |||
|  |                         if (WmsConstants.WAVE_CURRENT_PICK_STATUS.ContainsKey(key) ) | |||
|  |                         { | |||
|  |                             manage_add++; | |||
|  |                     | |||
|  |                             if (manage_add >= add_max) | |||
|  |                             { | |||
|  |                                 manage_add = 0; | |||
|  |                             } | |||
|  |                             if (WmsConstants.WAVE_CURRENT_PICK_STATUS[key]) | |||
|  |                             { | |||
|  |                                 continue; | |||
|  |                             } | |||
|  |                         } | |||
|  |                                | |||
|  |                              lwp = new lWmsOutPickLable(); | |||
|  |                               | |||
|  |                          //  lwp.getWmsOutPickLable.updatePickingStatus(Convert.ToInt16(color), ele_id, little_ele_id, Convert.ToDecimal(receive_count)); | |||
|  |                             WmsConstants.WAVE_CURRENT_PICK_STATUS[key] = lwp.getWmsOutPickLable.updatePickingStatus(Convert.ToInt16(color), ele_id,little_ele_id,  Convert.ToDecimal(receive_count)) >0;//本次拣选完毕 | |||
|  |                               isPickOver =  lwp.getWmsOutPickLable.getCurrentPickList( DeiNiu.Utils.enumPickState.未拣).Tables[0].Rows.Count == 0;//波次是否全部拣选完毕 | |||
|  | 
 | |||
|  |                             elelab.pick.pick_task = isPickOver; | |||
|  | 
 | |||
|  |                             if (isPickOver) | |||
|  |                             {  | |||
|  |                                 //notice pick finished | |||
|  |                                  lwp. finishCurrentWave(WmsConstants.WAVE_CURRENT_ORDER,false);  | |||
|  | 
 | |||
|  |                             } | |||
|  | 
 | |||
|  |                         break; | |||
|  |                       | |||
|  |                 } | |||
|  |                  | |||
|  |                   | |||
|  |                  manage_add++; | |||
|  |                 if (manage_add >= add_max) | |||
|  |                 { | |||
|  |                     manage_add = 0; | |||
|  |                 }  | |||
|  |                  | |||
|  |             } | |||
|  |             //统一处理。。。。 | |||
|  |             /* | |||
|  |             if (cnt == 0) | |||
|  |             { | |||
|  |                 return; | |||
|  |             } | |||
|  |             switch (pickType) | |||
|  |             { | |||
|  |                 case enumLabelPickType.pick: | |||
|  |                   | |||
|  |                      bool isPickOver = outPick.getCurrentPickList(DeiNiu.Utils.enumLabelPickState.notPicked).Tables[0].Rows.Count ==0;//波次是否全部拣选完毕 | |||
|  | 
 | |||
|  |                        elelab.pick.pick_task = isPickOver; | |||
|  | 
 | |||
|  |                        if (isPickOver) | |||
|  |                        {   | |||
|  |                            //lWmsOutPickRequest lpickRequest = new lWmsOutPickRequest(); | |||
|  |                            lpickRequest.finishCurrentWave(false);   | |||
|  |                        } | |||
|  |                     break; | |||
|  |                 case enumLabelPickType.seed: | |||
|  |                     break; | |||
|  |                 case enumLabelPickType.tran: | |||
|  |                     break; | |||
|  |             } | |||
|  |             */ | |||
|  |           | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         private static void manage_data() | |||
|  |         { | |||
|  |             return_data1(); | |||
|  |         } | |||
|  |         private static bool read_state() | |||
|  |         { | |||
|  |             for (int i = 0; i < unart_manage.com_manage.Length; i++) | |||
|  |             { | |||
|  |                 if (unart_manage.com_manage[i] != null) | |||
|  |                 { | |||
|  |                     if (unart_manage.com_manage[i].wait_data == true) | |||
|  |                     {//读取数据 | |||
|  |                         return true; | |||
|  | 
 | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |             return false; | |||
|  |         } | |||
|  |         public static void pick_sys() | |||
|  |         { | |||
|  |             //int count;Threads_state | |||
|  |             // Threads_state = true; | |||
|  |             //out_start_state = false; | |||
|  |             elelab.pick.init_pick_support(); | |||
|  |             while (true) | |||
|  |             { | |||
|  |                 // unart_manage.com_manage[17].return_data(); | |||
|  |                 pick_work_support.Suspend(); | |||
|  |                 //System.Threading.Thread.Sleep(15000); | |||
|  |                 receive_data(); | |||
|  |                 manage_data(); | |||
|  |                 wake_support_thread(); | |||
|  |                 pick_work.Suspend(); | |||
|  |             } | |||
|  |         } | |||
|  |         public static void pick_sys_support() | |||
|  |         { | |||
|  |             //int count;Threads_state | |||
|  |             while (true) | |||
|  |             { | |||
|  |                 System.Threading.Thread.Sleep(2000); | |||
|  |                 if (read_state() == true) | |||
|  |                 { | |||
|  |                     wake_thread(); | |||
|  |                 } | |||
|  |                 pick_work_support.Suspend(); | |||
|  |             } | |||
|  |         } | |||
|  |         public static void test_multe() | |||
|  |         { | |||
|  | 
 | |||
|  |             //while (wms_usartmanage.pick.send_state == true) ; | |||
|  |             //wms_usartmanage.pick.send_state = true; | |||
|  | 
 | |||
|  |             //// while (get_part_task() == true) ; | |||
|  |             //get_part_task(); | |||
|  |             ////while(led_lamble() == true); | |||
|  | 
 | |||
|  |             //wms_usartmanage.pick.send_state = false; | |||
|  |             return; | |||
|  |         } | |||
|  | 
 | |||
|  |         //webserver 接口 | |||
|  |         //初始化端口 | |||
|  |         //复位端口 | |||
|  |         //清除订单 | |||
|  |         public static void init_port(enumLabelPickType pickType) | |||
|  |         { | |||
|  |             elelab.unart_manage.init_sys(); | |||
|  |             init_sys_port(pickType); | |||
|  |         } | |||
|  |         public static void init_port(enumLabelPickType pickType,bool isForce) | |||
|  |         { | |||
|  |             if (isForce) | |||
|  |             { | |||
|  |                 elelab.unart_manage.clearComs(); | |||
|  |             } | |||
|  |             init_port(pickType); | |||
|  |         } | |||
|  |         public static bool reset_device(int port) | |||
|  |         {  | |||
|  |             if( elelab.unart_manage.com_manage[port]!=null) | |||
|  |                 return elelab.unart_manage.com_manage[port].write_reset_device(); | |||
|  |             return false; | |||
|  | 
 | |||
|  |         } | |||
|  |         public static string send_data_pick(DataTable dt,enumLabelPickType pickType)////----- | |||
|  |         { | |||
|  |           // init_port(pickType); | |||
|  |             if (activeComports.Count ==0 || dt.Rows.Count == 0) | |||
|  |             { | |||
|  |                  return ""; | |||
|  |             } | |||
|  |           /* | |||
|  |             DataView dv = dt.DefaultView ; | |||
|  |             dv.Sort ="ele_order,color"; //排序,这里的排序不起作用。。。。 | |||
|  |             DataTable sortedTable = dv.ToTable(); | |||
|  |             foreach (DataRow dr in sortedTable.Rows){ | |||
|  |                 LogHelper.debug ("pick", string.Format("sorted: eleOrder:{0} color:{1}", dr["ele_order"].ToString(), dr["color"].ToString())); | |||
|  | 
 | |||
|  |             } | |||
|  |             dt.DefaultView.Sort = "ele_order,color"; | |||
|  |             foreach (DataRow dr in dt.Rows) | |||
|  |             { | |||
|  |                 LogHelper.debug("pick", string.Format(" dt.DefaultView.Sort eleOrder:{0} color:{1}", dr["ele_order"].ToString(), dr["color"].ToString())); | |||
|  | 
 | |||
|  |             }*/ | |||
|  | 
 | |||
|  |           | |||
|  |             DataTable[] ds = split_ele_data(dt); | |||
|  |           //  DataTable[] ds = split_ele_data(sortedTable); | |||
|  |              | |||
|  |             int successCnt=0; | |||
|  |             int failureCnt=0; | |||
|  |             for (int j = 0; j < ds.Length; j++) | |||
|  |             { | |||
|  |                 //string part = ; | |||
|  |                 byte part_byte = get_byte(ds[j].Rows[0]["ele_order"].ToString()); | |||
|  |                 //part_byte = 1; | |||
|  |                 string port = ds[j].Rows[0]["port"].ToString(); | |||
|  |                 byte port_byte = get_byte(port); | |||
|  |                 byte led_color = get_byte(ds[j].Rows[0]["color"].ToString()); | |||
|  |                 byte pick_type = get_byte( ((int)pickType).ToString()); | |||
|  |                 if (elelab.pick.make_data(ds[j], led_color, part_byte, port_byte, null, null, null, pick_type)) | |||
|  |                 { | |||
|  |                     successCnt++; | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     failureCnt++; | |||
|  |                 } | |||
|  | 
 | |||
|  |             } | |||
|  |             elelab.pick.pick_task = false; | |||
|  |             if (failureCnt > 0) | |||
|  |             { | |||
|  |                 return string.Format("部分标签未点亮"); | |||
|  |             } | |||
|  |             return ""; | |||
|  |         } | |||
|  |         public static bool lightLabels(int[] ele_lab_id, string[] ele_address,  int led_color,  | |||
|  |            int[] counts , int port,   enumLabelPickType pickType)////----- | |||
|  |         { | |||
|  |             // init_port(pickType); | |||
|  |             if (activeComports.Count == 0 || ele_lab_id.Length == 0) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  |              | |||
|  |              uart_dis_data[] ele_data_comment = new uart_dis_data[ele_lab_id.Length]; | |||
|  |                 for (int j = 0; j < ele_lab_id.Length; j++) | |||
|  |                 { | |||
|  |                     ele_data_comment[j].channel_id = 0;//暂不使用 默认为0 | |||
|  |                     ele_data_comment[j].dis_type = get_byte( (led_color).ToString());// 灯的颜色 0 不亮 1 红灯 2 绿灯 3 蓝灯 4 红闪 5 绿闪 6 蓝闪  | |||
|  |                     ele_data_comment[j].ele_id = Convert.ToInt16(ele_lab_id[j].ToString()); | |||
|  |                     ele_data_comment[j].kucun_id = 0; | |||
|  |                     ele_data_comment[j].little_ele_id = Convert.ToByte(ele_address[j].ToString()); | |||
|  |                     ele_data_comment[j].order = get_byte((port).ToString());// Convert.ToByte(ele_order_id); | |||
|  |                     ele_data_comment[j].port = "1"; | |||
|  |                     ele_data_comment[j].receive_count = 0; | |||
|  | 
 | |||
|  |                     ele_data_comment[j].send_count =  counts[j]  ;   | |||
|  |                     ele_data_comment[j].state = 1; | |||
|  |                     ele_data_comment[j].WarehousingID = 0; | |||
|  |                     ele_lab[ele_data_comment[j].ele_id, ele_data_comment[j].little_ele_id] = get_byte( ((int)pickType).ToString()) ; | |||
|  |                 }// //向串口发送数据 | |||
|  |                 clear_order order = new clear_order(); | |||
|  |                 order.order = get_byte((port).ToString());//Convert.ToByte(ele_order_id); | |||
|  |                 order.state = 1; | |||
|  |                 if (unart_manage.com_manage[get_byte((port).ToString()  )].clear_order(order) == false) | |||
|  |                 { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 if (unart_manage.com_manage[get_byte((port).ToString())].write_data(ele_data_comment) == false) | |||
|  |                 { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 return true; | |||
|  |            | |||
|  |             | |||
|  |         } | |||
|  |         public static bool lightLabels(List<DeiNiu.wms.win.ELabel> lables, enumLabelPickType pickType)////----- | |||
|  |         { | |||
|  |             // init_port(pickType); | |||
|  |             if (activeComports.Count == 0 || lables.Count == 0) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  | 
 | |||
|  |             int[] ids = new int[lables.Count]; | |||
|  |             int[] counts = 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(); | |||
|  |                 counts[i] = lables[i].count; | |||
|  |             } | |||
|  |             return lightLabels(ids, ele_address, lables[0].color, counts, lables[0].port, pickType);  | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  | /// <summary> | |||
|  | /// 以端口号为一组,点亮多个标签 | |||
|  | /// 适用于分拣墙 | |||
|  | /// </summary> | |||
|  | /// <param name="lables"></param> | |||
|  | /// <param name="portNo">分拣墙端口号</param>  | |||
|  | /// <param name="orderId">order to clear</param>  -->use color 支持多人 | |||
|  | /// <param name="pickType"></param> | |||
|  | /// <returns></returns> | |||
|  |         public static bool lightLabels2(List<DeiNiu.wms.win.ELabel> lables, int portNo,int orderId,enumLabelPickType pickType)////----- | |||
|  |         { | |||
|  |             // init_port(pickType); | |||
|  |             WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS.Clear(); | |||
|  |           byte orderPort = get_byte(portNo.ToString()); | |||
|  |             if (activeComports.Count == 0 || lables.Count == 0) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  |             WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS[portNo] = false; ; | |||
|  |             //WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.Clear(); | |||
|  |             WmsConstants.WAVE_CURRENT_PICK_STATUS.Clear(); | |||
|  |             WmsConstants.SEEDS_LABEL_ID.Clear(); | |||
|  |             List<string> statuKeys = new List<string>(); | |||
|  |            /* uart_dis_data[] ele_data_comment1 = new uart_dis_data[10]; | |||
|  |             int num =0; | |||
|  |              for (int i = 1; i <= 2; i++) | |||
|  |             { | |||
|  |                 for (int j = 11; j <= 13; j++) | |||
|  |                 { | |||
|  |                     ele_data_comment1[num].dis_type = 1;//Convert.ToByte(textBox4.Text); 电子标签灯的颜色 1 红色 2 绿色 3 蓝色 | |||
|  |                     ele_data_comment1[num].ele_id = i;     //电子标签id  | |||
|  |                     ele_data_comment1[num].order = Convert.ToByte(orderId);//Convert.ToByte(textBox2.Text);  单号 | |||
|  |                     ele_data_comment1[num].receive_count = 0;  //为0 | |||
|  |                     ele_data_comment1[num].little_ele_id = Convert.ToByte(j); // 货位号 | |||
|  |                     ele_data_comment1[num].send_count = i + j; | |||
|  | 
 | |||
|  |                     ele_data_comment1[num].state = 1;  //都为1 | |||
|  |                     num++; | |||
|  |                     //comment[i*j]. | |||
|  |                 } | |||
|  |             } | |||
|  |             */ | |||
|  | 
 | |||
|  | 
 | |||
|  |              uart_dis_data[] ele_data_comment = new uart_dis_data[lables.Count];  | |||
|  |                for (int j = 0; j < lables.Count; j++) | |||
|  |             { | |||
|  |                 DeiNiu.wms.win.ELabel lb = lables[j]; | |||
|  | 
 | |||
|  |                 WmsConstants.SEEDS_LABEL_ID[orderId + "-" + lb.labelId] = lb.seedsId; | |||
|  | 
 | |||
|  | 
 | |||
|  |                 ele_data_comment[j].dis_type =  get_byte((lb.color).ToString());  //Convert.ToByte(textBox4.Text); 电子标签灯的颜色 1 红色 2 绿色 3 蓝色 | |||
|  |                 ele_data_comment[j].ele_id = lb.labelId; ;     //电子标签id | |||
|  |                 ele_data_comment[j].order = Convert.ToByte(orderId);// get_byte(orderId.ToString());//Convert.ToByte(textBox2.Text);  单号 | |||
|  |                 ele_data_comment[j].receive_count = 0;  //为0 | |||
|  |                 ele_data_comment[j].little_ele_id = Convert.ToByte(lb.address);// 货位号 | |||
|  |                 ele_data_comment[j].send_count = lb.count; | |||
|  |                 ele_data_comment[j].state = 1;  //都为1 | |||
|  | 
 | |||
|  |                  /*  | |||
|  |                 ele_data_comment[j].channel_id = 0;//暂不使用 默认为0 | |||
|  |                 ele_data_comment[j].dis_type = get_byte((lb.color).ToString());// 灯的颜色 0 不亮 1 红灯 2 绿灯 3 蓝灯 4 红闪 5 绿闪 6 蓝闪  | |||
|  |                 ele_data_comment[j].ele_id =lb.labelId; | |||
|  |                 ele_data_comment[j].kucun_id = 0; | |||
|  |                 ele_data_comment[j].little_ele_id = Convert.ToByte(lb.address); | |||
|  |                 ele_data_comment[j].order = get_byte(color.ToString()); //orderPort;// get_byte(lb.port.ToString());// Convert.ToByte(ele_order_id); | |||
|  |                 ele_data_comment[j].port = "1"; | |||
|  |                 ele_data_comment[j].receive_count = 0; | |||
|  | 
 | |||
|  |                 ele_data_comment[j].send_count =lb.count; | |||
|  |                 ele_data_comment[j].state = 1; | |||
|  |                 ele_data_comment[j].WarehousingID = lb.seedsId; | |||
|  |                  */ | |||
|  |                 ele_lab[ele_data_comment[j].ele_id, ele_data_comment[j].little_ele_id] = get_byte(((int)pickType).ToString()); | |||
|  | 
 | |||
|  |                 statuKeys.Add(Util.getLightKey(lb.color, lb.labelId, lb.address)); | |||
|  | 
 | |||
|  |              | |||
|  |             }// //向串口发送数据 | |||
|  |            | |||
|  |              | |||
|  |             /*clear_order order = new clear_order(); | |||
|  |             order.order = get_byte(orderId.ToString()); //orderPort;// get_byte(portNo.ToString());//Convert.ToByte(ele_order_id); | |||
|  |             order.state = 1; | |||
|  |   | |||
|  |           //   if (unart_manage.com_manage[orderPort].clear_order(order) == false) | |||
|  |             { | |||
|  |           //        return false; | |||
|  |             } | |||
|  |             | |||
|  |             while (unart_manage.com_manage[orderPort].send_state_finish == false) ; | |||
|  |             unart_manage.com_manage[orderPort].send_state_finish = false; | |||
|  |             unart_manage.com_manage[orderPort].usart_send_state = false; | |||
|  |             unart_manage.com_manage[orderPort].usart_send_result = ""; | |||
|  |             if (unart_manage.com_manage[orderPort].write_data(ele_data_comment) == false) | |||
|  |             { | |||
|  |                 LogHelper.WriteLog(typeof(pick), string.Format(" port {0} send fail", orderPort)); | |||
|  |                 //MessageBox.Show("send  fail") ; | |||
|  |                 unart_manage.com_manage[orderPort].send_state_finish = true; | |||
|  |                 unart_manage.com_manage[orderPort].usart_send_state = true; | |||
|  |                 unart_manage.com_manage[orderPort].usart_send_result = ""; | |||
|  |                 return false; | |||
|  |             } | |||
|  |             */ | |||
|  |              | |||
|  |             /* | |||
|  |              * clear_order order = new clear_order(); | |||
|  |              order.order = get_byte(orderId.ToString()); //orderPort;// get_byte(portNo.ToString());//Convert.ToByte(ele_order_id); | |||
|  |              order.state = 1; | |||
|  | 
 | |||
|  |              if (unart_manage.com_manage[orderPort].clear_order(order) == false) | |||
|  |              { | |||
|  |                           return false; | |||
|  |              } | |||
|  |              * */ | |||
|  | 
 | |||
|  |              if (!clearOrder(orderPort, orderId)) | |||
|  |              { | |||
|  |                  return false; | |||
|  |              } | |||
|  | 
 | |||
|  |              unart_manage.com_manage[orderPort].write_data(ele_data_comment); | |||
|  |             string result; | |||
|  |             bool isLightsSuccess = unart_manage.com_manage[orderPort].wait_ack(out result); | |||
|  |             | |||
|  |             WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS[portNo] = isLightsSuccess; | |||
|  |             | |||
|  |             foreach (string key in statuKeys) | |||
|  |             { | |||
|  |                 WmsConstants.WAVE_CURRENT_LIGHTS_STATUS[key] = isLightsSuccess; | |||
|  |             }  | |||
|  | 
 | |||
|  |             return true; | |||
|  | 
 | |||
|  |         } | |||
|  |         public static void displayLabels(int port) | |||
|  |         { | |||
|  |             if (elelab.unart_manage.com_manage[port] != null) | |||
|  |                 elelab.unart_manage.com_manage[port].displayLabel(); | |||
|  | 
 | |||
|  | 
 | |||
|  |         } | |||
|  |         public static void clearLabels(int port){ | |||
|  |             if (elelab.unart_manage.com_manage[port] != null) | |||
|  |                elelab.unart_manage.com_manage[port].clearLabel(); | |||
|  |               | |||
|  |         } | |||
|  | 
 | |||
|  |         public static bool clearOrder(int port, int orderId) | |||
|  |         { | |||
|  |             clear_order order = new clear_order(); | |||
|  |             order.order = get_byte(orderId.ToString()); //orderPort;// get_byte(portNo.ToString());//Convert.ToByte(ele_order_id); | |||
|  |             order.state = 1; | |||
|  | 
 | |||
|  |             if (unart_manage.com_manage[port].clear_order(order) == false) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  |         private static DataTable[] split_ele_data(DataTable dt) | |||
|  |         { | |||
|  |           //  dt.DefaultView.Sort = "ele_order,color"; | |||
|  |             if (dt.Rows.Count == 1) | |||
|  |             { | |||
|  |                 DataTable[] ds1 = new DataTable[1]; | |||
|  |                 ds1[0] = dt; | |||
|  |                 return ds1; | |||
|  |             } | |||
|  |             int count = 1; | |||
|  |             //ele_order | |||
|  |             for (int i = 1; i < dt.Rows.Count; i++) | |||
|  |             { | |||
|  |                 if ((dt.Rows[i]["port"].ToString() != dt.Rows[i - 1]["port"].ToString()) || | |||
|  |                     (dt.Rows[i]["ele_order"].ToString() != dt.Rows[i - 1]["ele_order"].ToString())) | |||
|  |                 { | |||
|  |                     count++; | |||
|  |                 } | |||
|  |             }//ele_order | |||
|  |             DataTable[] ds = new DataTable[count]; | |||
|  |             for (int i = 0; i < count; i++) | |||
|  |             { | |||
|  |                 ds[i] = dt.Clone(); | |||
|  |             } | |||
|  |             int address = 0; | |||
|  |             for (int i = 0; i < dt.Rows.Count; i++) | |||
|  |             { | |||
|  | 
 | |||
|  |                 if (i == 0) | |||
|  |                 { | |||
|  |                     address = 0; | |||
|  |                 } | |||
|  |                 else if ((dt.Rows[i]["port"].ToString() != dt.Rows[i - 1]["port"].ToString()) || | |||
|  |                     (dt.Rows[i]["ele_order"].ToString() != dt.Rows[i - 1]["ele_order"].ToString())) | |||
|  |                 { | |||
|  |                     address++; | |||
|  |                     //ds[address].Rows.Add(dr); | |||
|  |                 } | |||
|  |                 //else | |||
|  |                 //{ | |||
|  |                 //    ds[address].Rows.Add(dr); | |||
|  |                 //} | |||
|  |                 DataRow dr = ds[address].NewRow(); | |||
|  |                 dr[0] = dt.Rows[i][0]; | |||
|  |                 dr[1] = dt.Rows[i][1]; | |||
|  |                 dr[2] = dt.Rows[i][2]; | |||
|  |                 dr[3] = dt.Rows[i][3]; | |||
|  |                 dr[4] = dt.Rows[i][4]; | |||
|  |                 dr[5] = dt.Rows[i][5]; | |||
|  |                 dr[6] = dt.Rows[i][6]; | |||
|  |               //  dr[7] = dt.Rows[i][7]; | |||
|  |                 ds[address].Rows.Add(dr); | |||
|  |             } | |||
|  |             return ds; | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  |         public static bool turnOnLight(int port, channel_led id_data) | |||
|  |         { | |||
|  |             if (unart_manage.com_manage[port] == null) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  |             config_channel_led id; | |||
|  |              id.channel_id = id_data.channel_id; | |||
|  |             id.config_word = id_data.color; | |||
|  |             id.state = 1; | |||
|  |             if (unart_manage.com_manage[port].configLightColor(id)) | |||
|  |             { | |||
|  |                return unart_manage.com_manage[port].turnOnLight(id_data); | |||
|  |             } | |||
|  |             return false; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static bool turnOffLight(int port, channel_led id_data) | |||
|  |         { | |||
|  |             if (unart_manage.com_manage[port] == null) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  | 
 | |||
|  |            return unart_manage.com_manage[port].turnOffLight(id_data); | |||
|  |         } | |||
|  | 
 | |||
|  |   | |||
|  |     } | |||
|  | } |