//同步地址信息 private void ImportAddrInfo_Click(object sender, EventArgs e) { ExcelImport el = new ExcelImport(true, "安装位置"); DataTable dt = el.ExcelImportProc_OleDB(); if (dt == null || dt.Rows.Count != 104) { MessageBox.Show("地址数据文件格式有问题,请检查!"); return; } enBT(false); int areaLen = 64; int addrInfoLen = areaLen + 100 * 2; byte[] addrInfo = new byte[addrInfoLen]; for (int i = 0; i < addrInfoLen; i++) { addrInfo[i] = 0; } //设备安装小区 string strInstallArea = dt.Rows[2][1].ToString(); Debug.WriteLine("设备安装小区:" + strInstallArea); byte[] byteInstallArea = Encoding.Default.GetBytes(strInstallArea); if (byteInstallArea.Length >= areaLen) { for (int i = 0; i < areaLen; i++) { addrInfo[i] = byteInstallArea[i]; } } else { for (int i = 0; i < byteInstallArea.Length; i++) { addrInfo[i] = byteInstallArea[i]; } } //栋单元信息处理 byte dong, danyuan; for (int i = 0; i < 100; i++) { Debug.WriteLine("传感器" + (i + 1).ToString() + ":" + dt.Rows[4 + i][1].ToString() + "-" + dt.Rows[4 + i][2].ToString()); if (!byte.TryParse(dt.Rows[4 + i][1].ToString(), out dong)) { MessageBox.Show("单元格B" + (i + 5).ToString() + "内容输入有问题,只能输入0-200的数字"); return; } if (!byte.TryParse(dt.Rows[4 + i][2].ToString(), out danyuan)) { MessageBox.Show("单元格C" + (i + 5).ToString() + "内容输入有问题,只能输入0-200的数字"); return; } addrInfo[areaLen + i * 2] = dong; addrInfo[areaLen + i * 2 + 1] = danyuan; } byte[] tx = CP1616Packet.MakeCP1616Packet(3, 1, addrInfo); int retry = 20; Rx1616 = new CP1616Packet(3, 1); bool bOK = false; while (retry != 0) { WaitMS(100); try { COMPort1.Write(tx, 0, tx.Length); } catch { retry--; continue; } while (true) { try { if (Rx1616.DataPacketed((byte)COMPort1.ReadByte())) { bOK = true; break; } } catch { break; } } if (bOK) { break; } retry--; } if (retry == 0) { MessageBox.Show("地址数据导入失败,请重试!"); enBT(true); } else { MessageBox.Show("地址数据导入完成!"); enBT(true); } }
private void button2_Click(object sender, EventArgs e) { ExcelImport el = new ExcelImport(true, "安装位置"); DataTable dt = el.ExcelImportProc_OleDB(); if (dt == null || dt.Rows.Count < 100 || dt.Columns.Count < 2) { MessageBox.Show("地址数据文件格式有问题,请检查!"); return; } enBT(false); byte[] tx; byte[] temp; byte[] temp1; progressBar1.Value = 0; for (int i = 0; i < 100; i++) { temp = Encoding.Default.GetBytes(dt.Rows[i][1].ToString()); Debug.WriteLine(dt.Rows[i][1].ToString()); if (temp.Length > 20) { temp1 = new byte[23]; temp1[0] = (byte)(i); temp1[1] = 21; temp1[22] = 0; for (int j = 0; j < 20; j++) { temp1[j + 2] = temp[j]; } tx = CP1616Packet.MakeCP1616Packet(3, 1, temp1); } else { temp1 = new byte[3 + temp.Length]; temp1[0] = (byte)(i); temp1[1] = (byte)(temp.Length + 1); temp1[2 + temp.Length] = 0; for (int j = 0; j < temp.Length; j++) { temp1[j + 2] = temp[j]; } tx = CP1616Packet.MakeCP1616Packet(3, 1, temp1); } int retry = 20; Rx1616 = new CP1616Packet(3, 1); bool bOK = false; while (retry != 0) { WaitMS(100); try { COMPort1.Write(tx, 0, tx.Length); } catch { retry--; continue; } while (true) { try { if (Rx1616.DataPacketed((byte)COMPort1.ReadByte())) { bOK = true; break; } } catch { break; } } if (bOK) { progressBar1.Value++; break; } retry--; } if (retry == 0) { MessageBox.Show("第" + (i + 1).ToString() + "个传感器地址设置出错!"); break; } } MessageBox.Show("地址数据导入完成!"); enBT(true); }