void Analysis_data(ref UCHR[] fxfdz, ref UCHR h, ref UCHR m, ref UCHR[] buffer, ref UINT package_length) { UINT crc = 0, crc1 = 0; UINT length, length1; if (buffer[package_length - 1] != 0x16) { return; } else if (buffer[0] == 0x11) { length1 = length = ((UINT)buffer[1] << 8) + (UINT)buffer[2]; crc = Convert.ToUInt32(((((UINT)buffer[length + 1]) << 8) & 0xff00) + (buffer[length + 2] & 0x00ff)); if (length1 < package_length) { for (; length1 > 0; length1--) { crc1 += buffer[length1]; } if (crc == crc1) { UINT _LENGTH = length - 2; UCHR[] exdata = new UCHR[_LENGTH]; System.Buffer.BlockCopy(buffer, 3, exdata, 0, Convert.ToInt32(_LENGTH)); DATA_Handler(ref fxfdz, ref h, ref m, ref exdata, ref _LENGTH); } } } }
void TXSQ_send(UCHR[] buffer, UINT len, UCHR[] dis) { UINT lenth = BD_TXSQ.lenth + len, i = 0;; // UCHR[] sendbuffer = Encoding.Default.GetBytes("$TXSQ0?00000?");//最多只能发送210字节,这张卡是628bit UCHR[] sendbuffer = new UCHR[lenth]; sendbuffer[0] = (byte)'$'; sendbuffer[1] = (byte)'T'; sendbuffer[2] = (byte)'X'; sendbuffer[3] = (byte)'S'; sendbuffer[4] = (byte)'Q'; sendbuffer[5] = Convert.ToByte(lenth >> 8); sendbuffer[6] = Convert.ToByte(lenth & 0xff); sendbuffer[7] = icxx.yhdz[0]; sendbuffer[8] = icxx.yhdz[1]; sendbuffer[9] = icxx.yhdz[2]; sendbuffer[10] = 0B01000110; sendbuffer[11] = dis[0]; sendbuffer[12] = dis[1]; sendbuffer[13] = dis[2]; sendbuffer[14] = Convert.ToByte((len * 8) >> 8); sendbuffer[15] = Convert.ToByte((len * 8) & 0xff); sendbuffer[16] = 0; for (; i < len; ++i) { sendbuffer[17 + i] = buffer[i]; } sendbuffer[lenth - 1] = Xor_checksum(ref sendbuffer, lenth - 1); mycom.Send(sendbuffer); }
/* * 对于有符号参数,第 1 位符号位统一规定为“0”表示“+”, * “1”表示“-”,其后位数为参数值,用原码表示。 */ public int UCHRtoINT(UCHR a, UCHR b) { int result = 0, flag = 0; if ((a & 0x80) != 0) { flag = -1; } else { flag = 1; } for (int i = 0; i < 7; ++i) { if ((a & (1 << i)) != 0) { result |= (1 << (i + 8)); } } for (int i = 0; i < 8; ++i) { if ((b & (1 << i)) != 0) { result |= (1 << i); } } return(result * flag); }
void Handle_FXXX() { if (fkxx.flbz == 4)//发射频度未到 { SEND_BLOCKTIME = fkxx.fjxx[3]; } if (fkxx.flbz == 0) { SEND_BLOCKTIME = 60; } }
/* * 发送用 * 异或校验和算法 */ UCHR Xor_checksum(ref UCHR[] buf, UINT len) { UINT i; UCHR checksum = 0; for (i = 0; i < len; ++i) { checksum ^= buf[i]; } return(checksum); }
public void BD_send(ref UCHR[] buffer, UINT len, UCHR[] dis) { if (len > 0)//BSGL != 0 && error_flag == 0 &&SEND_BLOCKTIME == 0 && { UCHR[] send_buffer; send_buffer = new UCHR[len + DATA_FIRM_LENTH]; TXSQ_send(Data_encapsulation(send_buffer, ref buffer, ref len), len + DATA_FIRM_LENTH, dis); } else { } }
/* * 接收用 * 异或校验和算法 */ UCHR Xor_checksum(ref UCHR[] buf, UINT location, UINT len) { UINT i, ii; UCHR checksum = 0; for (i = 0; i < len; ++i) { ii = (location + i) & RE_BUFFER_SIZE; checksum ^= buf[ii]; } return(checksum); }
void XTZJ_send() { UCHR[] sendbuffer = new UCHR[13]; // UCHR []sendbuffer= Encoding.Default.GetBytes("$XTZJ0?00000?"); sendbuffer[0] = (byte)'$'; sendbuffer[1] = (byte)'X'; sendbuffer[2] = (byte)'T'; sendbuffer[3] = (byte)'Z'; sendbuffer[4] = (byte)'J'; sendbuffer[5] = 0; sendbuffer[6] = Convert.ToByte(BD_XTZJ.lenth); sendbuffer[7] = icxx.yhdz[0]; sendbuffer[8] = icxx.yhdz[1]; sendbuffer[9] = icxx.yhdz[2]; sendbuffer[10] = Convert.ToByte((UINT)BD_PRINT_TIME_SEQ >> 8); sendbuffer[11] = Convert.ToByte((UINT)BD_PRINT_TIME_SEQ & 0xff); sendbuffer[12] = Xor_checksum(ref sendbuffer, 12); mycom.Send(sendbuffer); }
void Handle_ZJXX() { if ((zjxx.iczt != 0) || (zjxx.yjzt != 0) || (zjxx.rzzt != 0x02)) { error_flag = 1; } else { error_flag = 0; } for (int i = 0; i < 6; ++i) { if (zjxx.bsgl[i] != 0) { BSGL |= Convert.ToByte((1 << i) & 0xff); } else { BSGL &= Convert.ToByte((~(1 << i)) & 0xff); } } }
private void Button_Click(object sender, RoutedEventArgs e) { try { if (e.Source is Button) { if (!isfirstrun) { int id = Convert.ToInt32(cbb_id.SelectedItem); //MessageBox.Show(cbb_zlgn.Text); if (cbb_zlgn.Text.Equals("重启")) { byte[] aaa = new byte[1]; UCHR[] _id = new UCHR[3]; _id[0] = Convert.ToByte((id >> 16) & 0xff); _id[1] = Convert.ToByte((id >> 8) & 0xff); _id[2] = Convert.ToByte(id & 0xff); aaa[0] = 1; bdxx.BD_send(ref aaa, (UINT)(1), _id); } if (cbb_zlgn.Text.Equals("蜂鸣一秒")) { byte[] aaa = new byte[1]; UCHR[] _id = new UCHR[3]; _id[0] = Convert.ToByte((id >> 16) & 0xff); _id[1] = Convert.ToByte((id >> 8) & 0xff); _id[2] = Convert.ToByte(id & 0xff); aaa[0] = 2; bdxx.BD_send(ref aaa, (UINT)(1), _id); } } } } catch (Exception ex) { WriteLog.WriteError(ex); } }
void DATA_Handler(ref UCHR[] fxfdz, ref UCHR h, ref UCHR m, ref UCHR[] data, ref UINT lenth) { //TODO int ex_i = 0; if (data[0] == 1) { ex_i = 4; } int id = (fxfdz[0] << 16) | (fxfdz[1] << 8) | fxfdz[2]; float temp = (float)(data[ex_i + 1] / 1.0); if (data[ex_i + 2] < 10) { temp += (float)(data[ex_i + 2] / 10.0); } else { temp += (float)(data[ex_i + 2] / 100.0); } float humi = (float)(data[ex_i + 3] / 1.0); if (data[ex_i + 4] < 10) { humi += (float)(data[ex_i + 4] / 10.0); } else { humi += (float)(data[ex_i + 4] / 100.0); } float mq135 = (float)(((Convert.ToUInt16(data[ex_i + 5]) << 8) | data[ex_i + 6]) / 10000.0); char jdfw = (data[ex_i + 11] & 0x80) == 1 ? 'W' : 'E'; char wdfw = (data[ex_i + 8] & 0x80) == 1 ? 'S' : 'N'; data[ex_i + 11] &= 0x7F; data[ex_i + 8] &= 0x7F; DateTime time = new DateTime(Convert.ToInt32(gntx.year), gntx.month, gntx.day, gntx.hour, gntx.minute, gntx.second); if (!MyDataBase.CheckBDID_exist(id))//检查ID存不存在,存在则更新 { if (data[0] == 1) { MyDataBase.Insertidcard(id, time, data[1], data[2], data[3], data[4]); } else { MyDataBase.Insertidcard(id, time); } if (!MyDataBase.IsTableExist("UserID_" + Convert.ToString(id) + "_Data"))//检查数据表存不存在,不存在则创建 { if (!MyDataBase.New_tb_for_id_data(id)) { MessageBox.Show("", "建表失败", MessageBoxButtons.OK, MessageBoxIcon.Error); } } if (!MyDataBase.CheckAlarm_isexist(id))//检查Alarm表ID存不存在 { MyDataBase.Insertid_ToAlarm(id); } } else { if (data[0] == 1) { MyDataBase.Updateidcard(id, time, data[1], data[2], data[3], data[4]); } else { MyDataBase.Updateidcard(id, time); } } if (BaiduAPI.Geocoding_API(Convert.ToString((data[ex_i + 9] / 60.0 + data[ex_i + 8]) / 60.0 + data[ex_i + 7]), Convert.ToString((data[ex_i + 12] / 60.0 + data[ex_i + 11]) / 60.0 + data[ex_i + 10]), ref temp_addr) == true) { if (!MyDataBase.InsertData(id, temp, humi, mq135, data[ex_i + 7], data[ex_i + 8], data[ex_i + 9], data[ex_i + 10], data[ex_i + 11], data[ex_i + 12], wdfw, jdfw, time, temp_addr)) { MessageBox.Show("", "插入失败", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { if (!MyDataBase.InsertData(id, temp, humi, mq135, data[ex_i + 7], data[ex_i + 8], data[ex_i + 9], data[ex_i + 10], data[ex_i + 11], data[ex_i + 12], wdfw, jdfw, time, "")) { MessageBox.Show("", "插入失败", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
public UINT UCHRtoUINT(UCHR a, UCHR b) { return((UINT)a * 256 + (UINT)b); }
//void Thread_Extract(object source, System.Timers.ElapsedEventArgs e) //{ // Receive_Protocol(); //} //void Thread_Check(object source, System.Timers.ElapsedEventArgs e) //{ // Check_status(); // if (SEND_BLOCKTIME != 0) // { // --SEND_BLOCKTIME; // print_flag |= PRINT_BLOCK; // } //} public void Check_status() { //UINT check_status_count = 0; if (check_status_count >= 10) { check_status_count = 0; MessageBox.Show("check_status_count=" + check_status_count, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); status &= 0; status |= STATUS_BIT_ANSWER; } if ((status & STATUS_BIT_ANSWER) != 0)//有回复 { check_status_count = 0; switch (status & ~STATUS_BIT_ANSWER)//检查确认位 { case (STEP_NONE | STATUS_BIT_NO_CONFIRM): status = (byte)((STEP_NONE + 1) | STATUS_BIT_ANSWER); //初始化 break; case (STEP_ICJC | STATUS_BIT_CONFIRM): status = (byte)((STEP_ICJC + 1) | STATUS_BIT_ANSWER); break; case (STEP_ICJC | STATUS_BIT_NO_CONFIRM): status = (byte)((STEP_NONE + 1) | STATUS_BIT_ANSWER); break; case (STEP_GNPS | STATUS_BIT_CONFIRM): status = (byte)((STEP_GNPS + 1) | STATUS_BIT_ANSWER); break; case (STEP_GNPS | STATUS_BIT_NO_CONFIRM): status = (byte)((STEP_NONE + 1) | STATUS_BIT_ANSWER); break; case (STEP_GNVS | STATUS_BIT_CONFIRM): status = (byte)((STEP_GNVS + 1) | STATUS_BIT_ANSWER); break; case (STEP_GNVS | STATUS_BIT_NO_CONFIRM): status = (byte)((STEP_NONE + 1) | STATUS_BIT_ANSWER); break; case (STEP_GNTS | STATUS_BIT_CONFIRM): status = (byte)((STEP_GNTS + 1) | STATUS_BIT_ANSWER); break; case (STEP_GNTS | STATUS_BIT_NO_CONFIRM): status = (byte)((STEP_NONE + 1) | STATUS_BIT_ANSWER); break; case (STEP_XJZJ | STATUS_BIT_CONFIRM): status = (byte)((STEP_XJZJ + 1) | STATUS_BIT_ANSWER); break; case (STEP_XJZJ | STATUS_BIT_NO_CONFIRM): status = (byte)((STEP_NONE + 1) | STATUS_BIT_ANSWER); break; case (STEP_SJSC | STATUS_BIT_CONFIRM): status = (byte)((STEP_SJSC + 1) | STATUS_BIT_ANSWER); //就绪 break; case (STEP_SJSC | STATUS_BIT_NO_CONFIRM): status = (byte)((STEP_NONE + 1) | STATUS_BIT_ANSWER); break; default: //byte[] aaa = new byte[255]; //byte[] id = { 0x04, 0x7c, 0x66 }; //for (int i = 0; i < 10; ++i) //{ // aaa[i] = (byte)(i + 0x30); //} //this.BD_send(ref aaa, (UINT)(10), id); break; } } if ((status & (STATUS_BIT_STEP | STATUS_BIT_ANSWER)) == (STEP_ICJC | STATUS_BIT_ANSWER)) { status &= (byte)~(STATUS_BIT_ANSWER | STATUS_BIT_CONFIRM); print_flag |= PRINT_STATUS; ICJC_send(); } else if ((status & (STATUS_BIT_STEP | STATUS_BIT_ANSWER)) == (STEP_XJZJ | STATUS_BIT_ANSWER)) { status &= (byte)~(STATUS_BIT_ANSWER | STATUS_BIT_CONFIRM); XTZJ_send(); print_flag |= PRINT_STATUS; } else if ((status & (STATUS_BIT_STEP | STATUS_BIT_ANSWER)) == (STEP_SJSC | STATUS_BIT_ANSWER)) { status &= (byte)~(STATUS_BIT_ANSWER | STATUS_BIT_CONFIRM); SJSC_send(); print_flag |= PRINT_STATUS; } else if ((status & (STATUS_BIT_STEP | STATUS_BIT_ANSWER)) == (STEP_GNPS | STATUS_BIT_ANSWER)) { status &= (byte)~(STATUS_BIT_ANSWER | STATUS_BIT_CONFIRM); GNPS_send(); print_flag |= PRINT_STATUS; } else if ((status & (STATUS_BIT_STEP | STATUS_BIT_ANSWER)) == (STEP_GNVS | STATUS_BIT_ANSWER)) { status &= (byte)~(STATUS_BIT_ANSWER | STATUS_BIT_CONFIRM); GNVS_send(); print_flag |= PRINT_STATUS; } else if ((status & (STATUS_BIT_STEP | STATUS_BIT_ANSWER)) == (STEP_GNTS | STATUS_BIT_ANSWER)) { status &= (byte)~(STATUS_BIT_ANSWER | STATUS_BIT_CONFIRM); GNTS_send(); print_flag |= PRINT_STATUS; } else if ((status & (STATUS_BIT_STEP | STATUS_BIT_ANSWER)) == (STEP_READY | STATUS_BIT_ANSWER)) { print_flag |= PRINT_STATUS; } else { ++check_status_count; } }