| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace StressClient
- {
- class Helper
- {
- // 字符串转16进制字符串 AB-->4142
- public static string StrToHexStr(string src, Encoding encode)
- {
- byte[] b = encode.GetBytes(src);
- string result = string.Empty;
- foreach (var t in b)
- {
- result += Convert.ToString(t, 16);
- }
- return result;
- }
- // 将16进制字符串转换到byte[]
- public static byte[] HexStrToArrary(string src)
- {
- int count = src.Length / 2;
- byte[] b = new byte[count];
- for (int i = 0; i < count; i++)
- {
- string val = "0x" + src.Substring(i * 2, 2);
- b[i] = Convert.ToByte(val, 16); // '0x41'->65
- }
- return b;
- }
- public static string do_CRC(byte[] data)
- {
- byte check = 0;
- uint crc = 0xFFFF;
- for (int idx = 0; idx < data.Length; idx++)
- {
- byte pos = data[idx];
- crc = (crc >> 8) ^ pos;
- for (int i = 0; i < 8; i++)
- {
- check = (byte)(crc & 0x0001);
- crc >>= 1;
- if (check == 0x0001)
- crc ^= 0xA001;
- }
- }
- //string ret_str = Convert.ToString(crc, 16);
- string ret_str = crc.ToString("X4"); ;
- return ret_str.ToUpper();
- }
- public static string do_CRC16(byte[] data)
- {
- byte[] returnVal = new byte[2];
- byte CRC16Lo, CRC16Hi, CL, CH, SaveHi, SaveLo;
- int i, Flag;
- CRC16Lo = 0xFF;
- CRC16Hi = 0xFF;
- CL = 0x86;
- CH = 0x68;
- for (i = 0; i < data.Length; i++)
- {
- CRC16Lo = (byte)(CRC16Lo ^ data[i]);//每一个数据与CRC寄存器进行异或
- for (Flag = 0; Flag <= 7; Flag++)
- {
- SaveHi = CRC16Hi;
- SaveLo = CRC16Lo;
- CRC16Hi = (byte)(CRC16Hi >> 1);//高位右移一位
- CRC16Lo = (byte)(CRC16Lo >> 1);//低位右移一位
- if ((SaveHi & 0x01) == 0x01)//如果高位字节最后一位为
- {
- CRC16Lo = (byte)(CRC16Lo | 0x80);//则低位字节右移后前面补 否则自动补0
- }
- if ((SaveLo & 0x01) == 0x01)//如果LSB为1,则与多项式码进行异或
- {
- CRC16Hi = (byte)(CRC16Hi ^ CH);
- CRC16Lo = (byte)(CRC16Lo ^ CL);
- }
- }
- }
- returnVal[0] = CRC16Hi;//CRC高位
- returnVal[1] = CRC16Lo;//CRC低位
- return Encoding.UTF8.GetString(returnVal);
- }
- private static float GenRandom(int minVal, int maxVal)
- {
- Random rdm = new Random();
- int val = rdm.Next(minVal, maxVal);
- return (float)(val / 100.0);
-
- }
- public static string MakeReqStr1(string MN_id, DateTime curTime)
- {
- // 时间戳QN , 格式YYYYMMDDhhmmsszzz
- string ts_str = curTime.ToString("yyyyMMddHHmmssffff");
- string QN_val = ts_str.Substring(0, 14);
- // 分钟填5的倍数,秒填00
- int minute = curTime.Minute - curTime.Minute % 5;
- Object[] param = new Object[] { curTime.Year, curTime.Month, curTime.Day, curTime.Hour, minute, 0 };
- string cur_dt = string.Format("{0:D4}{1:D2}{2:D2}{3:D2}{4:D2}{5:D2}", param);
- // 其他各参数
- string ST_val = "80";
- string CN_val = "2011";
- string PW_val = "123456";
- string Flag_val = "5";
- string DateTime_val = cur_dt;
- float S20006_Rtd = GenRandom(200, 500);
- float S30004_Rtd = GenRandom(3, 9);
- float S30005_Rtd = GenRandom(100, 300);
- float S10006_Rtd = GenRandom(200, 600);
- float S30003_Rtd = GenRandom(100, 500);
- Object[] param2 = new Object[] { QN_val, ST_val, CN_val, PW_val, MN_id, Flag_val, DateTime_val, S20006_Rtd, S30005_Rtd, S30004_Rtd, S10006_Rtd, S30003_Rtd };
- string req_str = string.Format("QN={0};ST={1};CN={2};PW={3};MN={4};Flag={5:G};CP=&&DataTime={6};S20006-Rtd={7};S30005-Rtd={8};S30004-Rtd={9};S10006-Rtd={10};S30003-Rtd={11}", param2);
-
- string str = StrToHexStr(req_str, Encoding.Default);
- byte[] src = Helper.HexStrToArrary(str);
- string CRC_val = Helper.do_CRC(src);
- // 数据包总长度
- string seg_str = $"##{req_str.Length:D4}";
- // 拼装请求
- req_str = seg_str + req_str + CRC_val + "\r\n";
- return req_str;
- }
-
- }
- }
|