1723 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			1723 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Collections.Generic; | |||
|  | using System.Linq; | |||
|  | using System.Text; | |||
|  | using System.IO.Ports; | |||
|  | using dn_wms; | |||
|  | namespace dn_wms | |||
|  | { | |||
|  |     public class dnrj | |||
|  |     { | |||
|  |        | |||
|  | //使用之前首先实例化: | |||
|  |         public delegate void receive_dis_data( model.uart_dis_data[] dis_data); | |||
|  |         public event receive_dis_data on_dis_event; | |||
|  |         public delegate void send_dis_data_result(byte order, byte result, string result1); | |||
|  |         public event send_dis_data_result on_send_dis_result_event; | |||
|  | 
 | |||
|  |         public delegate void config_channel( model.config_channel_led data); | |||
|  |         public event config_channel on_config_channel; | |||
|  | 
 | |||
|  |         public delegate void close_channel( model.close_channel_led data); | |||
|  |         public event close_channel on_close_channel; | |||
|  | 
 | |||
|  |         public delegate void open_channel( model.open_channel_led data); | |||
|  |         public event open_channel on_open_channel; | |||
|  | 
 | |||
|  |         static byte[] crc8_table = new byte[256] {0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,  | |||
|  |                                      0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,  | |||
|  |                                      0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,  | |||
|  |                                      0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,  | |||
|  |                                      0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,  | |||
|  |                                      0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,  | |||
|  |                                      0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,  | |||
|  |                                      0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,  | |||
|  |                                      0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,  | |||
|  |                                      0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,  | |||
|  |                                      0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,  | |||
|  |                                      0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,  | |||
|  |                                      0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,  | |||
|  |                                      0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,  | |||
|  |                                      0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,  | |||
|  |                                      0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,  | |||
|  |                                      0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,  | |||
|  |                                      0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, | |||
|  |                                      0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,  | |||
|  |                                      0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,  | |||
|  |                                      0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,  | |||
|  |                                      0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,  | |||
|  |                                      0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,  | |||
|  |                                      0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,  | |||
|  |                                      0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,  | |||
|  |                                      0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,  | |||
|  |                                      0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,  | |||
|  |                                      0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,  | |||
|  |                                      0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,  | |||
|  |                                      0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,  | |||
|  |                                      0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,  | |||
|  |                                      0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35}; | |||
|  | 
 | |||
|  |         private SerialPort commPort = new SerialPort(); | |||
|  |         static int order_buff_max = 1200;// 单个端口的订单最大量 | |||
|  |         static int order_quantity = 255;  // 订单号 | |||
|  |         public bool check_state;//盘点为false  出库为true 默认出库设置 | |||
|  |         int address;          // | |||
|  |          public  int crc_count = 0; | |||
|  |         model.uart_dis_data[,] send_comment = new model.uart_dis_data[order_quantity, order_buff_max];//当前端口处理的订单内容 | |||
|  |         int[] send_comment_size = new int[order_quantity];//不同订单保存订单条数 | |||
|  |         int[] receive_comment_size = new int[order_quantity];// | |||
|  |         byte[] write_comment_lab = new byte[order_quantity];// | |||
|  |         public static byte[] current_order_exe_state;// = new byte[serial_count];//新数据标志 | |||
|  |         public static bool[] read_new_data_lab;// = new bool[serial_count];//新数据标志 | |||
|  |         bool command_test_ack=false;//by dhwu 140808 | |||
|  |         bool command_baud_ack = false;//by dhwu 140808 | |||
|  |         bool command_searchlight_ack = false; | |||
|  |         bool command_changelightid_ack = false; | |||
|  |         bool command_getinf_ack = false; | |||
|  |         bool command_clear_chled_ack = false; | |||
|  |         bool command_changebcd_ack = false; | |||
|  |         public bool command_scan = false; | |||
|  |         public bool command_test_kzq = false; | |||
|  |         public byte[] command_test_buf = new byte[order_buff_max]; | |||
|  |         public byte command_bz_ack = 0;//by dhwu 150122 | |||
|  |         public byte command_bz_ack_order = 0;//by dhwu 150528 | |||
|  |       //  public int CrcError = 0; | |||
|  |         int ScanError; | |||
|  |         public bool bcdflag = false; | |||
|  |         bool command_lock_cmd_ack = false; | |||
|  |         bool command_unlock_cmd_ack = false; | |||
|  | 
 | |||
|  |         public struct ScanComPre | |||
|  |         { | |||
|  |             public UInt16[] ScanID; | |||
|  |             public byte[] ScanSequence; | |||
|  |             public byte ScanCnt; | |||
|  |         } | |||
|  |         ScanComPre ScanComPreData; | |||
|  | 
 | |||
|  |         public bool clear_order(model.clear_order id_data) | |||
|  |         {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |             byte[] aa = new byte[6]; | |||
|  |             int count = 0; | |||
|  |             aa[count++] = id_data.order; | |||
|  |             aa[count++] = Convert.ToByte(0xea); | |||
|  |             aa[count++] = Convert.ToByte(0xff); | |||
|  |             aa[count++] = 0x2d;//命令字 | |||
|  |             aa[count++] = 0x0; | |||
|  |             return (manage_usart_package(aa)); | |||
|  |             //  return true; | |||
|  |         } | |||
|  |         public bool init_wms_sys(int com_count, string t) | |||
|  |         { | |||
|  |                 address = com_count; | |||
|  |                 current_order_exe_state = new byte[com_count]; | |||
|  |                 read_new_data_lab = new bool[com_count]; | |||
|  |                 commPort.PortName = t; //by dhwu 140805    "COM" + com_count.ToString(); | |||
|  |                 //commPort.PortName = "COM3"; | |||
|  |                 //commPort.PortName = "COM5"; | |||
|  |                 //commPort.PortName = "COM2"; | |||
|  |                 //commPort.PortName = "COM" + com_count.ToString(); | |||
|  |                 commPort.BaudRate = 9600; | |||
|  |                 commPort.Parity = Parity.None;// Parity.Even; | |||
|  |                 commPort.DataBits = 8; | |||
|  |                 commPort.StopBits = StopBits.One; | |||
|  |                 commPort.Encoding = Encoding.ASCII; | |||
|  |                 //by dhwu 150420 commPort.ReadBufferSize = 0x5000;//by dhwu 150130 | |||
|  |                 commPort.DataReceived += new SerialDataReceivedEventHandler(Sp_DataReceived); | |||
|  |                 commPort.ReceivedBytesThreshold = 1; | |||
|  |                 try | |||
|  |                 { | |||
|  |                     commPort.Open(); | |||
|  |                 } | |||
|  |                 catch | |||
|  |                 { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |             for (int i = 0; i < order_quantity; i++) | |||
|  |             { | |||
|  |                 for (int j = 0; j < order_buff_max; j++) | |||
|  |                 { | |||
|  |                     send_comment[i, j].dis_type = 0; | |||
|  |                     send_comment[i, j].ele_id = 0; | |||
|  |                     send_comment[i, j].little_ele_id = 0; | |||
|  |                     send_comment[i, j].order = 0; | |||
|  |                     send_comment[i, j].receive_count = 0; | |||
|  |                     send_comment[i, j].send_count = 0; | |||
|  |                 } | |||
|  |                 send_comment_size[i] = 0; | |||
|  |                 receive_comment_size[i] = 0; | |||
|  |             } | |||
|  |             check_state = true; | |||
|  |             ScanComPreData.ScanCnt = 0; | |||
|  |             ScanComPreData.ScanID = new UInt16[100]; | |||
|  |             ScanComPreData.ScanSequence = new byte[100]; | |||
|  |             for (int i = 0; i < 100; i++) | |||
|  |             { | |||
|  |                 ScanComPreData.ScanID[i] = 0; | |||
|  |                 ScanComPreData.ScanSequence[i] = 0xa5; | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  |         public void exit_wms_sys() | |||
|  |         { | |||
|  |             close_Port(); | |||
|  |         } | |||
|  |         private void manage_data_comment(byte[] read_dat) | |||
|  |         { | |||
|  |             //读取串口数据 | |||
|  |             //byte[] read_dat;// = new uart_dis_data[];  | |||
|  |             //read_dat = uart.manage_data(); | |||
|  |             if (read_dat.Length == 0) | |||
|  |                 return; | |||
|  |             byte command; | |||
|  |             UInt16 id =Convert.ToUInt16( read_dat[2]*256  + read_dat[3]);  | |||
|  |             if (read_dat.Length != 0) | |||
|  |             {//串口有数据 | |||
|  |                 command = Convert.ToByte(read_dat[4] & 0x1f); | |||
|  |                 //Console.WriteLine("{0}:{1}", command, read_dat.Length); | |||
|  |                 if (command == 0x01) | |||
|  |                 {//单条显示数据 | |||
|  |                     model.uart_dis_data cc; | |||
|  |                     cc = analytic_dis_data_single(read_dat); | |||
|  |                     model.uart_dis_data[] aa = new model.uart_dis_data[1]; | |||
|  |                     aa[0] = cc; | |||
|  |                     on_dis_event(aa); | |||
|  | 
 | |||
|  |                     if (bcdflag) | |||
|  |                     { | |||
|  |                         byte[] buf = new byte[9]; | |||
|  | 
 | |||
|  |                         buf[0] = cc.order;// id_data.order; | |||
|  |                         buf[1] = 0;// Convert.ToByte(id_data.ele_id / 256); | |||
|  |                         buf[2] = 0;// Convert.ToByte(id_data.ele_id % 256); | |||
|  |                         buf[3] = 28;//命令字 | |||
|  |                         buf[4] = read_dat[2]; | |||
|  |                         buf[5] = read_dat[3]; | |||
|  |                         buf[6] = cc.little_ele_id; | |||
|  |                         buf[7] = read_dat[5]; | |||
|  |                         buf[8] = read_dat[6]; | |||
|  |                         if (manage_usart_package(buf)) | |||
|  |                             return; | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         byte[] buf = new byte[7]; | |||
|  |                         buf[0] = cc.order;// id_data.order; | |||
|  |                         buf[1] = 0;// Convert.ToByte(id_data.ele_id / 256); | |||
|  |                         buf[2] = 0;// Convert.ToByte(id_data.ele_id % 256); | |||
|  |                         buf[3] = 28;//命令字 | |||
|  |                         buf[4] = read_dat[2]; | |||
|  |                         buf[5] = read_dat[3]; | |||
|  |                         buf[6] = cc.little_ele_id; | |||
|  |                         if (manage_usart_package(buf)) | |||
|  |                             return; | |||
|  |                     } | |||
|  |                     | |||
|  | 
 | |||
|  |                     | |||
|  |                 } | |||
|  |                 else if (command == 0x02) | |||
|  |                 {// | |||
|  |                     // | |||
|  |                 } | |||
|  |                 else if (command == 0x03) | |||
|  |                 {// | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x04) | |||
|  |                 {//配置电子标签指示灯和蜂鸣器工作方式 | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x05) | |||
|  |                 {//修改电子标签的ID号 | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x06) | |||
|  |                 {//显示电子标签的ID号 | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x07) | |||
|  |                 {//清除电子标签显示内容 | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x08) | |||
|  |                 {//通道灯命令 | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x09) | |||
|  |                 {//按键配置命令 | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x0a) | |||
|  |                 {//修改显示模式指令 | |||
|  |                     for (int i = 0; i < read_dat.Length; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_changebcd_ack = true; | |||
|  |                 } | |||
|  |                 else if ((command == 0x0b) || (command == 0x0c)) | |||
|  |                 {//查询命令 | |||
|  |                     model.uart_dis_data[] dd; | |||
|  |                     if ((read_dat[4] >> 5) == 0) | |||
|  |                     {//返回的执行结果 | |||
|  |                      //   current_order_exe_state[address] = read_dat[5]; | |||
|  |                         if (read_dat[5] == 1) | |||
|  |                         {//执行成功 | |||
|  |                             //on_send_dis_result_event(read_dat[1], read_dat[5]); | |||
|  |                             command_bz_ack_order = read_dat[1]; | |||
|  |                             command_bz_ack = 1; | |||
|  |                         } | |||
|  |                         else if (read_dat[5] == 5) | |||
|  |                         {//执行失败 | |||
|  |                             //on_send_dis_result_event(read_dat[1], read_dat[5]); | |||
|  |                             command_bz_ack_order = read_dat[1]; | |||
|  |                             command_bz_ack = 5; | |||
|  |                         } | |||
|  |                         else if (read_dat[5] == 2) | |||
|  |                         {//部分成功 | |||
|  |                             ;// on_send_dis_result_event(read_dat[1], read_dat[5]); | |||
|  |                         } | |||
|  |                         else if (read_dat[5] == 3) | |||
|  |                         {// 控制器没有空间  稍后再发送数据 | |||
|  |                             on_send_dis_result_event(read_dat[1], read_dat[5], "控制器没有空间  稍后再发送数据"); | |||
|  |                         } | |||
|  |                         else if (read_dat[5] == 4) | |||
|  |                         {//数据部分发送成功 | |||
|  |                             //on_send_dis_result_event(read_dat[1], read_dat[5]); | |||
|  |                             command_bz_ack_order = read_dat[1]; | |||
|  |                             command_bz_ack = 4; | |||
|  |                         } | |||
|  |                         else | |||
|  |                         {//未知 | |||
|  |                             on_send_dis_result_event(read_dat[1], read_dat[5],"未知错误"); | |||
|  |                         } | |||
|  |                     } | |||
|  |                     if ((read_dat[4] >> 5) == 2) | |||
|  |                     {//返回的数据 | |||
|  |                         dd = analytic_dis_data_mul(read_dat); | |||
|  |                         byte ord = dd[0].order; | |||
|  |                         for (int i = 0; i < dd.Length; i++) | |||
|  |                         { | |||
|  |                             for (int j = 0; j < send_comment_size[ord]; j++) | |||
|  |                             { | |||
|  |                                 if ((dd[i].ele_id == send_comment[ord, j].ele_id) && | |||
|  |                                     (dd[i].little_ele_id == send_comment[ord, j].little_ele_id)) | |||
|  |                                 { | |||
|  |                                     if (dd[i].state > send_comment[ord, j].state) | |||
|  |                                     { | |||
|  |                                         send_comment[ord, j].state = dd[i].state; | |||
|  |                                         if (dd[i].state == 5) | |||
|  |                                         { | |||
|  |                                             send_comment[ord, j].receive_count = dd[i].receive_count; | |||
|  |                                             receive_comment_size[ord]++; | |||
|  |                                         } | |||
|  |                                          | |||
|  |                                         //read_new_data_lab[address] = true; | |||
|  |                                     } | |||
|  |                                 } | |||
|  |                             } | |||
|  |                         } | |||
|  |                         command_bz_ack_order = dd[0].order; | |||
|  |                         command_bz_ack = 6;//by dhwu 150122    on_dis_event(dd);// | |||
|  |                     } | |||
|  |                 } | |||
|  |                 else if (command == 0x0c) | |||
|  |                 {// | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x0d) | |||
|  |                 {// | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x0e) | |||
|  |                 {// | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x0f) | |||
|  |                 {//配置通道灯显示类型 | |||
|  |                     model.config_channel_led dd; | |||
|  |                     dd.channel_id =id; | |||
|  |                     dd.config_word = read_dat[5]; | |||
|  |                     dd.state = 2; | |||
|  |                     on_config_channel(dd); | |||
|  |                 } | |||
|  |                 else if (command == 0x10) | |||
|  |                 {//关闭通道灯的应答 | |||
|  |                     //on_dis_event(dd); | |||
|  |                     model.close_channel_led dd; | |||
|  |                     dd.channel_id = id; | |||
|  |                     dd.state = 2; | |||
|  |                     dd.config_word = 0; | |||
|  |                     on_close_channel(dd); | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x11) | |||
|  |                 {//打开通道灯的应答 | |||
|  |                     model.open_channel_led dd; | |||
|  |                     dd.channel_id = id; | |||
|  |                     dd.state = 2; | |||
|  |                      dd.config_word = 0; | |||
|  |                     on_open_channel(dd); | |||
|  |                 } | |||
|  |                 else if (command == 0x12) | |||
|  |                 {// | |||
|  | 
 | |||
|  |                 } | |||
|  |                 else if (command == 0x15) | |||
|  |                 {//测试数据 | |||
|  |                     for (int i = 0; i < 15; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_test_ack = true; | |||
|  |                 } | |||
|  |                 else if (command == 0x16) | |||
|  |                 {//波特率 | |||
|  |                     for (int i = 0; i < 6; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_baud_ack = true; | |||
|  |                 } | |||
|  |                 else if(command == 0x17) | |||
|  |                 {//搜索通道灯 | |||
|  |                     for (int i = 0; i < 9; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_searchlight_ack = true; | |||
|  |                 } | |||
|  |                 else if (command == 0x18) | |||
|  |                 {//修改通道灯id | |||
|  |                     for (int i = 0; i < 9; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_changelightid_ack = true; | |||
|  |                 } | |||
|  |                 else if (command == 0x19) | |||
|  |                 {//获得设备信息 | |||
|  |                     for (int i = 0; i < read_dat.Length; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_getinf_ack = true; | |||
|  |                 } | |||
|  |                 else if (command == 0x1a) | |||
|  |                 {//扫描枪发来的数据,应答 | |||
|  |                     bool FindID; | |||
|  | 
 | |||
|  |                     FindID = true; | |||
|  |                     for (int i = 0; i < read_dat.Length; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     for (int i = 0; i < ScanComPreData.ScanCnt; i++ ) | |||
|  |                     { | |||
|  |                         if (id == ScanComPreData.ScanID[i]) | |||
|  |                         { | |||
|  |                             if (ScanComPreData.ScanSequence[i] != read_dat[5]) | |||
|  |                             { | |||
|  |                                 command_scan = true; | |||
|  |                                 ScanComPreData.ScanSequence[i] = read_dat[5]; | |||
|  |                             } | |||
|  |                             else  | |||
|  |                             { | |||
|  |                                 ScanError++; | |||
|  |                                 //command_scan = true; | |||
|  |                             } | |||
|  |                             FindID = false; | |||
|  |                         } | |||
|  |                     } | |||
|  |                     if (FindID) | |||
|  |                     { | |||
|  |                         command_scan = true; | |||
|  |                         ScanComPreData.ScanID[ScanComPreData.ScanCnt] = id; | |||
|  |                         ScanComPreData.ScanSequence[ScanComPreData.ScanCnt] = read_dat[5]; | |||
|  |                         ScanComPreData.ScanCnt++; | |||
|  |                         if (ScanComPreData.ScanCnt > 100)//从新加入 | |||
|  |                         { | |||
|  |                             ScanComPreData.ScanCnt = 0; | |||
|  |                             for (int i = 0; i < 100; i++) | |||
|  |                             { | |||
|  |                                 ScanComPreData.ScanID[i] = 0; | |||
|  |                                 ScanComPreData.ScanSequence[i] = 0xa5; | |||
|  |                             } | |||
|  |                         } | |||
|  |                     } | |||
|  |                    byte[] aa = new byte[5]; | |||
|  |                    aa[0] = read_dat[5]; | |||
|  |                    aa[1] = Convert.ToByte(read_dat[2]); | |||
|  |                    aa[2] = Convert.ToByte(read_dat[3]); | |||
|  |                    aa[3] = 0x1a;//命令字 | |||
|  |                    manage_usart_package(aa);      | |||
|  |                 } | |||
|  |                 else if (command == 0x1b) | |||
|  |                 { | |||
|  |                     for (int i = 0; i < read_dat.Length; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_test_kzq = true; | |||
|  |                 } | |||
|  |                 else if (command == 0x1d) | |||
|  |                 { | |||
|  |                     for (int i = 0; i < read_dat.Length; i++) | |||
|  |                     { | |||
|  |                         command_test_buf[i] = read_dat[i]; | |||
|  |                     } | |||
|  |                     command_clear_chled_ack = true; | |||
|  |                 } | |||
|  |                 else if (command == 0x1f) | |||
|  |                 { | |||
|  |                     command_lock_cmd_ack = true; | |||
|  |                 } | |||
|  |                 else if (command == 0x00) | |||
|  |                 { | |||
|  |                     command_unlock_cmd_ack = true; | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |         int count = 0; | |||
|  |         public void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) | |||
|  |         { | |||
|  |             //System.Threading.Thread.Sleep(20);//by dhwu 150123 20ms | |||
|  |             byte[] readBuffer = new byte[commPort.BytesToRead]; | |||
|  |             commPort.Read(readBuffer, 0, readBuffer.Length); | |||
|  | 
 | |||
|  |             if (readBuffer.Length > 25) | |||
|  |             { | |||
|  |                 count++; | |||
|  |             } | |||
|  | 
 | |||
|  | 
 | |||
|  |              byte[] aa = manage_data(readBuffer); | |||
|  |              manage_data_comment(aa); | |||
|  |              //Console.WriteLine("C{0}:{1}",count, readBuffer.Length); | |||
|  |              count++; | |||
|  |              while (true) | |||
|  |              { | |||
|  |                  byte[] ss = manage_data_package(); | |||
|  |                  if (ss.Length != 0) | |||
|  |                  { | |||
|  |                      manage_data_comment(ss); | |||
|  |                  } | |||
|  |                  else | |||
|  |                  { | |||
|  |                      return; | |||
|  |                  } | |||
|  |              } | |||
|  |         } | |||
|  |         public bool write_dis_comment(model.uart_dis_data[] dis_data) | |||
|  |         { | |||
|  |             write_command(dis_data); | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  |         private byte[] single_config(byte cycle,byte on,byte off) | |||
|  |         { | |||
|  |             if (cycle == 0) | |||
|  |             { | |||
|  |                 byte[] result = new byte[0]; | |||
|  |                 return result; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 byte[] result = new byte[3]; | |||
|  |                 result[0] = cycle; | |||
|  |                 result[1] = on; | |||
|  |                 result[2] = off; | |||
|  |                 return result; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         public bool write_config_comment(model.config_led_bell config_data) | |||
|  |         {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |             //write_command(dis_data); | |||
|  |             //计算长度a | |||
|  | //             3 	2	1	0 | |||
|  | //             红	绿	蓝	蜂鸣器 | |||
|  |             byte config_id = config_data.num; | |||
|  |            // byte  | |||
|  |             byte[] result = single_config(config_data.red_cycle, config_data.red_on, config_data.red_off); | |||
|  |             if (result.Length == 0){ | |||
|  |                 config_id = Convert.ToByte(config_id << 1); | |||
|  |             } | |||
|  |             else{ | |||
|  |                 config_id = Convert.ToByte((config_id << 1) + 1); | |||
|  |             } | |||
|  |             byte[] result1 = single_config(config_data.green_cycle, config_data.green_on, config_data.green_off); | |||
|  |             if (result1.Length == 0){ | |||
|  |                 config_id = Convert.ToByte(config_id << 1); | |||
|  |             } | |||
|  |             else{ | |||
|  |                 config_id = Convert.ToByte((config_id << 1) + 1); | |||
|  |             } | |||
|  | 
 | |||
|  |             byte[] result2 = single_config(config_data.blue_cycle, config_data.blue_on, config_data.blue_off); | |||
|  |             if (result2.Length == 0) | |||
|  |             { | |||
|  |                 config_id = Convert.ToByte(config_id << 1); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 config_id = Convert.ToByte((config_id << 1) + 1); | |||
|  |             } | |||
|  |             byte[] result3 = single_config(config_data.speak_cycle, config_data.speak_on, config_data.speak_off); | |||
|  |             if (result3.Length == 0) | |||
|  |             { | |||
|  |                 config_id = Convert.ToByte(config_id << 1); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 config_id = Convert.ToByte((config_id << 1) + 1); | |||
|  |             } | |||
|  |              | |||
|  |             int count=result.Length + result1.Length + result2.Length+result3.Length+6; | |||
|  |             byte[] aa = new byte[count]; | |||
|  |             count=0; | |||
|  |             aa[count++]=config_data.order; | |||
|  |             aa[count++]=Convert.ToByte(config_data.ele_id/256); | |||
|  |             aa[count++]=Convert.ToByte(config_data.ele_id%256);; | |||
|  |             aa[count++]=0x24;//命令字 | |||
|  |             aa[count++] = config_id; | |||
|  |             for (int i = 0; i < result.Length; i++) | |||
|  |             { | |||
|  |                 aa[count++] = result[i]; | |||
|  |             } | |||
|  |             for (int i = 0; i < result1.Length; i++) | |||
|  |             { | |||
|  |                 aa[count++] = result1[i]; | |||
|  |             } | |||
|  |             for (int i = 0; i < result2.Length; i++) | |||
|  |             { | |||
|  |                 aa[count++] = result2[i]; | |||
|  |             } | |||
|  |             for (int i = 0; i < result3.Length; i++) | |||
|  |             { | |||
|  |                 aa[count++] = result3[i]; | |||
|  |             } | |||
|  |               return(manage_usart_package(aa)); | |||
|  |               //  return true; | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  |        public bool write_modify_id_comment(model.modify_id  id_data) | |||
|  |         {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |              byte[] aa = new byte[7];  | |||
|  |              int count=0; | |||
|  |              aa[count++] = id_data.order; | |||
|  |              aa[count++] = Convert.ToByte(id_data.old_ele_id/256); | |||
|  |              aa[count++] = Convert.ToByte(id_data.old_ele_id %256); | |||
|  |              aa[count++] = 0x25;//命令字 | |||
|  |              aa[count++] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |              aa[count++] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  |             return (manage_usart_package(aa)); | |||
|  |             //  return true; | |||
|  |         } | |||
|  |        public bool write_config_channel_led(model.config_channel_led id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[6]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = 0; | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id % 256); | |||
|  |            aa[count++] = 0x2f;//命令字 | |||
|  |            aa[count++] = id_data.config_word; | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  |            return (manage_usart_package(aa)); | |||
|  |            //  return true; | |||
|  |        } | |||
|  | 
 | |||
|  |        public bool write_close_channel_led(model.close_channel_led id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[6]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = 0; | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id % 256); | |||
|  |            aa[count++] = 0x30;//命令字 | |||
|  |            aa[count++] = id_data.config_word; | |||
|  |            return (manage_usart_package(aa)); | |||
|  |            //  return true; | |||
|  |        } | |||
|  |        public bool clear_channel_led(model.close_channel_led id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[5]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = 0; | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id % 256); | |||
|  |            aa[count++] = 0x3d;//命令字 | |||
|  |            if (manage_usart_package(aa)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_clear_chled_ack) | |||
|  |                    { | |||
|  |                        command_clear_chled_ack = false; | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |        public bool write_open_channel_led(model.open_channel_led id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[6]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = 0; | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.channel_id % 256); | |||
|  |            aa[count++] = 0x31;//命令字 | |||
|  |            aa[count++] = id_data.config_word; | |||
|  |            return (manage_usart_package(aa)); | |||
|  |            //  return true; | |||
|  |        } | |||
|  | 
 | |||
|  |        //public static bool write_dis_id_comment(dis_id dis_data) | |||
|  |        public bool write_dis_id_comment(model.dis_id id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[5]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = id_data.order; | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id % 256); | |||
|  |            aa[count++] = 0x26;//命令字 | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  |            return (manage_usart_package(aa)); | |||
|  |            //  return true; | |||
|  |        } | |||
|  |        //by dhwu 140807 | |||
|  |        //复位各个设备   | |||
|  |        public bool write_reset_device(model.dis_id id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[5]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = id_data.order; | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id % 256); | |||
|  |            aa[count++] = 0x34;//命令字 | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  |            return (manage_usart_package(aa)); | |||
|  |            //  return true; | |||
|  |        } | |||
|  |        public bool write_baud_device(model.dis_id id_data,byte dat) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[6]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = id_data.order; | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id % 256); | |||
|  |            aa[count++] = 0x36;//命令字 | |||
|  |            aa[count++] = dat; | |||
|  |            if ((manage_usart_package(aa)) && (id_data.order == 0)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_baud_ack) | |||
|  |                    { | |||
|  |                        command_baud_ack = false; | |||
|  |                        if (aa[4] != command_test_buf[5]) return false; | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |         //修改标签的显示模式 | |||
|  |        public bool change_bcd(model.dis_id id_data, byte dat) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[6]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = id_data.order; | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id % 256); | |||
|  |            aa[count++] = 0x2a;//命令字 | |||
|  |            aa[count++] = dat; | |||
|  |            if ((manage_usart_package(aa)) && (id_data.order == 0)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_changebcd_ack) | |||
|  |                    { | |||
|  |                        command_changebcd_ack = false; | |||
|  |                        if (aa[4] != command_test_buf[5]) return false; | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |        public bool write_lock(byte[] buf, int length) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte i; | |||
|  |            byte[] aa = new byte[length + 5]; | |||
|  | 
 | |||
|  |            aa[0] = 0; | |||
|  |            aa[1] = 0; | |||
|  |            aa[2] = 0; | |||
|  |            aa[3] = 0x1F;//命令字 | |||
|  |            for (i = 0; i < length; i++) aa[i + 4] = buf[i]; | |||
|  |            if (manage_usart_package(aa)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_lock_cmd_ack) | |||
|  |                    { | |||
|  |                        command_lock_cmd_ack = false; | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |        public bool write_unlock() | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte i; | |||
|  |            byte[] aa = new byte[5]; | |||
|  | 
 | |||
|  |            aa[0] = 0; | |||
|  |            aa[1] = 0; | |||
|  |            aa[2] = 0; | |||
|  |            aa[3] = 0;//命令字 | |||
|  |            if (manage_usart_package(aa)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_unlock_cmd_ack) | |||
|  |                    { | |||
|  |                        command_unlock_cmd_ack = false; | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  | 
 | |||
|  |        public bool write_test_device(model.dis_id id_data,byte n) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[15]; | |||
|  |            byte i; | |||
|  | 
 | |||
|  |            aa[0] = id_data.order; | |||
|  |            aa[1] = Convert.ToByte(id_data.ele_id / 256); | |||
|  |            aa[2] = Convert.ToByte(id_data.ele_id % 256); | |||
|  |            aa[3] = 0x35;//命令字 | |||
|  |            for (i = 0; i < 10;i++ ) | |||
|  |            { | |||
|  |                aa[4 + i] = (byte)(i + n); | |||
|  |            } | |||
|  |            if ((manage_usart_package(aa)) && (id_data.order==0)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3);  | |||
|  |                    if (command_test_ack) | |||
|  |                    { | |||
|  |                        command_test_ack = false; | |||
|  |                        for(i=0;i<10;i++) | |||
|  |                        { | |||
|  |                             if(aa[4 + i] != command_test_buf[5+i])  | |||
|  |                             return false; | |||
|  |                        } | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                 while(Timeout>0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |        public bool change_light_id(model.modify_id id_data) | |||
|  |        { | |||
|  |            byte[] aa = new byte[7]; | |||
|  |            byte i; | |||
|  | 
 | |||
|  |            aa[0] = id_data.order; | |||
|  |            aa[1] = Convert.ToByte(id_data.old_ele_id / 256); | |||
|  |            aa[2] = Convert.ToByte(id_data.old_ele_id % 256); | |||
|  |            aa[3] = 0x38;//命令字 | |||
|  |            aa[4] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |            aa[5] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  | 
 | |||
|  |            if ((manage_usart_package(aa)) && (id_data.order == 0)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_changelightid_ack) | |||
|  |                    { | |||
|  |                        command_changelightid_ack = false; | |||
|  |                        aa[3] = 0x58; | |||
|  |                        for (i = 0; i < 5; i++) | |||
|  |                        { | |||
|  |                            if (aa[1 + i] != command_test_buf[2 + i]) | |||
|  |                                return false; | |||
|  |                        } | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |        public bool search_light_id(model.modify_id id_data) | |||
|  |        { | |||
|  |            byte[] aa = new byte[7]; | |||
|  |            byte i; | |||
|  | 
 | |||
|  |            aa[0] = id_data.order; | |||
|  |            aa[1] = Convert.ToByte(id_data.old_ele_id / 256); | |||
|  |            aa[2] = Convert.ToByte(id_data.old_ele_id % 256); | |||
|  |            aa[3] = 0x37;//命令字 | |||
|  |            aa[4] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |            aa[5] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  | 
 | |||
|  |            if ((manage_usart_package(aa)) && (id_data.order == 0)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_searchlight_ack) | |||
|  |                    { | |||
|  |                        command_searchlight_ack = false; | |||
|  |                        for (i = 0; i < 2; i++) | |||
|  |                        { | |||
|  |                            if (aa[1 + i] != command_test_buf[2 + i])// if (aa[1+i] != command_test_buf[5+i]) | |||
|  |                            return false; | |||
|  |                        } | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |        //读取设备信息 | |||
|  |        public bool get_inf_device(model.dis_id id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[5]; | |||
|  |            int count = 0; | |||
|  |            byte i; | |||
|  |            aa[count++] = id_data.order; | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id % 256); | |||
|  |            aa[count++] = 0x39;//命令字 | |||
|  |            if ((manage_usart_package(aa)) && (id_data.order == 0)) | |||
|  |            { | |||
|  |                int Timeout = 100; | |||
|  |                do | |||
|  |                { | |||
|  |                    System.Threading.Thread.Sleep(3); | |||
|  |                    if (command_getinf_ack) | |||
|  |                    { | |||
|  |                        command_getinf_ack = false; | |||
|  |                        aa[3] = 0x59; | |||
|  |                        for (i = 1; i < 5; i++) | |||
|  |                        { | |||
|  |                            if (aa[i-1] != command_test_buf[i]) | |||
|  |                                return false; | |||
|  |                        } | |||
|  |                        return true; | |||
|  |                    } | |||
|  |                    Timeout--; | |||
|  |                } | |||
|  |                while (Timeout > 0); | |||
|  |            } | |||
|  |            return false; | |||
|  |        } | |||
|  |        public bool send_kzq_test(byte s, int len) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |             byte[] aa = new byte[len+5]; | |||
|  |             int count = 0; | |||
|  |             int i; | |||
|  |             aa[count++] = 0;// id_data.order; | |||
|  |             aa[count++] = 0;// Convert.ToByte(id_data.ele_id / 256); | |||
|  |             aa[count++] = 0;// Convert.ToByte(id_data.ele_id % 256); | |||
|  |             aa[count++] = 0x3b;//命令字 | |||
|  |             for (i = 0; i < len; i++)  | |||
|  |             { | |||
|  |                 aa[count++] = (byte)(i+s); | |||
|  |             } | |||
|  |             if (manage_usart_package(aa)) | |||
|  |             { | |||
|  |                 return true; | |||
|  |             }else  return false; | |||
|  |        } | |||
|  |        //end dhwu | |||
|  | 
 | |||
|  |        public bool write_clear_comment(model.dis_id /*clear_comment*/ id_data) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte[] aa = new byte[5]; | |||
|  |            int count = 0; | |||
|  |            aa[count++] = id_data.order; | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(id_data.ele_id % 256); | |||
|  |            aa[count++] = 0x27;//命令字 | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  |            return (manage_usart_package(aa)); | |||
|  |            //  return true; | |||
|  |        } | |||
|  |        public bool write_key_config(model.key_config config) | |||
|  |        {//7e 02 0002 24 1d 0a 05 05 05 06 06 03 04 04 00 7f | |||
|  |            byte config_key=0; | |||
|  |            if (config.modify_key == 1) | |||
|  |                config_key = Convert.ToByte((config_key <<1) +1); | |||
|  |            else | |||
|  |                config_key = Convert.ToByte(config_key << 1); | |||
|  | 
 | |||
|  |            if (config.confirm_key == 1) | |||
|  |                config_key = Convert.ToByte((config_key << 1) + 1); | |||
|  |            else | |||
|  |                config_key = Convert.ToByte(config_key << 1); | |||
|  | 
 | |||
|  |            if (config.fn_key == 1) | |||
|  |                config_key = Convert.ToByte((config_key << 1) + 1); | |||
|  |            else | |||
|  |                config_key = Convert.ToByte(config_key << 1); | |||
|  |             | |||
|  |            byte[] aa = new byte[6]; | |||
|  |             | |||
|  | 
 | |||
|  |            int count = 0; | |||
|  |            aa[count++] = config.order; | |||
|  |            aa[count++] = Convert.ToByte(config.ele_id / 256); | |||
|  |            aa[count++] = Convert.ToByte(config.ele_id % 256); | |||
|  |            aa[count++] = 0x29;//命令字 | |||
|  |            aa[count++] = config_key;//命令字 | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id / 256); | |||
|  |            //aa[count++] = Convert.ToByte(id_data.new_ele_id % 256); | |||
|  |            return (manage_usart_package(aa)); | |||
|  |            //  return true; | |||
|  |        } | |||
|  | 
 | |||
|  | 
 | |||
|  |   //      private readonly StringBuilder strReceive = new StringBuilder(); // 接收到数据的缓冲区   | |||
|  |     //    public model.uart_dis_data ss;// = new uart_dis_data(); | |||
|  |         private int receive_max = 20000; | |||
|  |         private byte[] receive_buff = new byte[20000]; | |||
|  |         private byte[] package_buff = new byte[20000]; | |||
|  |         private int receive_point; | |||
|  |         private int manage_point; | |||
|  |         private int package_point; | |||
|  |         private bool package_head_lab; | |||
|  |         private bool package_end_lab; | |||
|  |         private bool change_lab; | |||
|  |         private byte package_head = 0x8e; | |||
|  |         private byte package_end = 0x8f; | |||
|  |         private byte change_byte = 0x20; | |||
|  | 
 | |||
|  |         //把串口的数据保存起来 | |||
|  |         private void read_package(byte[] buf) | |||
|  |         { | |||
|  |             for (int i = 0; i < buf.Length; i++) | |||
|  |             { | |||
|  |                 receive_buff[receive_point++] = buf[i]; | |||
|  |                 if (receive_point >= receive_max) | |||
|  |                     receive_point = 0; | |||
|  |             } | |||
|  |         } | |||
|  |         /********************************************************************************** | |||
|  |         接收数据 | |||
|  |         //串口中断接收数据 | |||
|  |         //本函数是接收一包完整的数据  接收完后设置package_head_lab  package_end_lab为success | |||
|  |         处理完本包数据后才能接收下一包数据 | |||
|  |         ***********************************************************************************/ | |||
|  |         private void receive_manage(byte[] data) | |||
|  |         { | |||
|  |             read_package(data); | |||
|  |              while (true) | |||
|  |             { | |||
|  |                 if (receive_point == manage_point) | |||
|  |                     return; | |||
|  |                 //write_ascii(receive_buff[manage_point]); | |||
|  |                 if (package_head_lab == false) | |||
|  |                 {//接收包头 | |||
|  |                     if (receive_buff[manage_point] == package_head) | |||
|  |                     { | |||
|  |                         //write_ascii(receive_buff[manage_point]); | |||
|  |                         receive_buff[manage_point] = 0; | |||
|  |                         package_point = 0; | |||
|  |                         package_buff[package_point++] = package_head; | |||
|  |                         if (package_point >= receive_max) package_point = receive_max - 1;//by dhwu 150207 | |||
|  |                         package_head_lab = true; | |||
|  |                         manage_point++; | |||
|  |                         if (manage_point >= receive_max) | |||
|  |                             manage_point = 0; | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         receive_buff[manage_point] = 0; | |||
|  |                         manage_point++; | |||
|  |                         if (manage_point >= receive_max) | |||
|  |                             manage_point = 0; | |||
|  |                     } | |||
|  |                 } | |||
|  |                 else | |||
|  |                 {  //接收包 | |||
|  |                     if (package_end_lab == true) | |||
|  |                         return; | |||
|  | 
 | |||
|  |                     if (receive_buff[manage_point] == package_end) | |||
|  |                     { | |||
|  |                         //write_ascii(receive_buff[manage_point]); | |||
|  |                         receive_buff[manage_point] = 0; | |||
|  |                         package_end_lab = true; | |||
|  |                         package_buff[package_point++] = package_end; | |||
|  |                         if (package_point >= receive_max) package_point = receive_max - 1; | |||
|  |                         manage_point++; | |||
|  |                         if (manage_point >= receive_max) | |||
|  |                             manage_point = 0; | |||
|  |                         return; | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         if (receive_buff[manage_point] == change_byte) | |||
|  |                         { | |||
|  |                             // write_ascii(receive_buff[manage_point]); | |||
|  |                             change_lab = true; | |||
|  |                             manage_point++; | |||
|  |                             if (manage_point >= receive_max) | |||
|  |                                 manage_point = 0; | |||
|  |                         } | |||
|  |                         else | |||
|  |                         { | |||
|  |                             if (change_lab == true) | |||
|  |                             { | |||
|  |                                 change_lab = false; | |||
|  |                                 //write_ascii(receive_buff[manage_point]); | |||
|  |                                 if (receive_buff[manage_point] == 0) | |||
|  |                                 { | |||
|  |                                     package_buff[package_point++] = package_head; | |||
|  |                                 } | |||
|  |                                 else if (receive_buff[manage_point] == 1) | |||
|  |                                 { | |||
|  |                                     package_buff[package_point++] = package_end; | |||
|  |                                 } | |||
|  |                                 else if (receive_buff[manage_point] == 2) | |||
|  |                                 { | |||
|  |                                     package_buff[package_point++] = change_byte; | |||
|  |                                 } | |||
|  |                                 else | |||
|  |                                 { | |||
|  |                                     package_head_lab = false; | |||
|  |                                     package_end_lab = false; | |||
|  |                                     receive_buff[manage_point] = 0; | |||
|  |                                     manage_point++; | |||
|  |                                     if (manage_point >= receive_max) | |||
|  |                                         manage_point = 0; | |||
|  |                                     return; | |||
|  |                                 } | |||
|  |                                 receive_buff[manage_point] = 0; | |||
|  |                                 manage_point++; | |||
|  |                                 if (manage_point >= receive_max) | |||
|  |                                     manage_point = 0; | |||
|  | 
 | |||
|  |                             } | |||
|  |                             else | |||
|  |                             { | |||
|  |                                 //write_ascii(receive_buff[manage_point]); | |||
|  |                                 package_buff[package_point++] = receive_buff[manage_point]; | |||
|  |                                 receive_buff[manage_point] = 0; | |||
|  |                                 manage_point++; | |||
|  |                                 if (manage_point >= receive_max) | |||
|  |                                     manage_point = 0; | |||
|  |                             } | |||
|  |                             if (package_point >= receive_max) package_point = receive_max - 1; | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |         /********************************************************************************** | |||
|  |             接收数据 | |||
|  |             //串口中断接收数据 | |||
|  |             //本函数是接收一包完整的数据  接收完后设置package_head_lab  package_end_lab为success | |||
|  |             处理完本包数据后才能接收下一包数据 | |||
|  |             ***********************************************************************************/ | |||
|  |         private void receive_manage() | |||
|  |         { | |||
|  |             //read_package(data); | |||
|  |             while (true) | |||
|  |             { | |||
|  |                 if (receive_point == manage_point) | |||
|  |                     return; | |||
|  |                 //write_ascii(receive_buff[manage_point]); | |||
|  |                 if (package_head_lab == false) | |||
|  |                 {//接收包头 | |||
|  |                     if (receive_buff[manage_point] == package_head) | |||
|  |                     { | |||
|  |                         //write_ascii(receive_buff[manage_point]); | |||
|  |                         receive_buff[manage_point] = 0; | |||
|  |                         package_point = 0; | |||
|  |                         package_buff[package_point++] = package_head; | |||
|  |                         if (package_point >= receive_max) package_point = receive_max - 1; | |||
|  |                         package_head_lab = true; | |||
|  |                         manage_point++; | |||
|  |                         if (manage_point >= receive_max) | |||
|  |                             manage_point = 0; | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         receive_buff[manage_point] = 0; | |||
|  |                         manage_point++; | |||
|  |                         if (manage_point >= receive_max) | |||
|  |                             manage_point = 0; | |||
|  |                     } | |||
|  |                 } | |||
|  |                 else | |||
|  |                 {  //接收包 | |||
|  |                     if (package_end_lab == true) | |||
|  |                         return; | |||
|  | 
 | |||
|  |                     if (receive_buff[manage_point] == package_end) | |||
|  |                     { | |||
|  |                         //write_ascii(receive_buff[manage_point]); | |||
|  |                         receive_buff[manage_point] = 0; | |||
|  |                         package_end_lab = true; | |||
|  |                         package_buff[package_point++] = package_end; | |||
|  |                         if (package_point >= receive_max) package_point = receive_max - 1; | |||
|  |                         manage_point++; | |||
|  |                         if (manage_point >= receive_max) | |||
|  |                             manage_point = 0; | |||
|  |                         return; | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         if (receive_buff[manage_point] == change_byte) | |||
|  |                         { | |||
|  |                             // write_ascii(receive_buff[manage_point]); | |||
|  |                             change_lab = true; | |||
|  |                             manage_point++; | |||
|  |                             if (manage_point >= receive_max) | |||
|  |                                 manage_point = 0; | |||
|  |                         } | |||
|  |                         else | |||
|  |                         { | |||
|  |                             if (change_lab == true) | |||
|  |                             { | |||
|  |                                 change_lab = false; | |||
|  |                                 //write_ascii(receive_buff[manage_point]); | |||
|  |                                 if (receive_buff[manage_point] == 0) | |||
|  |                                 { | |||
|  |                                     package_buff[package_point++] = package_head; | |||
|  |                                 } | |||
|  |                                 else if (receive_buff[manage_point] == 1) | |||
|  |                                 { | |||
|  |                                     package_buff[package_point++] = package_end; | |||
|  |                                 } | |||
|  |                                 else if (receive_buff[manage_point] == 2) | |||
|  |                                 { | |||
|  |                                     package_buff[package_point++] = change_byte; | |||
|  |                                 } | |||
|  |                                 else | |||
|  |                                 { | |||
|  |                                     package_head_lab = false; | |||
|  |                                     package_end_lab = false; | |||
|  |                                     receive_buff[manage_point] = 0; | |||
|  |                                     manage_point++; | |||
|  |                                     if (manage_point >= receive_max) | |||
|  |                                         manage_point = 0; | |||
|  |                                     return; | |||
|  |                                 } | |||
|  |                                 receive_buff[manage_point] = 0; | |||
|  |                                 manage_point++; | |||
|  |                                 if (manage_point >= receive_max) | |||
|  |                                     manage_point = 0; | |||
|  | 
 | |||
|  |                             } | |||
|  |                             else | |||
|  |                             { | |||
|  |                                 //write_ascii(receive_buff[manage_point]); | |||
|  |                                 package_buff[package_point++] = receive_buff[manage_point]; | |||
|  |                                 receive_buff[manage_point] = 0; | |||
|  |                                 manage_point++; | |||
|  |                                 if (manage_point >= receive_max) | |||
|  |                                     manage_point = 0; | |||
|  |                             } | |||
|  |                             if (package_point >= receive_max) package_point = receive_max - 1; | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |         /*************************************************************************** | |||
|  | 数据处理 | |||
|  | ****************************************************************************/ | |||
|  |         private byte[] manage_data(byte[] data) | |||
|  |         { | |||
|  |             //处理串口通过中断接收的数据 | |||
|  |             receive_manage(data); | |||
|  | 
 | |||
|  |             if ((package_head_lab == true) && (package_end_lab == true)) | |||
|  |             { //收到一包数据  处理数据  | |||
|  |                 byte[] result = new byte[package_point]; | |||
|  |                 for (int i = 0; i < package_point; i++) | |||
|  |                     result[i] = package_buff[i]; | |||
|  |                 package_point = 0; | |||
|  |                 package_head_lab = false; | |||
|  |                 package_end_lab = false; | |||
|  |                 //by dhwu 150123 return result; | |||
|  |                 if (crc_base_result(result) == true) | |||
|  |                 { | |||
|  |                     return result; | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     byte[] result1 = new byte[0]; | |||
|  |                     return result1; | |||
|  |                 } | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 byte[] result = new byte[0]; | |||
|  |                 return result; | |||
|  |             } | |||
|  |         } | |||
|  |         private byte[] manage_data_package() | |||
|  |         { | |||
|  |             //处理串口通过中断接收的数据 | |||
|  |             receive_manage(); | |||
|  | 
 | |||
|  |             if ((package_head_lab == true) && (package_end_lab == true)) | |||
|  |             { //收到一包数据  处理数据  | |||
|  |                 //package_point | |||
|  |                  | |||
|  | 
 | |||
|  |                 byte[] result = new byte[package_point]; | |||
|  |                 for (int i = 0; i < package_point; i++) | |||
|  |                     result[i] = package_buff[i]; | |||
|  |                  | |||
|  |                 package_point = 0; | |||
|  |                 package_head_lab = false; | |||
|  |                 package_end_lab = false; | |||
|  |                 if (crc_base_result(result) == true) | |||
|  |                 { | |||
|  |                     return result; | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     byte[] result1 = new byte[0]; | |||
|  |                     return result1; | |||
|  |                 } | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 byte[] result = new byte[0]; | |||
|  |                 return result; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         //public bool init_Port(string com_num) | |||
|  |         //{ | |||
|  |         //    commPort.PortName = com_num; | |||
|  |         //    commPort.BaudRate = 9600; | |||
|  |         //    commPort.Parity = Parity.None;// Parity.Even; | |||
|  |         //    commPort.DataBits = 8; | |||
|  |         //    commPort.StopBits = StopBits.One; | |||
|  |         //    commPort.Encoding = Encoding.ASCII; | |||
|  |         //    try | |||
|  |         //    { | |||
|  |         //        commPort.Open(); | |||
|  |         //    } | |||
|  |         //    catch (InvalidOperationException e) | |||
|  |         //    { | |||
|  |         //        return false; | |||
|  |         //    } | |||
|  |         //    // commPort.Write("123123123"); | |||
|  |         //    return true; | |||
|  |         //} | |||
|  |         /* | |||
|  |         public bool write_command(uart_channel_comment[]  comment) | |||
|  |             { | |||
|  |                  | |||
|  |                 return true; | |||
|  |             } | |||
|  | 
 | |||
|  |             public bool write_command(uart_clear_comment[] comment) | |||
|  |             { | |||
|  | 
 | |||
|  |                 return true; | |||
|  |             } | |||
|  |             public bool write_command(uart_clear_orders [] comment) | |||
|  |             { | |||
|  | 
 | |||
|  |                 return true; | |||
|  |             } | |||
|  |             public bool write_command(uart_config_data[] comment) | |||
|  |             { | |||
|  | 
 | |||
|  |                 return true; | |||
|  |             } | |||
|  |         */ | |||
|  |         public bool write_command(model.uart_dis_data[] comment) | |||
|  |         { | |||
|  |             make_uart_data(comment); | |||
|  |             return true; | |||
|  |         } | |||
|  |    | |||
|  |         public string close_Port() | |||
|  |         { | |||
|  |             commPort.Close(); | |||
|  |             return "ok"; | |||
|  |         } | |||
|  |         // | |||
|  |         private bool write_byte(byte byt) | |||
|  |         { | |||
|  |             byte[] byt1 = new byte[1]; | |||
|  |             byt1[0] = byt; | |||
|  |             if (commPort.IsOpen) | |||
|  |             { | |||
|  |                 try | |||
|  |                 { | |||
|  |                     commPort.Write(byt1, 0, 1); | |||
|  |                 } | |||
|  |                 catch | |||
|  |                 { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 while (commPort.BytesToWrite != 0) ; | |||
|  |             } | |||
|  |             else  | |||
|  |             { | |||
|  |                 try | |||
|  |                 { | |||
|  |                     commPort.Open(); | |||
|  |                 } | |||
|  |                 catch | |||
|  |                 { | |||
|  |                     return false; | |||
|  |                 } | |||
|  |                 if (commPort.IsOpen) | |||
|  |                 { | |||
|  |                     try | |||
|  |                     { | |||
|  |                         commPort.Write(byt1, 0, 1); | |||
|  |                     } | |||
|  |                     catch | |||
|  |                     { | |||
|  |                         return false; | |||
|  |                     } | |||
|  |                     while (commPort.BytesToWrite != 0) ; | |||
|  |                 } | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  |         //  public  | |||
|  | 
 | |||
|  |         /************************************************ | |||
|  |          * 转化成发送数据 | |||
|  |          * ***********************************************/ | |||
|  | 
 | |||
|  |         /********************** | |||
|  |          * 设置检验码 | |||
|  |          * ***********************/ | |||
|  |         private bool crc_base_resultttt(byte[] comment) | |||
|  |         { | |||
|  | 
 | |||
|  |             byte crc8 = 0xff; | |||
|  |             int i; | |||
|  |             for (i = 0; i < comment.Length - 1; i++)//by dhwu 150123 | |||
|  |             { | |||
|  |                 crc8 = crc8_table[(crc8 ^ comment[i]) & 0xff]; | |||
|  | 
 | |||
|  |             } | |||
|  |             if (comment[i] == crc8) | |||
|  |             { | |||
|  |                 return true; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 //CrcError++; | |||
|  |                 crc_count++; | |||
|  |                 return false; | |||
|  |             } | |||
|  |             //return comment; | |||
|  |         } | |||
|  |         private byte[] crc_base(byte[] comment) | |||
|  |         { | |||
|  | 
 | |||
|  |             byte crc8 = 0xff; | |||
|  |             int i; | |||
|  |             for (i = 0; i < comment.Length-1; i++) | |||
|  |             { | |||
|  |                 crc8 = crc8_table[(crc8 ^ comment[i]) & 0xff]; | |||
|  | 
 | |||
|  |             } | |||
|  |             comment[i] = crc8; | |||
|  |             if (crc_base_resultttt(comment) != true) | |||
|  |                 Console.WriteLine("xxx{0}:{1}", crc8, comment[i]); ; | |||
|  |             return comment; | |||
|  |         } | |||
|  | 
 | |||
|  |         private bool crc_base_result(byte[] comment) | |||
|  |         { | |||
|  | 
 | |||
|  |             byte crc8 = 0xff; | |||
|  |             int i; | |||
|  |             for (i = 1; i < comment.Length - 2; i++)//by dhwu 150123 | |||
|  |             { | |||
|  |                 crc8 = crc8_table[(crc8 ^ comment[i]) & 0xff]; | |||
|  | 
 | |||
|  |             } | |||
|  |             if (comment[i] == crc8) | |||
|  |             { | |||
|  |                 return true; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 //CrcError++; | |||
|  |                 crc_count++; | |||
|  |                 return false; | |||
|  |             } | |||
|  |             //return comment; | |||
|  |         } | |||
|  | 
 | |||
|  |         private byte[] set_check_data(byte[] dat) | |||
|  |         { | |||
|  |            return crc_base(dat); | |||
|  |             //int i; | |||
|  |             //int result; | |||
|  |             //result = 0; | |||
|  | 
 | |||
|  |             //for (i = 0; i < dat.Length - 1; i++) | |||
|  |             //{ | |||
|  |             //    result = result + dat[i];// result + dat[i]; | |||
|  |             //    result = result % 256; | |||
|  |             //} | |||
|  |             //dat[i] = Convert.ToByte(result); | |||
|  |             //return dat; | |||
|  |         } | |||
|  | 
 | |||
|  |         //向串口发送一包数据 | |||
|  |         private bool send_package_dat(byte[] uart_package, int size) | |||
|  |         { | |||
|  |             // int send_size; | |||
|  |             write_byte(0x8e); | |||
|  |             for (int i = 0; i < uart_package.Count(); i++) | |||
|  |             { | |||
|  |                 if (uart_package[i] == 0x8e) | |||
|  |                 { | |||
|  |                     write_byte(0x20); | |||
|  |                     write_byte(0x00); | |||
|  |                 } | |||
|  |                 else if (uart_package[i] == 0x8f) | |||
|  |                 { | |||
|  |                     write_byte(0x20); | |||
|  |                     write_byte(0x01); | |||
|  |                 } | |||
|  |                 else if (uart_package[i] == 0x20) | |||
|  |                 { | |||
|  |                     write_byte(0x20); | |||
|  |                     write_byte(0x02); | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     write_byte(uart_package[i]); | |||
|  |                 } | |||
|  |             } | |||
|  |             write_byte(0x8f); | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         private bool manage_usart_package(byte[] usart_data) | |||
|  |         { | |||
|  |             byte[] dat; | |||
|  |             dat = set_check_data(usart_data); | |||
|  |             if (send_package_dat(dat, dat.Length) == false) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  |         private bool write_usart_package(byte[] usart_data) | |||
|  |         { | |||
|  |             byte[] dat; | |||
|  |             dat = set_check_data(usart_data); | |||
|  |             if (send_package_dat(dat, dat.Length) == false) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  |             return true; | |||
|  |         }   | |||
|  | 
 | |||
|  |         private bool make_uart_data(model.uart_dis_data[] dat) | |||
|  |         { | |||
|  | 
 | |||
|  |             byte[] mak_dis_pack = new byte[dat.Length * 9 + 7]; | |||
|  |             // | |||
|  |             int count = 0; | |||
|  |             mak_dis_pack[count++] = dat[0].order;//货单号 | |||
|  |             mak_dis_pack[count++] = 0xea;//批处理地址 | |||
|  |             mak_dis_pack[count++] = 0xff; | |||
|  |             mak_dis_pack[count++] = 0x2b; | |||
|  |             int aa = dat.Length; | |||
|  |             mak_dis_pack[count++] = Convert.ToByte(aa / 256);//批处理数量 | |||
|  |             mak_dis_pack[count++] = Convert.ToByte(aa % 256); | |||
|  |             //int address; | |||
|  |             byte little_id_base_address = new byte(); | |||
|  |             // byte little_id_offset_address; | |||
|  |             //byte[] little_id_comment = new byte[2]; | |||
|  |             // string litt_comment; | |||
|  |             byte num_base_address = new byte(); | |||
|  |             // byte num_offset_address; | |||
|  |             //byte[] num_comment = new byte[4]; | |||
|  |             //string num_commen; | |||
|  |             little_id_base_address = 0;//地址基地址 | |||
|  |             num_base_address = 8+4;      //数量基地址 | |||
|  |             if (check_state == true) | |||
|  |             { | |||
|  |                 num_base_address = 4;  | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 num_base_address = 8 + 4;  | |||
|  |             } | |||
|  |             for (int i = 0; i < dat.Length; i++) | |||
|  |             { | |||
|  |                 //litt_comment = dat[i].little_ele_id.ToString(); | |||
|  |                 //num_commen = dat[i].send_count.ToString(); | |||
|  |                 //地址偏移量 | |||
|  |                 //little_id_offset_address =Convert.ToByte(litt_comment.Count()-1); | |||
|  |                 //little_id_comment = get_array(little_id_comment, dat[i].little_ele_id); | |||
|  |                 //数量偏移量 | |||
|  |                 // num_offset_address = Convert.ToByte((dat[i].send_count.ToString()).Count()); | |||
|  |                 //num_comment = get_array(num_comment, dat[i].send_count); | |||
|  | 
 | |||
|  |                 mak_dis_pack[count++] = Convert.ToByte(5 + 3);//长度 | |||
|  |                 mak_dis_pack[count++] = Convert.ToByte(dat[i].ele_id / 256);//id | |||
|  |                 mak_dis_pack[count++] = Convert.ToByte(dat[i].ele_id % 256); | |||
|  |                 mak_dis_pack[count++] = 0x21;//命令 + 状态 | |||
|  | 
 | |||
|  |                 mak_dis_pack[count] = Convert.ToByte(dat[i].dis_type << 4);//显示类型 | |||
|  |                 if (dat[i].bcdflag == true) | |||
|  |                     mak_dis_pack[count] = Convert.ToByte(mak_dis_pack[count] | dat[i].little_ele_idH1);//地址的位置 | |||
|  |                 else | |||
|  |                     mak_dis_pack[count] = Convert.ToByte(mak_dis_pack[count] | little_id_base_address);//地址的位置 | |||
|  |                 count++; | |||
|  |                 //dat[i].little_ele_id; | |||
|  | 
 | |||
|  |                 if (dat[i].little_ele_idH2 > 0) | |||
|  |                 {  | |||
|  |                     mak_dis_pack[count++] = Convert.ToByte(dat[i].little_ele_idH2);//第二个窗口数字 | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     mak_dis_pack[count++] = Convert.ToByte((num_base_address << 3) | dat[i].little_ele_idH2);//地址的位置 | |||
|  |                 } | |||
|  |                 mak_dis_pack[count++] = dat[i].little_ele_id;//地址 | |||
|  | 
 | |||
|  |                 mak_dis_pack[count++] = Convert.ToByte(dat[i].send_count / 256);//数量 | |||
|  |                 mak_dis_pack[count++] = Convert.ToByte(dat[i].send_count % 256); | |||
|  |                // mak_dis_pack[count++] = Convert.ToByte(56);//地址 | |||
|  | 
 | |||
|  |             } | |||
|  |             mak_dis_pack[count] = 0;//校验 | |||
|  |             manage_usart_package(mak_dis_pack); | |||
|  |             return true; | |||
|  |         } | |||
|  |         //  public int get_ele_id(byte) | |||
|  |         //解析串口数据 | |||
|  |         // | |||
|  |         private model.uart_dis_data[] analytic_dis_data_mul(byte[] comment) | |||
|  |         { | |||
|  |             int address, size, offset; | |||
|  |             byte[] buff = new byte[12]; | |||
|  |             size = comment[5] * 256 + comment[6]; | |||
|  |             model.uart_dis_data[] dis_dat = new model.uart_dis_data[size]; | |||
|  |             address = 7; | |||
|  |             for (int i = 0; i < size; i++) | |||
|  |             { | |||
|  |                 offset = comment[address]; | |||
|  |                 dis_dat[i].dis_type = Convert.ToByte(comment[address + 5] >> 4); | |||
|  |                 dis_dat[i].state = Convert.ToByte(comment[address + 4] >> 5); | |||
|  |                 dis_dat[i].ele_id = comment[address + 2] * 256 + comment[address + 3]; | |||
|  |                 dis_dat[i].little_ele_id = comment[address + 7]; | |||
|  |                 dis_dat[i].receive_count = comment[address + 8] * 256 + comment[address + 9]; | |||
|  |                 dis_dat[i].order = comment[address + 1]; | |||
|  | 
 | |||
|  |                 address = address + offset + 1; | |||
|  |             } | |||
|  |             return dis_dat; | |||
|  |         } | |||
|  |         private model.uart_dis_data analytic_dis_data_single(byte[] comment) | |||
|  |         { | |||
|  |             model.uart_dis_data dis_dat = new model.uart_dis_data(); | |||
|  |             int address = 1; | |||
|  |             // offset = comment[address]; | |||
|  |             dis_dat.dis_type = Convert.ToByte(comment[address + 4] >> 4); | |||
|  |             dis_dat.ele_id = comment[address + 1] * 256 + comment[address + 2]; | |||
|  |             dis_dat.little_ele_idH2 = comment[address + 5]; | |||
|  |             dis_dat.little_ele_id = comment[address + 6]; | |||
|  |             dis_dat.receive_count = comment[address + 7] * 256 + comment[address + 8]; | |||
|  |             dis_dat.order = comment[1]; | |||
|  |             dis_dat.state = Convert.ToByte(comment[4] >> 5); | |||
|  |             // address = address + offset + 1; | |||
|  |             return dis_dat; | |||
|  |         } | |||
|  |         /*private bool get_package_data(model.uart_dis_data[] dat, model.uart_dis_data aa) | |||
|  |         { | |||
|  |             if (dat.Length == 0) | |||
|  |                 return false; | |||
|  |             return true; | |||
|  |         }*/ | |||
|  |         private bool search_order(byte order) | |||
|  |         { | |||
|  |             //想串口写读取指令 | |||
|  |             //7e02eaff2c007f | |||
|  |             byte[] comment = new byte[5]; | |||
|  |             int i; | |||
|  |             i = 0; | |||
|  |             //comment[0] = 0x8e; | |||
|  |             comment[i++] = order; | |||
|  |             comment[i++] = 0xea; | |||
|  |             comment[i++] = 0xff; | |||
|  |             comment[i++] = 0x2c; | |||
|  |             comment[i++] = 0x00; | |||
|  |             //comment[i++] = 0x8f; | |||
|  |             //send_package_dat(comment,comment.Count()); | |||
|  |             //等待数据返回 | |||
|  |             //model.uart_dis_data[] data; | |||
|  | 
 | |||
|  |             return true; | |||
|  | 
 | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  | } |