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.win.epick; using DeiNiu.wms.win.ServiceReferenceStockOutPickRequest; using DeiNiu.wms.win; 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 Timer check_time; //public static uart_dis_data[] ele_return_data = new uart_dis_data[10000]; //public static int ele_return_receive_address = 0; //public static int ele_return_manage_address = 0; //public static int ele_return_max = 10000; 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 activeComports = new List() ;//激活的com口 static log4net.ILog log = log4net.LogManager.GetLogger("light"); static Dictionary > currentElables = new Dictionary>() ; private static byte get_byte(string data) { int length = data.Length; List str = new List(); 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) { //dt 列名 ele_lab_id ele_address Out_count // 电子标签id 控制的层列 数量 //led_color 灯的颜色 0 不亮 1 红灯 2 绿灯 3 蓝灯 4 红闪 5 绿闪 6 蓝闪 7红绿 8 红蓝 9 绿蓝 14红绿蓝 15 红绿蓝蜂鸣器 //ele_order_id 电子标签的订单号(电子标签使用)订单号范围 1-200 每个订单号有多条数据 控制器一次能处理多个订单号 //订单号唯一,一个订单号使用完毕,这个订单号才能被使用 //port 端口号 //DataTable ds = new DataTable(); List statuKeys = new List(); 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;//暂不使用 默认为0 ele_data_comment[j].dis_type = Convert.ToByte(ds.Rows[j]["color"].ToString()); ;// 灯的颜色 0 不亮 1 红灯 2 绿灯 3 蓝灯 4 红闪 5 绿闪 6 蓝闪 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;//暂不使用 默认为0 ele_data_comment[j].dis_type = led_color;// 灯的颜色 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 = 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(); /// /// send back from elabel /// public static void return_data1() { List statuKeys = new List(); // 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 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); bool isPickOver = false; //WmsConstants.WAVE_CURRENT_PICK_STATUS[key] = true; if (ele_id == 0) { manage_add = receive_add; break; } LogHelper.debug(typeof(pick), "pick type :---->>>> " + pickType); switch (pickType) { case enumLabelPickType.pick: break; case enumLabelPickType.seedsDesk: key = Util.getLightKey(Convert.ToInt16(color), ele_id, little_ele_id); //多个端口 if (WmsConstants.SEEDS_CURRENT_LIGHTS_STATUS[orderNo].ContainsKey(key)) { WmsConstants.SEEDS_CURRENT_LIGHTS_STATUS[orderNo].Remove(key); } if (WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderNo].ContainsKey(key) ) { manage_add++; if (manage_add >= add_max) { manage_add = 0; } if ( WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderNo][key]) { continue; } } lightReturn handler = lightOffEvent; if (handler != null) { handler(ele_id, orderNo, little_ele_id, receive_count); } // seeds = new WmsImportSeeds(); // lwp.getWmsOutPickLable.updatePickingStatus(Convert.ToInt16(color), ele_id, little_ele_id, Convert.ToDecimal(receive_count)); try { LogHelper.debug(typeof(pick), " 拍灯事件: userId is:" + userId + " seeds ID is :" + seedsId); log.Debug(" 拍灯事件: userId is:" + userId + " seeds ID is :" + seedsId); WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderNo][key] = updateSeedsPickStatus(orderNo, ele_id); }catch(Exception ex) { log.Error("拍灯事件错误", ex); log.Debug(" 拍灯异常: userId is:" + userId + " seeds ID is :" + seedsId); LogHelper.debug(typeof(pick), "拍灯事件错误 " + ex.Message); try { Thread.Sleep(200); log.Debug("再次处理拍灯事件"); LogHelper.debug(typeof(pick), "再次处理拍灯事件"); WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderNo][key] = updateSeedsPickStatus(orderNo, ele_id); } catch (Exception e){ LogHelper.debug(typeof(pick), "拍灯事件错误2" + e.Message); log.Error("拍灯事件错误2", e); log.Debug(" 拍灯异常2: userId is:" + userId + " seeds ID is :" + seedsId); LogHelper.debug(typeof(pick), " 拍灯异常2: userId is:" + userId + " seeds ID is :" + seedsId); } } break; case enumLabelPickType.seed: key = Util.getLightKey(Convert.ToInt16(color), ele_id, little_ele_id); if (WmsConstants.SEEDS_CURRENT_LIGHTS_STATUS[orderNo].ContainsKey(key)) { WmsConstants.SEEDS_CURRENT_LIGHTS_STATUS[orderNo].Remove(key); } if (WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderNo].ContainsKey(key)) { manage_add++; if (manage_add >= add_max) { manage_add = 0; } if (WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderNo][key]) { continue; } } //seeds = new WmsImportSeeds(); userId = WmsConstants.SEEDS_PORT_USERID_ID.ContainsKey(orderNo) ? WmsConstants.SEEDS_PORT_USERID_ID[orderNo] : 0; WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderNo][key] = true;// seeds.pickSeedDeskItem(currentSeedsNo,currentBarcode,ele_id ,userId ) > 0;//本次拣选完毕 break; case enumLabelPickType.tran: 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; } */ } public static string currentJobNo = ""; public static int userId = 0; private static bool updateSeedsPickStatus( int orderId, int lableId ) { if(!currentElables.ContainsKey(orderId) || !currentElables[orderId].ContainsKey(lableId)) { LogHelper.debug(typeof(pick), string.Format(" ......... deskId {0}, lableId {1} NOT found, something is wrong !!!!!!! ", orderId,lableId)); return false; } bool isOkay = false; using (WmsOutPickRequestClient client = new WmsOutPickRequestClient("BasicHttpBinding_IWmsOutPickRequest", string.Format("http://{0}/{1}", Park.svrUrl, "WmsOutPickRequestService.svc"))) { SeedsLabel lb = currentElables[orderId][lableId]; LogHelper.debug(typeof(pick), string.Format(" .........deskId {0}, lable id {1} , trying to update db, userId is {2} ", lb.deskId,lableId, lb.userId)); enumRepResult rs = client.seedsPickOut2(lb.flowNo,lb.skuId,lb.productDate,lb.batch,lb.outDetailId,lb.count,lb.toFlowNo,lb.inDetailId,false, lb.userId);//本次拣选完毕 LogHelper.debug(typeof(pick), string.Format(" ......... update result {0}", rs )); isOkay = rs == enumRepResult.成功; client.Close(); } return isOkay; } 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 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); } static string currentSeedsNo = "", currentBarcode = ""; /// /// 以端口号为一组,点亮多个标签 /// 适用于分拣墙 /// /// /// 分拣墙端口号 /// order to clear -->use color 支持多人 /// /// public static bool lightLabels2(List lables, int portNo,int orderId,enumLabelPickType pickType)////----- { // init_port(pickType); // WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS.Clear(); currentElables[orderId] = new Dictionary(); byte orderPort = get_byte(portNo.ToString()); if (activeComports.Count == 0 || lables.Count == 0) { return false; } int deskId = lables[0].deskId; WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS[deskId] = false; ; //WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.Clear(); WmsConstants.EPICK_SEEDS_CURRENT_PICK_STATUS[orderId] = new Dictionary(); WmsConstants.SEEDS_CURRENT_LIGHTS_STATUS[orderId] = new Dictionary(); WmsConstants.SEEDS_LABEL_ID[orderId] = new Dictionary(); List statuKeys = new List(); uart_dis_data[] ele_data_comment = new uart_dis_data[lables.Count]; for (int j = 0; j < lables.Count; j++) { DeiNiu.wms.win.epick.SeedsLabel lb = lables[j]; WmsConstants.SEEDS_LABEL_ID[orderId][orderId + "-" + lb.labelId] = lb.seedsId; if(pickType== enumLabelPickType.seedsDesk) { currentSeedsNo = lb.seedsNo; currentBarcode = lb.barcode; } 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.pcs; ele_data_comment[j].state = 1; //都为1 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)); currentElables[orderId][lb.labelId] = lb; // 在内存保存亮灯数据 }// //向串口发送数据 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[deskId] = isLightsSuccess; foreach (string key in statuKeys) { WmsConstants.SEEDS_CURRENT_LIGHTS_STATUS[orderId][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); } } public enum enumSeedsState { 待处理 = 0, 处理中, 已亮灯, 已按灭 }; }