using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using DevExpress.XtraEditors.Controls; using Microsoft.VisualBasic; using System.Security.Cryptography; namespace dn_wms { public partial class basicFuncs : Form { public static dnrj aa ;//= new sjqh(); Dictionary coms = new Dictionary(); //public static sjqh aa1 = new sjqh(); // public static sjqh aa2 = new sjqh(); string[,] comment = new string[200, 5]; int[] order = new int[300]; delegate void dis_result(string state); delegate void receive_coun(Int16 count); delegate void receive_result( model.uart_dis_data[] data); delegate void send_coun(Int16 count); int[] test_count = new int[255]; int test_order; int timer_2 = 0; int[] goods_send_id = new int[1300]; int[] goods_send_lid = new int[1300]; int[] goods_send_order = new int[1300]; //定时器,定时发送 byte TESTRUN = 0x5a; byte TESTSTOP = 0xa5; byte offset = 0; byte SendMode = 0; bool SendSeq = true; int test_elelab_start, test_elelab_stop, test_elelab_address, PackageNum = 0; int test_light_start, test_light_stop, test_light_address; int[] elelab_test_error = new int[9999]; int[] light_test_error = new int[9999]; model.dis_id SendData; int len_kzq_test = 0; byte offset_kzq_test, flag_kzq_test = 0; int[] count_bz = new int[255]; public const int MAX_LIGHT_NUM = 7700; public basicFuncs() { InitializeComponent(); } private void basicFuncs_Load(object sender, EventArgs e) { tbpanel.SelectedPageIndex = 0; // tbpanel.Pages[1].PageVisible = false; initComs(); initialCom(); meditLogs.ReadOnly = true; } byte led_rgb = 0; private void btnSeeds_Click(object sender, EventArgs e) { int elelab_start, elelab_stop, count, num, seedsNum; int goods_add_start, goods_add_stop, goods_second; int tmp; try { elelab_start = Convert.ToInt32(txtlbID1.Text); elelab_stop = Convert.ToInt32(txtlbID2.Text); goods_add_start = Convert.ToInt32(this.txtaddr1.Text); goods_add_stop = goods_add_start; seedsNum = Convert.ToInt16(this.txtNum.Text); // aa.bcdflag = false; if ((elelab_stop < elelab_start) || (goods_add_stop < goods_add_start)) { throw new Exception(); } if (String.IsNullOrEmpty(txtaddr2.Text.Trim())) { goods_second = 0; } else { goods_second = Convert.ToInt32(txtaddr2.Text); } } catch { MessageBox.Show("请输入正确的标签ID范围与地址范围"); return; } switch (combLbColor.Text) { case "红": led_rgb = 1; break; case "绿": led_rgb = 2; break; case "蓝": led_rgb = 3; break; case "红闪": led_rgb = 4; break; case "绿闪": led_rgb = 5; break; case "蓝闪": led_rgb = 6; break; case "红绿": led_rgb = 7; break; case "红蓝": led_rgb = 8; break; case "绿蓝": led_rgb = 9; break; case "红绿蓝": led_rgb = 10; break; case "5": led_rgb = 11; break; case "6": led_rgb = 12; break; case "7": led_rgb = 13; break; case "8": led_rgb = 14; break; case "9": led_rgb = 15; break; default: led_rgb = 2; break; } /*if (combLbColor.SelectedIndex==0) { led_rgb += 1; if (led_rgb > 10) { led_rgb = 0; } }*/ tmp = test_order; // if (checkBox5.Checked == true) { test_order++; } if (test_order >= 255) test_order = 1; lbOrderNo.Text = test_order.ToString(); count = (elelab_stop - elelab_start + 1) * (goods_add_stop - goods_add_start + 1); count_bz[test_order] = count; //uart_dis_data[] comment = new uart_dis_data[count]; model.uart_dis_data[] comment = new model.uart_dis_data[count]; num = 0; for (int i = elelab_start; i <= elelab_stop; i++) { for (int j = goods_add_start; j <= goods_add_stop; j++) { comment[num].dis_type = led_rgb;//Convert.ToByte(textBox4.Text); 电子标签灯的颜色 1 红色 2 绿色 3 蓝色 comment[num].ele_id = i; //电子标签id comment[num].order = Convert.ToByte(test_order);//Convert.ToByte(textBox2.Text); 单号 // comment[num].port = comboBox1.Text;//textBox3.Text;// Convert.ToByte(textBox3.Text); 端口 不使用 comment[num].receive_count = 0; //为0 // comment[num].bcdflag = false; // comment[num].little_ele_idH1 = 0; // comment[num].little_ele_idH1 = 0; comment[num].little_ele_id = Convert.ToByte(j); // 货位号 comment[num].send_count = seedsNum; comment[num].little_ele_idH2 = Convert.ToByte(goods_second); ; comment[num].state = 1; //都为1 num++; //comment[i*j]. } } if (chkClearOrder.Checked == true) { model.clear_order ss = new model.clear_order(); ss.order = Convert.ToByte(tmp); ss.state = 1; aa.clear_order(ss); } lbstate.Text = "正在播种..."; addLog("正在播种..."); for (int i = 0; i < 1300; i++) { goods_send_id[i] = 0; goods_send_lid[i] = 0; goods_send_order[i] = 0; } test_count[test_order] = 0; // System.Threading.Thread.Sleep(200);//by dhwu 141226 if (aa.write_dis_comment(comment) == true) { // label10.Text = label10.Text + "成功"; // //textBox1.Text = textBox1.Text + "成功"; addLog(" 播种成功"); } else { addLog(" 播种失败"); //textBox1.Text = textBox1.Text + "失败"; } } void addLog(string info) { if (this.meditLogs.Lines.Length > 100) { this.meditLogs.Text = ""; } while (info.Length < 100) { info += " "; } info += " " + System.DateTime.Now; this.meditLogs.Text = info + "\r\n" + this.meditLogs.Text; } bool isTesting = false; private void btnTest_Click(object sender, EventArgs e) { isTesting = !isTesting; addLog(isTesting ? "开始" : "结束" + " 测试..."); int i; if (SendMode == 0) { try { if ((this.txtlbID1.Text == "") || (txtlbID2.Text == "")) { if ((this.txtChID1.Text == "") || (this.txtChID2.Text == "")) { MessageBox.Show("输入的地址错误"); SendMode = 0; return; } else { test_elelab_start = 0; test_elelab_stop = 0; try { test_light_start = Convert.ToInt16(txtChID1.Text); test_light_stop = Convert.ToInt16(txtChID2.Text); } catch { MessageBox.Show("输入的巷灯ID错误"); addLog("输入的巷灯ID错误"); return; } SendMode = 0x02; } } else { if ((txtChID1.Text == "") || (txtChID2.Text == "")) { test_elelab_start = Convert.ToInt16(txtlbID1.Text); test_elelab_stop = Convert.ToInt16(txtlbID2.Text); test_light_start = 5000; test_light_stop = 5000; SendMode = 0x01; } else { test_elelab_start = Convert.ToInt16(txtlbID1.Text); test_elelab_stop = Convert.ToInt16(txtlbID2.Text); test_light_start = Convert.ToInt16(txtChID1.Text); test_light_stop = Convert.ToInt16(txtChID2.Text); SendMode = 0x03; } } } catch { MessageBox.Show("输入错误"); addLog("输入错误"); return; } test_elelab_address = test_elelab_start; test_light_address = test_light_start; if ((test_elelab_start > test_elelab_stop))// || (test_elelab_stop > 999)) { MessageBox.Show("输入的结束ID必须大于等于起始ID,且小于999"); addLog("输入的结束ID必须大于等于起始ID,且小于999"); SendMode = 0; } else if ((test_light_start > test_light_stop) || (test_light_start < 5000) || (test_light_stop > MAX_LIGHT_NUM)) { MessageBox.Show("输入的结束ID必须大于等于起始ID,且必须在5000到5100之间"); addLog("输入的结束ID必须大于等于起始ID,且必须在5000到5100之间"); SendMode = 0; } else { btnTest.Text = isTesting ? "结束测试" : "开始测试"; if ((SendMode & 0x01) == 0x01) { for (i = test_elelab_start; i <= test_elelab_stop; i++) { SendData.order = TESTRUN; SendData.ele_id = i; SendData.state = 1; aa.write_test_device(SendData, offset); System.Threading.Thread.Sleep(100); } } if ((SendMode & 0x02) == 0x02) { for (i = test_light_start; i <= test_light_stop; i++) { SendData.order = TESTRUN; SendData.ele_id = i; SendData.state = 1; aa.write_test_device(SendData, offset); System.Threading.Thread.Sleep(100); } } SendMode = (byte)(SendMode | 0x10); } } else { btnTest.Text = isTesting ? "结束测试" : "开始测试"; if (SendMode != 0) { SendMode = (byte)(SendMode & 0x0f); SendSeq = true; if ((SendMode & 0x01) == 0x01) { for (i = test_elelab_start; i <= test_elelab_stop; i++) { SendData.order = TESTSTOP; SendData.ele_id = i; SendData.state = 1; aa.write_test_device(SendData, offset); if (elelab_test_error[i] > 0) { addLog("#、标签" + i.ToString() + "丢包数: " + elelab_test_error[i].ToString()); // this.meditLogs.Focus();//获取焦点 //this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 } System.Threading.Thread.Sleep(100); } } if ((SendMode & 0x02) == 0x02) { for (i = test_light_start; i <= test_light_stop; i++) { SendData.order = TESTSTOP; SendData.ele_id = i; SendData.state = 1; aa.write_test_device(SendData, offset); if (light_test_error[i - 5000] > 0) { addLog("#、标签" + i.ToString() + "丢包数: " + light_test_error[i - 5000].ToString()); // this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 } System.Threading.Thread.Sleep(100); } } addLog("\r\n#、每个标签发送接收包数: " + (PackageNum + 1).ToString() + "; 每个标签发送接收字节数: " + ((PackageNum + 1) * 15).ToString()); // this.meditLogs.Focus();//获取焦点 //this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 for (i = 0; i < 999; i++) { elelab_test_error[i] = 0; light_test_error[i] = 0; } PackageNum = 0; SendMode = 0; } } } bool isShowId; private void btnShowId_Click(object sender, EventArgs e) { model.dis_id id; isShowId = !isShowId; /* //id.ele_id = Convert.ToInt16(new_id.Text); if (this.txtlbID1.Text == "") { id.order = 0; id.ele_id = 65535; id.state = 1; // aa.write_dis_id_comment(id); } else { id.order = 1; int eid = 0; try { eid = Convert.ToInt16(txtlbID1.Text); } catch { MessageBox.Show("请输入正确的ID"); addLog("请输入正确的ID"); return; } id.ele_id = eid;// Convert.ToInt16(txtlbID2.Text); id.state = 1; } */ id.order = 0; id.ele_id = 65535; id.state = 1; if (isShowId) { aa.write_dis_id_comment(id); btnShowId.Text = "清除ID显示"; } else { aa.write_clear_comment(id); btnShowId.Text = "显示标签ID"; } } private void btnReset_Click(object sender, EventArgs e) { resetDevices(); } private void resetDevices() { model.dis_id id; id.order = 0; id.ele_id = 65535; id.state = 1; aa.write_reset_device(id); System.Threading.Thread.Sleep(100); id.order = 1; id.ele_id = 0; id.state = 1; aa.write_reset_device(id); } private void btnSchChannel_Click(object sender, EventArgs e) { bool ret; int i; model.modify_id id; if (SendMode != 0) { MessageBox.Show("请停止测试再搜索"); return; } if ((this.txtChID1.Text == "") || (txtChID2.Text == "")) { MessageBox.Show("请输入的巷灯ID范围"); return; } try { test_light_start = Convert.ToInt16(txtChID1.Text); test_light_stop = Convert.ToInt16(txtChID2.Text); } catch { } if ((test_light_start > test_light_stop) || (test_light_start < 5000) || (test_light_stop > MAX_LIGHT_NUM)) { MessageBox.Show("输入的结束ID必须大于等于起始ID,且必须在5000到5100之间"); } else { this.lbstate.Text = "正在搜索"; System.Threading.Thread.Sleep(50); for (i = test_light_start; i <= test_light_stop; i++) { id.order = 0; id.new_ele_id = 0; id.old_ele_id = i; id.state = 1; ret = aa.search_light_id(id); if (ret) { addLog("搜索到巷灯:" + i.ToString()); // this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 System.Threading.Thread.Sleep(50); } } this.lbstate.Text = "搜索结束"; addLog("搜索结束"); } } bool isCloseLable = false; private void simpleButton10_Click(object sender, EventArgs e) { int lbId = 0; try { lbId = Convert.ToInt16(txtLbId11.Text); model.dis_id id; id.order = 1; id.ele_id = lbId; id.state = 1; if (!isCloseLable) { aa.write_dis_id_comment(id); isCloseLable = true; } else { // clear_comment cc; // cc.order = 1; //cc.ele_id = lbId; // cc.state = 1; aa.write_clear_comment(id); isCloseLable = false; } } catch { MessageBox.Show("请输入正确的ID"); addLog("请输入正确的ID"); return; } simpleButton10.Text = isCloseLable ? "关闭" : "显示"; // isCloseLable = !isCloseLable; // readDevice(lbId); } void readDevice(int devId) { bool ret; int version; int ElelabCnt, temp; //byte ddata1,ddata2,ddata3; byte[] ddata = new byte[10];//, ddata2, ddata3; float voltage; String ElelabID; model.dis_id id; id.order = 0; id.ele_id = devId; id.state = 1; if ((id.ele_id < 0) || (id.ele_id > MAX_LIGHT_NUM)) { MessageBox.Show("设备ID必须在0到5100之间"); return; } ret = aa.get_inf_device(id); if (!ret) { MessageBox.Show("读取设备信息失败"); } else { version = (aa.command_test_buf[5] << 8) + aa.command_test_buf[6]; if (id.ele_id >= 5000)//巷灯 { voltage = (aa.command_test_buf[7] << 8) + aa.command_test_buf[8]; voltage = (voltage * 5 * 11) / 1024; ElelabCnt = (aa.command_test_buf[9] << 8) + aa.command_test_buf[10]; if (ElelabCnt > 0) { ElelabID = "绑定标签ID:"; for (int i = 0; i < ElelabCnt; i++) { temp = (aa.command_test_buf[11 + i * 2] << 8) + aa.command_test_buf[12 + i * 2]; ElelabID = ElelabID + temp.ToString() + ","; } // MessageBox.Show("巷灯设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "输入电压:" + voltage.ToString("0.00") + "\r\n" + "绑定标签数:" + ElelabCnt.ToString() + "\r\n" + ElelabID); addLog("巷灯设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "输入电压:" + voltage.ToString("0.00") + "\r\n" + "绑定标签数:" + ElelabCnt.ToString() + "\r\n" + ElelabID); } else { // MessageBox.Show("巷灯设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "输入电压:" + voltage.ToString("0.00") + "\r\n" + "绑定标签数:" + ElelabCnt.ToString()); addLog("巷灯设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "输入电压:" + voltage.ToString("0.00") + "\r\n" + "绑定标签数:" + ElelabCnt.ToString()); } } else if (id.ele_id == 0)//控制器 { ElelabCnt = (aa.command_test_buf[7] << 8) + aa.command_test_buf[8]; ddata[0] = aa.command_test_buf[9]; ddata[1] = aa.command_test_buf[10]; ddata[2] = aa.command_test_buf[11]; ddata[3] = aa.command_test_buf[12]; ddata[4] = aa.command_test_buf[13]; ddata[5] = aa.command_test_buf[14]; ddata[6] = aa.command_test_buf[15]; ddata[7] = aa.command_test_buf[16]; ddata[8] = aa.command_test_buf[17]; ddata[9] = aa.command_test_buf[18]; // MessageBox.Show("控制器设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "剩余空间数:" + ElelabCnt.ToString() + "\r\n" + // ddata[0].ToString() + ":" + ddata[1].ToString() + ":" + ddata[2].ToString() + ":" + // ddata[3].ToString() + ":" + ddata[4].ToString() + ":" + ddata[5].ToString() + ":" + // ddata[6].ToString() + ":" + ddata[7].ToString() + ":" + ddata[8].ToString() + ":" + ddata[9].ToString() + ":"); addLog("控制器设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "剩余空间数:" + ElelabCnt.ToString() + "\r\n" + ddata[0].ToString() + ":" + ddata[1].ToString() + ":" + ddata[2].ToString() + ":" + ddata[3].ToString() + ":" + ddata[4].ToString() + ":" + ddata[5].ToString() + ":" + ddata[6].ToString() + ":" + ddata[7].ToString() + ":" + ddata[8].ToString() + ":" + ddata[9].ToString() + ":"); } else if (aa.command_test_buf[8] == 0) //扫描枪 { MessageBox.Show("扫描枪设备" + "\r\n" + "版本:" + version.ToString()); } else if (aa.command_test_buf[8] == 0xaa)//标签 { version = aa.command_test_buf[5]; if (aa.command_test_buf[6] == 0xaa) addLog("标签设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "剩余空间数:" + aa.command_test_buf[7].ToString() + "\r\n" + "显示模式:bcd码"); else addLog("标签设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "剩余空间数:" + aa.command_test_buf[7].ToString() + "\r\n" + "显示模式:十进制"); } } } bool isCloseLight; private void simpleButton7_Click(object sender, EventArgs e) { int temp = 0; if (this.txtChID21.Text == "") { MessageBox.Show("请输入巷灯ID,在5000到5500之间"); return; } else { try { temp = Convert.ToInt16(txtChID21.Text); if ((temp > MAX_LIGHT_NUM) || (temp < 5000)) { MessageBox.Show("巷灯ID必须在5000到5500之间"); return; } } catch { MessageBox.Show("巷灯ID必须在5000到5500之间"); return; } } openChannel(temp); // simpleButton7.Text = isCloseLight ? "显示" : "关闭"; // isCloseLight = !isCloseLight; //readDevice(temp); } void openChannel(int lightId) { byte led_rgb = getLedColor(); model.open_channel_led id; id.channel_id = lightId; id.config_word = led_rgb; id.state = 1; aa.write_open_channel_led(id); } private void simpleButton6_Click(object sender, EventArgs e) { model.modify_id id; try { id.old_ele_id = Convert.ToInt16(this.txtLbId11.Text); id.order = 1; id.new_ele_id = Convert.ToInt16(this.txtlbID12.Text); id.state = 1; aa.write_modify_id_comment(id); addLog(string.Format("ID changed from {0} to {1} ", id.old_ele_id, id.new_ele_id)); } catch { } } private void simpleButton8_Click(object sender, EventArgs e) { int temp = 0; if (txtChID21.Text == "") { MessageBox.Show("请输入巷灯ID,在5000到5100之间"); return; } else { temp = Convert.ToInt16(txtChID21.Text); if ((temp > MAX_LIGHT_NUM) || (temp < 5000)) { MessageBox.Show("巷灯ID必须在5000到5100之间"); return; } } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show(String.Format("确定要清除绑定吗?"), "清除绑定", messButton); if (dr != DialogResult.OK) { return; } model.close_channel_led id; id.channel_id = temp; id.config_word = led_rgb; id.state = 1; bool ret = aa.clear_channel_led(id);//write_config_channel_led if (ret) MessageBox.Show("清除巷灯成功"); else MessageBox.Show("清除巷灯失败"); } private void simpleButton9_Click(object sender, EventArgs e) { MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show(String.Format("确定要清除所有绑定吗?"), "清除所有绑定", messButton); if (dr == DialogResult.OK) { dr = MessageBox.Show(String.Format("真确定要清除所有绑定吗?"), "清除所有绑定", messButton); if (dr != DialogResult.OK) { return; } } else { return; } model.close_channel_led id; id.channel_id = 0xffff; id.config_word = led_rgb; id.state = 1; bool ret = aa.clear_channel_led(id);//write_config_channel_led if (ret) MessageBox.Show("清除巷灯成功"); else MessageBox.Show("清除巷灯失败"); } private void simpleButton12_Click(object sender, EventArgs e) { bool ret; model.modify_id id; if (this.txtChID21.Text == "") { MessageBox.Show("请输入的旧巷灯ID"); return; } if (txtChID22.Text == "") { MessageBox.Show("请输入的新巷灯ID"); return; } id.order = 0; id.new_ele_id = Convert.ToInt16(txtChID22.Text); id.old_ele_id = Convert.ToInt16(txtChID21.Text); id.state = 1; if ((id.new_ele_id > MAX_LIGHT_NUM) || (id.new_ele_id < 5000) || (id.old_ele_id > MAX_LIGHT_NUM) || (id.old_ele_id < 5000)) { MessageBox.Show("巷灯ID必须在5000到5500"); return; } ret = aa.change_light_id(id); if (!ret) { //MessageBox.Show("修改巷灯ID失败"); addLog("巷灯" + id.old_ele_id.ToString() + "修改成" + id.new_ele_id.ToString() + "失败"); } else { // MessageBox.Show("巷灯" + id.old_ele_id.ToString() + "修改成" + id.new_ele_id.ToString() + "成功"); addLog("巷灯" + id.old_ele_id.ToString() + "修改成" + id.new_ele_id.ToString() + "成功"); openChannel(id.new_ele_id); txtChID22.Text = (id.new_ele_id + 1)+""; } } private void simpleButton1_Click(object sender, EventArgs e) { int temp = 0; if (this.txtChID21.Text == "") { MessageBox.Show("请输入的旧巷灯ID"); return; } else { try { temp = Convert.ToInt16(txtChID21.Text); } catch { } if ((temp > MAX_LIGHT_NUM) || (temp < 5000)) { MessageBox.Show("巷灯ID必须在5000到5100之间"); return; } } model.config_channel_led id; byte led_rgb = getLedColor(); id.channel_id = temp; id.config_word = led_rgb; id.state = 1; aa.write_config_channel_led(id);//write_config_channel_led } byte getLedColor() { byte led_rgb = 0; switch (combChcolor.Text) { case "红": led_rgb = 0; break; case "绿": led_rgb = 1; break; case "蓝": led_rgb = 2; break; case "黄": led_rgb = 3; break; case "白": led_rgb = 4; break; default: led_rgb = 0; break; } return led_rgb; } void initComs() { String[] Portname = System.IO.Ports.SerialPort.GetPortNames(); combComs.Properties.TextEditStyle = TextEditStyles.DisableTextEditor; combComs.Properties.Items.Clear(); ComboBoxItemCollection col = combComs.Properties.Items; col.BeginUpdate(); try { for (int i = 0; i < Portname.Length; i++) { //col.Add(i); col.Add(Portname[i]); } } finally { col.EndUpdate(); } combComs.SelectedIndex = 0; } void initialCom() { bool ret = false; try { aa = coms.Keys.Contains(combComs.Text) ? coms[combComs.Text] : new dnrj(); if (coms.Keys.Contains(combComs.Text)) { aa = coms[combComs.Text]; addLog(string.Format(combComs.Text + " 打开{0}", "成功")); } else { aa = new dnrj(); ret = aa.init_wms_sys(1, combComs.Text); if (ret) { coms[combComs.Text] = aa; aa.check_state = true; aa.on_dis_event += new dnrj.receive_dis_data(receive_dis_data); aa.on_send_dis_result_event += new dn_wms.dnrj.send_dis_data_result(receive_dis_data_result); aa.on_close_channel += new dn_wms.dnrj.close_channel(aa_on_close_channel); aa.on_config_channel += new dnrj.config_channel(aa_on_config_channel); aa.on_open_channel += new dnrj.open_channel(aa_on_open_channel); timer1.Enabled = true;//设置为true开始计时 timer1.Interval = 50;//设置timer1的执行周期为50毫秒 model.dis_id id; id.order = 0; id.ele_id = 65535; id.state = 1; aa.write_reset_device(id); System.Threading.Thread.Sleep(100); id.order = 1; id.ele_id = 0; id.state = 1; aa.write_reset_device(id); } addLog(string.Format(combComs.Text + "打开{0}", ret ? "成功" : "失败")); } } catch { } } private void simpleButton2_Click(object sender, EventArgs e) { initialCom(); } void aa_on_open_channel(model.open_channel_led data) { // MessageBox.Show("打开巷灯 id = " + data.channel_id.ToString() + " 成功"); //throw new NotImplementedException(); } void aa_on_config_channel(model.config_channel_led data) { // addLog("配置 id = " + data.channel_id.ToString() + "配置字 = " + data.config_word.ToString() + " 成功 "); //throw new NotImplementedException(); } void aa_on_close_channel(model.close_channel_led data) { // addLog("关闭巷灯 id = " + data.channel_id.ToString() + " 成功"); //throw new NotImplementedException(); } private void receive_dis_data_result(byte order, byte result, string result1) { if (this.lbstate.InvokeRequired) { dis_result aa = new dis_result(manage_state); lbstate.Invoke(aa, result.ToString()); //lbstate.Invoke(result.ToString()); if (result == 4) MessageBox.Show("数据部分发送成功", "title", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void receive_dis_data(model.uart_dis_data[] data) { if (data.Length == 1) { if (meditLogs.InvokeRequired) { receive_result aa = new receive_result(receive_result1); meditLogs.Invoke(aa, data); //receive_result } } else { if (lbstate.InvokeRequired) { dis_result aa = new dis_result(manage_state); lbstate.Invoke(aa, "数据处理完毕"); //lbstate.Invoke(result.ToString()); }; } //MessageBox.Show("ok"); } private void receive_result1(model.uart_dis_data[] data) { try { order[test_count[data[0].order] % 260] = data[0].ele_id; for (int i = 0; i < 1300; i++) { if ((goods_send_id[i] == data[0].ele_id) && (goods_send_lid[i] == data[0].little_ele_id) && (goods_send_order[i] == data[0].order)) { break; } else if ((goods_send_id[i] == 0) && (goods_send_lid[i] == 0)) { goods_send_id[i] = data[0].ele_id; goods_send_lid[i] = data[0].little_ele_id; goods_send_order[i] = data[0].order; test_count[data[0].order]++; if (test_count[data[0].order] > 60000) test_count[data[0].order] = 0; //by dhwu 150529 if (checkBox3.Checked == true) { // meditLogs.Text = meditLogs.Text + data[0].order.ToString() + " " + data[0].ele_id.ToString() + " " + data[0].little_ele_id.ToString() + " " + data[0].receive_count.ToString() + " " + test_count[data[0].order].ToString() + '\r' + '\n'; // addLog( data[0].order.ToString() + " " + data[0].ele_id.ToString() + " " + data[0].little_ele_id.ToString() + " " + data[0].receive_count.ToString() + " " + test_count[data[0].order].ToString() + '\r' + '\n'); // addLog(String.Format("ID:{0} LOC:{1} CNT:{2}", data[0].ele_id.ToString(), // data[0].little_ele_id.ToString(), data[0].little_ele_idH2.ToString(), data[0].receive_count.ToString())); addLog(String.Format("ID:{0} LOC:{1} LOC2: {2} ", data[0].ele_id.ToString(), data[0].little_ele_id.ToString(), data[0].little_ele_idH2.ToString() )); // meditLogs.Focus();//获取焦 // meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 // meditLogs.ScrollToCaret();//滚动到光标处 } break; } } } catch { MessageBox.Show("异常数据" + data[0].ele_id.ToString()); } } private void receive_dis_data1(model.uart_dis_data[] data) { if (data.Length == 1) { if (meditLogs.InvokeRequired) { receive_result aa = new receive_result(receive_result1); meditLogs.Invoke(aa, data); //receive_result } } else { if (lbstate.InvokeRequired) { dis_result aa = new dis_result(manage_state); lbstate.Invoke(aa, "数据处理完毕"); //lbstate.Invoke(result.ToString()); }; } //MessageBox.Show("ok"); } private void manage_state(string state) { //if() switch (state) { case "1": lbstate.Text = "数据发送成功,开始播种"; break; case "2": lbstate.Text = "有相同的订单号在处理"; break; case "3": lbstate.Text = "控制器没有空间 稍后再发送数据"; break; case "4": lbstate.Text = "数据部分发送成功,开始播种"; break; case "5": lbstate.Text = "数据发送失败,开始播种"; break; case "数据处理完毕": lbstate.Text = "播种完毕"; break; } // lbstate.Text = state; } private void timer1_Tick(object sender, EventArgs e) { bool ret; // MessageBox.Show("你好,这是第" + n + "次打招呼哦");//弹出对话框告诉你 if (SendMode == 0x11) { SendData.order = 0; SendData.ele_id = test_elelab_address; SendData.state = 1; ret = aa.write_test_device(SendData, offset); if (!ret) { //meditLogs.Text = meditLogs.Text + "标签" + test_elelab_address.ToString() + "通信错误" + "\r\n"; addLog("标签" + test_elelab_address.ToString() + "通信错误"); // this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 elelab_test_error[test_elelab_address]++; } test_elelab_address++; if (test_elelab_address > test_elelab_stop) { test_elelab_address = test_elelab_start; PackageNum++; offset++; if (offset > 240) offset = 0; lbstate.Text = "发送包数" + PackageNum.ToString(); } } else if (SendMode == 0x12) { SendData.order = 0; SendData.ele_id = test_light_address; SendData.state = 1; ret = aa.write_test_device(SendData, offset); if (!ret) { // meditLogs.Text = meditLogs.Text + "巷灯" + test_light_address.ToString() + "通信错误" + "\r\n"; addLog("巷灯" + test_light_address.ToString() + "通信错误"); //this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 light_test_error[test_light_address - 5000]++; } test_light_address++; if (test_light_address > test_light_stop) { test_light_address = test_light_start; PackageNum++; offset++; if (offset > 240) offset = 0; lbstate.Text = "发送包数" + PackageNum.ToString(); } } else if (SendMode == 0x13) { if (SendSeq) { SendData.order = 0; SendData.ele_id = test_elelab_address; SendData.state = 1; ret = aa.write_test_device(SendData, offset); if (!ret) { // meditLogs.Text = meditLogs.Text + "标签" + test_elelab_address.ToString() + "通信错误" + "\r\n"; addLog("标签" + test_elelab_address.ToString() + "通信错误"); // this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 elelab_test_error[test_elelab_address]++; } test_elelab_address++; if (test_elelab_address > test_elelab_stop) { test_elelab_address = test_elelab_start; SendSeq = false; } } else { SendData.order = 0; SendData.ele_id = test_light_address; SendData.state = 1; ret = aa.write_test_device(SendData, offset); if (!ret) { // meditLogs.Text = meditLogs.Text + "巷灯" + test_light_address.ToString() + "通信错误" + "\r\n"; addLog("巷灯" + test_light_address.ToString() + "通信错误"); // this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 light_test_error[test_light_address - 5000]++; } test_light_address++; if (test_light_address > test_light_stop) { test_light_address = test_light_start; PackageNum++; offset++; if (offset > 240) offset = 0; lbstate.Text = "发送包数" + PackageNum.ToString(); SendSeq = true; } } } /* else if (aa.command_scan) { aa.command_scan = false; int tmp = (aa.command_test_buf[2] << 8) + aa.command_test_buf[3]; label45.Text = tmp.ToString() + ": "; for (int i = 0; i < aa.command_test_buf[6]; i++) { label45.Text += (char)aa.command_test_buf[7 + i]; } }*/ else if ((aa.command_test_kzq) && (flag_kzq_test == 1)) { aa.command_test_kzq = false; int i; for (i = 5; i < len_kzq_test + 5; i++) { if (aa.command_test_buf[i] != ((byte)(i + offset_kzq_test - 5))) { light_test_error[0]++; meditLogs.Text = meditLogs.Text + "*************错误发生***********" + PackageNum.ToString() + "\r\n"; // this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 break; } } if (i >= (len_kzq_test + 5)) { lbstate.Text = "发送包数" + PackageNum.ToString(); } offset_kzq_test++; if (offset_kzq_test == len_kzq_test) offset_kzq_test = 0; ret = aa.send_kzq_test(offset_kzq_test, len_kzq_test); if (!ret) { MessageBox.Show("测试控制器失败:" + offset_kzq_test.ToString()); } PackageNum++; } else if (aa.command_bz_ack > 0)//by dhwu 150122 修改lbstate显示 { if (aa.command_bz_ack == 1) { lbstate.Text = "数据发送成功,开始播种"; addLog("数据发送成功" + "\r\n"); } else if (aa.command_bz_ack == 4) { aa.command_bz_ack = 0; lbstate.Text = "数据部分发送成功,开始播种"; addLog("数据部分发送成功" + "\r\n"); addLog("数据部分发送成功"); } else if (aa.command_bz_ack == 5) lbstate.Text = "数据发送失败,开始播种"; else if (aa.command_bz_ack == 6) { aa.command_bz_ack = 0; lbstate.Text = "播种完毕"; addLog("播种完毕" + "\r\n"); if (test_count != count_bz) addLog("播种丢包"); } aa.command_bz_ack = 0; // this.meditLogs.Focus();//获取焦点 // this.meditLogs.Select(this.meditLogs.TextLength, 0);//光标定位到文本最后 this.meditLogs.ScrollToCaret();//滚动到光标处 } lbTranserror.Text = aa.crc_count.ToString(); } private void simpleButton11_Click(object sender, EventArgs e) { readDevice(0); } private void simpleButton3_Click(object sender, EventArgs e) { int startId = 0; //Convert.ToInt16(txtIDfrom.Text); int endId = 0;// Convert.ToInt16(txtIDto.Text); int newId = 0;//Convert.ToInt16(txtNewId.Text); try { startId = Convert.ToInt16(txtIDfrom.Text); endId = Convert.ToInt16(txtIDto.Text); newId = Convert.ToInt16(txtNewId.Text); if (endId < startId || newId <0 || endId >5500) { throw new Exception(); } } catch { addLog("请输入合法的ID"); return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show(String.Format("确定重新设定{0}--{1} ID为{2}吗?", startId, endId, newId), "重新设定ID", messButton); if (dr == DialogResult.OK) { dr = MessageBox.Show(String.Format("真的确定要重新设定ID吗?"), "重新设定ID", messButton); if (dr != DialogResult.OK) { return; } } else { return; } model.modify_id id; for (int i = startId; i <= endId; i++) { id.new_ele_id = newId;// Convert.ToInt16(new_id.Text); id.order = 1; id.old_ele_id = i;// Convert.ToInt16(ele_id.Text); id.state = 1; if (i >= 5000) //light { id.order = 0; aa.change_light_id(id); } else //label { aa.write_modify_id_comment(id); } System.Threading.Thread.Sleep(10); } } private void simpleButton4_Click(object sender, EventArgs e) { initialCom(); } private void btnReadDev_Click(object sender, EventArgs e) { bool ret; int version; int ElelabCnt, temp; //byte ddata1,ddata2,ddata3; byte[] ddata = new byte[20];//, ddata2, ddata3; float voltage; String ElelabID; model.dis_id id; if (txtID.Text == "") { MessageBox.Show("请输入设备ID"); return; } id.order = 0; id.ele_id = Convert.ToInt16(txtID.Text); id.state = 1; if ((id.ele_id < 0) || (id.ele_id > 7700)) { // MessageBox.Show("设备ID必须在0到5100之间"); return; } if (id.ele_id == 999) { id.ele_id = 0; } ret = aa.get_inf_device(id); if (!ret) { MessageBox.Show("读取设备信息失败"); } else { version = (aa.command_test_buf[5] << 8) + aa.command_test_buf[6]; if (id.ele_id >= 5000)//巷灯 { voltage = (aa.command_test_buf[7] << 8) + aa.command_test_buf[8]; voltage = (voltage * 5 * 11) / 1024; ElelabCnt = (aa.command_test_buf[9] << 8) + aa.command_test_buf[10]; if (ElelabCnt > 0) { ElelabID = "绑定标签ID:"; for (int i = 0; i < ElelabCnt; i++) { temp = (aa.command_test_buf[11 + i * 2] << 8) + aa.command_test_buf[12 + i * 2]; ElelabID = ElelabID + temp.ToString() + ","; } addLog("巷灯设备" + "\r\n" // + "版本:" + version.ToString() +/* "\r\n" + "输入电压:" + voltage.ToString("0.00") + */"\r\n" + "绑定标签数:" + ElelabCnt.ToString() + "\r\n" + ElelabID + "\r\n"); } else addLog("巷灯设备" + "\r\n" // + "版本:" + version.ToString() +/*"\r\n" + "输入电压:" + voltage.ToString("0.00") + */"\r\n" + "绑定标签数:" + ElelabCnt.ToString() + "\r\n"); } else if (id.ele_id == 0)//控制器 { /* ElelabCnt = (aa.command_test_buf[7] << 8) + aa.command_test_buf[8]; ddata[0] = aa.command_test_buf[9]; ddata[1] = aa.command_test_buf[10]; ddata[2] = aa.command_test_buf[11]; ddata[3] = aa.command_test_buf[12]; ddata[4] = aa.command_test_buf[13]; ddata[5] = aa.command_test_buf[14]; ddata[6] = aa.command_test_buf[15]; ddata[7] = aa.command_test_buf[16]; ddata[8] = aa.command_test_buf[17]; ddata[9] = aa.command_test_buf[18]; addLog("控制器设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "可用空间数:" + ElelabCnt.ToString() + "\r\n" + ddata[0].ToString() + ":" + ddata[1].ToString() + ":" + ddata[2].ToString() + ":" + ddata[3].ToString() + ":" + ddata[4].ToString() + ":" + ddata[5].ToString() + ":" + ddata[6].ToString() + ":" + ddata[7].ToString() + ":" + ddata[8].ToString() + ":" + ddata[9].ToString() + ":" + "\r\n"); * * */ int j = 0; int[] Month = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; ElelabCnt = (aa.command_test_buf[7] << 8) + aa.command_test_buf[8]; ddata[0] = aa.command_test_buf[9]; ddata[1] = aa.command_test_buf[10]; ddata[2] = aa.command_test_buf[11]; ddata[3] = (byte)((aa.command_test_buf[12] >> 4) * 10 + (aa.command_test_buf[12] & 0x0f));//year ddata[4] = (byte)((aa.command_test_buf[13] >> 4) * 10 + (aa.command_test_buf[13] & 0x0f));//month ddata[5] = (byte)((aa.command_test_buf[14] >> 4) * 10 + (aa.command_test_buf[14] & 0x0f));//date ddata[6] = (byte)((aa.command_test_buf[15] >> 4) * 10 + (aa.command_test_buf[15] & 0x0f));//hour ddata[7] = (byte)((aa.command_test_buf[16] >> 4) * 10 + (aa.command_test_buf[16] & 0x0f));//minutes ddata[8] = aa.command_test_buf[17];//power ddata[9] = aa.command_test_buf[18];//flag ddata[10] = aa.command_test_buf[19];//lock //start date temp = aa.command_test_buf[20] * 256 + aa.command_test_buf[21]; ddata[11] = (byte)(temp / 365);// temp = temp % 365; for ( j = 0; j < 12; j++) { if (Month[j] >= temp) break; } ddata[12] = (byte)(j);// if (j > 0) ddata[13] = (byte)(temp - Month[j - 1]);// else ddata[13] = 0; //end date temp = aa.command_test_buf[22] * 256 + aa.command_test_buf[23]; ddata[14] = (byte)(temp / 365);// temp = temp % 365; for (j = 0; j < 12; j++) { if (Month[j] >= temp) break; } ddata[15] = (byte)(j);// if (j > 0) ddata[16] = (byte)(temp - Month[j - 1]);// else ddata[16] = 0; addLog("控制器" + "\r\n" + // "版本:" + version.ToString() + "\r\n" + // "剩余空间数:" + ElelabCnt.ToString() + "\r\n" + // "调试:" + ddata[0].ToString() + ":" + ddata[1].ToString() + ":" + ddata[2].ToString() + "\r\n" + // "电源:" + ddata[8].ToString() + "\r\n" + "时间:" + ddata[6].ToString() + ":" + ddata[7].ToString() + "\r\n" + "锁死:" + ddata[9].ToString() + "\r\n" + "预锁:" + ddata[10].ToString() + "\r\n" + "开始日期:" + ddata[11].ToString() + ":" + ddata[12].ToString() + ":" + ddata[13].ToString() + "\r\n" + "日期:" + ddata[3].ToString() + ":" + ddata[4].ToString() + ":" + ddata[5].ToString() + "\r\n" + "结束日期:" + ddata[14].ToString() + ":" + ddata[15].ToString() + ":" + ddata[16].ToString()); } else if (aa.command_test_buf[8] == 0) //扫描枪 { MessageBox.Show("扫描枪设备" + "\r\n" + "版本:" + version.ToString()); } else if (aa.command_test_buf[8] == 0xaa)//标签 { version = aa.command_test_buf[5]; addLog("标签设备" + "\r\n" + "版本:" + version.ToString() + "\r\n" + "可用空间数:" + aa.command_test_buf[7].ToString() + "\r\n"); } } } public struct YMD { public byte YearS; public byte MonthS; public byte DateS; public byte YearE; public byte MonthE; public byte DateE; } string Encrypt(string password) { Byte[] clearBytes = new UnicodeEncoding().GetBytes(password); Byte[] hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes); return BitConverter.ToString(hashedBytes); } YMD Release; string pd = "12-5F-3C-6F-DA-2E-D3-00-81-A0-E5-B9-DA-AB-67-C6"; private void simpleButton2_Click_1(object sender, EventArgs e) { string str = txtcode.Text;// Interaction.InputBox("??", "??", "", -1, -1); txtcode.Text = ""; byte[] tempbuf = new byte[12]; int temp1, temp2; int[] Month = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; string estr = Encrypt(str); if (estr != pd) { MessageBox.Show("输入错误!!"); return; } Release.YearS = (byte)(dateTimePicker1.DateTime.Year % 2000); Release.MonthS = (byte)dateTimePicker1.DateTime.Month; Release.DateS = (byte)dateTimePicker1.DateTime.Day; Release.YearE = (byte)(dateTimePicker2.DateTime.Year % 2000); Release.MonthE = (byte)dateTimePicker2.DateTime.Month; Release.DateE = (byte)dateTimePicker2.DateTime.Day; temp1 = Release.YearS * 365 + Month[Release.MonthS - 1] + Release.DateS; temp2 = Release.YearE * 365 + Month[Release.MonthE - 1] + Release.DateE; if (temp2 > temp1) { tempbuf[0] = (byte)(temp1 / 256); tempbuf[1] = (byte)(temp1 % 256); tempbuf[2] = (byte)(temp2 / 256); tempbuf[3] = (byte)(temp2 % 256); if (aa.write_lock(tempbuf, 4)) { MessageBox.Show("??成功"); } else MessageBox.Show("??失败"); } else { MessageBox.Show("请选择正确的日期"); } } private void simpleButton5_Click(object sender, EventArgs e) { string str = txtcode.Text;// Interaction.InputBox("???", "???", "", -1, -1); txtcode.Text = ""; string estr=Encrypt(str); if (estr !=pd ) { MessageBox.Show("输入错误!!"); return; } if (aa.write_unlock()) { MessageBox.Show("成功"); } else MessageBox.Show("失败"); } private void basicFuncs_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); } private void chkClearOrder_CheckedChanged(object sender, EventArgs e) { } private void combLbColor_SelectedIndexChanged(object sender, EventArgs e) { } private void btnCloseLight_Click(object sender, EventArgs e) { int temp = 0; if (this.txtChID21.Text == "") { MessageBox.Show("请输入巷灯ID,在5000到5500之间"); return; } else { try { temp = Convert.ToInt16(txtChID21.Text); if ((temp > MAX_LIGHT_NUM) || (temp < 5000)) { MessageBox.Show("巷灯ID必须在5000到5500之间"); return; } } catch { MessageBox.Show("巷灯ID必须在5000到5500之间"); return; } } byte led_rgb = getLedColor(); model.close_channel_led id; id.channel_id = temp; id.config_word = led_rgb; id.state = 1; aa.write_close_channel_led(id);//write_config_channel_led } /* // update driver //升级标签程序 dn_wms.model.updt_id sendUpdateData; byte BOOTLDR_CONNECT = 1; byte BOOTLDR_SEND_FLASH = 2; byte BOOTLDR_SEND_EEPROM = 3; byte BOOTLDR_GET_STATE = 4; byte BOOTLDR_COMPLETE = 5; String szEepPath = ""; String szHexPath = ""; String szBinPath = ""; private void btnUpdateLable_Click(object sender, EventArgs e) { int i; int j = 0; byte[] tempbuf = new byte[128 + 7]; ushort verify = 0; byte packageNo = 0; int packageNoHex = 0; String szLine = ""; String szHex = ""; if (szHexPath == "") { MessageBox.Show("请选择需要转换的hex文件! ", "错误"); return; } if (this.chklbeep.Checked == true)//update eeprom { if (szEepPath == "") { MessageBox.Show("请选择需要转换的eep文件! ", "错误"); return; } } //读取bin文件 using (FileStream fsbin = File.OpenRead(szHexPath)) { int Length = (int)fsbin.Length; byte[] szBin = new byte[Length + 128]; while (fsbin.Read(szBin, 0, szBin.Length) > 0) { ; } fsbin.Close(); //关闭目标文件 for (i = 0; i < szBin.Length; i += 3) { szBin[i] = (byte)(szBin[i] ^ 0x5a); } try { test_elelab_start = Convert.ToInt16(txtlbID31.Text); test_elelab_stop = Convert.ToInt16(txtlbID32.Text); } catch { MessageBox.Show("输入的地址错误"); SendMode = 0; return; } test_elelab_address = test_elelab_start; test_light_address = test_light_start; if ((test_elelab_start > test_elelab_stop) || (test_elelab_stop > 999))//vy dhwu 141107 { MessageBox.Show("输入的结束ID必须大于等于起始ID,且小于999"); SendMode = 0; } else { SendData.order = 0; sendUpdateData.order = 0; addLog("开始升级标签"); //复位,并建立连接,单播 for (i = test_elelab_start; i <= test_elelab_stop; i++) { SendData.ele_id = i; SendData.state = 0; aa.write_reset_device(SendData); System.Threading.Thread.Sleep(150); sendUpdateData.ele_id = i; sendUpdateData.state = 1; if (aa.write_update_command(sendUpdateData, BOOTLDR_CONNECT) == false) { System.Threading.Thread.Sleep(10); if (aa.write_update_command(sendUpdateData, BOOTLDR_CONNECT) == false) { addLog("标签" + i.ToString() + "建立连接失败"); } } System.Threading.Thread.Sleep(10); } packageNoHex = Length / 128; if ((Length % 128) > 0) packageNoHex += 1; for (j = 0; j < Length; j += 128) { //发送数据,广播 sendUpdateData.ele_id = 0xffff; sendUpdateData.state = 0; tempbuf[5] = packageNo++; for (i = 0; i < 128; i++) { tempbuf[i + 6] = szBin[j + i]; verify += szBin[j + i]; } if (aa.write_update_data(sendUpdateData, BOOTLDR_SEND_FLASH, tempbuf, tempbuf.Length) == false) { addLog("数据包" + packageNo.ToString() + "发控制器数据失败"); } else { addLog("数据包" + packageNo.ToString() + "/" + packageNoHex.ToString()); Application.DoEvents(); } //读取一包状态,单播 for (i = test_elelab_start; i <= test_elelab_stop; i++) { sendUpdateData.ele_id = i; sendUpdateData.state = 1; if ((aa.write_update_command(sendUpdateData, BOOTLDR_GET_STATE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("标签" + i.ToString() + "接收数据包" + packageNo.ToString() + "失败"); } } } } } if (chklbeep.Checked)//update eeprom { String szEep = ""; //读取eep文件 StreamReader EepReader = new StreamReader(szEepPath, Encoding.Default); while (true) { szLine = EepReader.ReadLine(); //读取一行数据 if (szLine == null) //读完所有行 { break; } if (szLine.Substring(0, 1) == ":") //判断第1字符是否是: { if (szLine.Substring(1, 8) == "00000001")//数据结束 { break; } szEep += szLine.Substring(9, szLine.Length - 11); //读取有效字符 } } EepReader.Close(); //关闭目标文件 j = 0; int LengthEep = szEep.Length; byte[] szBinEep = new byte[LengthEep]; for (i = 0; i < LengthEep; i += 2) //两字符合并成一个16进制字节 { szBinEep[j] = (byte)Int16.Parse(szEep.Substring(i, 2), NumberStyles.HexNumber); j++; } j = 0; LengthEep /= 2; int len; int packageNoEep; packageNoEep = LengthEep / 128; if ((LengthEep % 128) > 0) packageNoEep += 1; do { //发送数据,广播 sendUpdateData.ele_id = 0xffff; sendUpdateData.state = 0; tempbuf[5] = packageNo++; ; if ((j + 128) < LengthEep) { for (i = 0; i < 128; i++) { tempbuf[i + 6] = szBinEep[j + i]; verify += szBinEep[j + i]; } j += 128; len = 128 + 7; } else { for (i = 0; i < (LengthEep - j); i++) { tempbuf[i + 6] = szBinEep[j + i]; verify += szBinEep[j + i]; } len = LengthEep - j + 7; j = LengthEep; } if (aa.write_update_data(sendUpdateData, BOOTLDR_SEND_EEPROM, tempbuf, len) == false) { addLog("数据包" + packageNo.ToString() + "发控制器E数据失败"); } else { addLog("数据包" + (packageNo - packageNoHex).ToString() + "/" + packageNoEep.ToString()); Application.DoEvents(); } //读取一包状态,单播 System.Threading.Thread.Sleep(300); for (i = test_elelab_start; i <= test_elelab_stop; i++) { sendUpdateData.ele_id = i; sendUpdateData.state = 1; if ((aa.write_update_command(sendUpdateData, BOOTLDR_GET_STATE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("标签" + i.ToString() + "接收E数据包" + packageNo.ToString() + "失败"); } } } while (j < LengthEep); } //发送完成,读取状态,单播 for (i = test_elelab_start; i <= test_elelab_stop; i++) { sendUpdateData.ele_id = i; sendUpdateData.state = 1; sendUpdateData.verify = verify; if ((aa.write_update_complete(sendUpdateData, BOOTLDR_COMPLETE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("标签" + i.ToString() + "升级失败"); } else { addLog("标签" + i.ToString() + "升级成功"); } } szBinPath = ""; szEepPath = ""; } private void simpleButton18_Click(object sender, EventArgs e) { OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Multiselect = true; fileDialog.Title = "请选择文件"; fileDialog.Filter = "所有文件(*.bin)|*.bin"; if (fileDialog.ShowDialog() == DialogResult.OK) { szBinPath = fileDialog.FileName; addLog(string.Format("打开bin文件 {0}", szBinPath)); } } private void btnEep_Click(object sender, EventArgs e) { OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Multiselect = true; fileDialog.Title = "请选择文件"; fileDialog.Filter = "所有文件(*.eep)|*.eep"; if (fileDialog.ShowDialog() == DialogResult.OK) { szEepPath = fileDialog.FileName; addLog(string.Format("打开eep文件 {0}", szEepPath)); } } private void btnUpdateChannel_Click(object sender, EventArgs e) { int i; int j = 0; byte[] tempbuf = new byte[128 + 7]; ushort verify = 0; byte packageNo = 0; int packageNoHex = 0; String szLine = ""; String szHex = ""; if (szHexPath == "") { MessageBox.Show("请选择需要转换的hex文件! ", "错误"); return; } if (this.chklighteep.Checked)//update eeprom { if (szEepPath == "") { MessageBox.Show("请选择需要转换的eep文件! ", "错误"); return; } } //读取bin文件 using (FileStream fsbin = File.OpenRead(szHexPath)) { int Length = (int)fsbin.Length; byte[] szBin = new byte[Length + 128]; while (fsbin.Read(szBin, 0, szBin.Length) > 0) { ; } fsbin.Close(); //关闭目标文件 for (i = 0; i < szBin.Length; i += 3) { szBin[i] = (byte)(szBin[i] ^ 0x5a); } try { test_light_start = Convert.ToInt16(this.txtChID31.Text); test_light_stop = Convert.ToInt16(txtChID31.Text); } catch { MessageBox.Show("输入的地址错误"); SendMode = 0; return; } test_elelab_address = test_elelab_start; test_light_address = test_light_start; if ((test_light_start > test_light_stop) || (test_light_start < 5000) || (test_light_stop > MAX_LIGHT_NUM)) { MessageBox.Show("输入的结束ID必须大于等于起始ID,且必须在5000到5100之间"); SendMode = 0; } else { SendData.order = 0; sendUpdateData.order = 0; addLog("开始升级通道灯"); //复位,并建立连接,单播 for (i = test_light_start; i <= test_light_stop; i++) { SendData.ele_id = i; SendData.state = 0; aa.write_reset_device(SendData); System.Threading.Thread.Sleep(150); sendUpdateData.ele_id = i; sendUpdateData.state = 1; if (aa.write_update_command(sendUpdateData, BOOTLDR_CONNECT) == false) { System.Threading.Thread.Sleep(10); if (aa.write_update_command(sendUpdateData, BOOTLDR_CONNECT) == false) { addLog("通道灯" + i.ToString() + "建立连接失败"); } } System.Threading.Thread.Sleep(10); } packageNoHex = Length / 128; if ((Length % 128) > 0) packageNoHex += 1; for (j = 0; j < Length; j += 128) { //发送数据,广播 sendUpdateData.ele_id = 0xffff; sendUpdateData.state = 0; tempbuf[5] = packageNo++; for (i = 0; i < 128; i++) { tempbuf[i + 6] = szBin[j + i]; verify += szBin[j + i]; } if (aa.write_update_data(sendUpdateData, BOOTLDR_SEND_FLASH, tempbuf, tempbuf.Length) == false) { addLog("数据包" + packageNo.ToString() + "发控制器数据失败"); } else { addLog("数据包" + packageNo.ToString() + "/" + packageNoHex.ToString()); Application.DoEvents(); } //读取一包状态,单播 for (i = test_light_start; i <= test_light_stop; i++) { sendUpdateData.ele_id = i; sendUpdateData.state = 1; if ((aa.write_update_command(sendUpdateData, BOOTLDR_GET_STATE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("通道灯" + i.ToString() + "接收数据包" + packageNo.ToString() + "失败"); } } } } } if (chklighteep.Checked)//update eeprom { String szEep = ""; //读取eep文件 StreamReader EepReader = new StreamReader(szEepPath, Encoding.Default); while (true) { szLine = EepReader.ReadLine(); //读取一行数据 if (szLine == null) //读完所有行 { break; } if (szLine.Substring(0, 1) == ":") //判断第1字符是否是: { if (szLine.Substring(1, 8) == "00000001")//数据结束 { break; } szEep += szLine.Substring(9, szLine.Length - 11); //读取有效字符 } } EepReader.Close(); //关闭目标文件 j = 0; int LengthEep = szEep.Length; byte[] szBinEep = new byte[LengthEep]; for (i = 0; i < LengthEep; i += 2) //两字符合并成一个16进制字节 { szBinEep[j] = (byte)Int16.Parse(szEep.Substring(i, 2), NumberStyles.HexNumber); j++; } j = 0; LengthEep /= 2; int len; int packageNoEep; packageNoEep = LengthEep / 128; if ((LengthEep % 128) > 0) packageNoEep += 1; do { //发送数据,广播 sendUpdateData.ele_id = 0xffff; sendUpdateData.state = 0; tempbuf[5] = packageNo++; ; if ((j + 128) < LengthEep) { for (i = 0; i < 128; i++) { tempbuf[i + 6] = szBinEep[j + i]; verify += szBinEep[j + i]; } j += 128; len = 128 + 7; } else { for (i = 0; i < (LengthEep - j); i++) { tempbuf[i + 6] = szBinEep[j + i]; verify += szBinEep[j + i]; } len = LengthEep - j + 7; j = LengthEep; } if (aa.write_update_data(sendUpdateData, BOOTLDR_SEND_EEPROM, tempbuf, len) == false) { addLog("数据包" + packageNo.ToString() + "发控制器E数据失败"); } else { addLog("数据包" + (packageNo - packageNoHex).ToString() + "/" + packageNoEep.ToString()); Application.DoEvents(); } //读取一包状态,单播 System.Threading.Thread.Sleep(300); for (i = test_light_start; i <= test_light_stop; i++) { sendUpdateData.ele_id = i; sendUpdateData.state = 1; if ((aa.write_update_command(sendUpdateData, BOOTLDR_GET_STATE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("通道灯" + i.ToString() + "接收E数据包" + packageNo.ToString() + "失败"); } } } while (j < LengthEep); } //发送完成,读取状态,单播 for (i = test_light_start; i <= test_light_stop; i++) { sendUpdateData.ele_id = i; sendUpdateData.state = 1; sendUpdateData.verify = verify; if ((aa.write_update_complete(sendUpdateData, BOOTLDR_COMPLETE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("通道灯" + i.ToString() + "升级失败"); } else { addLog("通道灯" + i.ToString() + "升级成功"); } }//for szBinPath = ""; szEepPath = ""; } private void btnUpDateControl_Click(object sender, EventArgs e) { int i; if (szHexPath == "") { MessageBox.Show("请选择需要转换的bin文件! ", "错误"); return; } //读取bin文件 using (FileStream fsbin = File.OpenRead(szHexPath)) { int Length = (int)fsbin.Length; byte[] szBin = new byte[Length + 128]; while (fsbin.Read(szBin, 0, szBin.Length) > 0) { ; } fsbin.Close(); //关闭目标文件 for (i = 0; i < szBin.Length; i += 3) { szBin[i] = (byte)(szBin[i] ^ 0x5a); } if (SendMode == 0) { SendData.order = 0; sendUpdateData.order = 0; addLog("开始升级控制器"); //复位,并建立连接,单播 SendData.ele_id = 0; SendData.state = 0; aa.write_reset_device(SendData); System.Threading.Thread.Sleep(100); sendUpdateData.ele_id = 0; sendUpdateData.state = 1; if (aa.write_update_command(sendUpdateData, BOOTLDR_CONNECT) == false) { addLog("控制器" + "建立连接失败"); } int j = 0; byte[] tempbuf = new byte[128 + 7]; ushort verify = 0; byte packageNo = 0; int packageNoHex = Length / 128; if ((Length % 128) > 0) packageNoHex += 1; for (j = 0; j < Length; j += 128) { //发送数据,广播 sendUpdateData.ele_id = 0; sendUpdateData.state = 0; tempbuf[5] = packageNo++; for (i = 0; i < 128; i++) { tempbuf[i + 6] = szBin[j + i]; verify += szBin[j + i]; } if (aa.write_updatekzq_data(sendUpdateData, BOOTLDR_SEND_FLASH, tempbuf, tempbuf.Length) == false) { addLog("数据包" + packageNo.ToString() + "发控制器数据失败"); } else { addLog("数据包" + packageNo.ToString() + "/" + packageNoHex.ToString()); Application.DoEvents(); } System.Threading.Thread.Sleep(100); //读取一包状态,单播 sendUpdateData.ele_id = 0; sendUpdateData.state = 1; if ((aa.write_update_command(sendUpdateData, BOOTLDR_GET_STATE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("控制器" + "接收数据包失败"); } } //发送完成,读取状态,单播 sendUpdateData.ele_id = 0; sendUpdateData.state = 1; sendUpdateData.verify = verify; if ((aa.write_update_complete(sendUpdateData, BOOTLDR_COMPLETE) == false) || (aa.command_test_buf[7] != packageNo)) { addLog("控制器" + "升级失败"); } else { addLog("控制器" + "升级成功"); } } } } */ } }