ASTM校验和计算与消息返回--根据消息类型切割

来源:互联网 发布:python 高斯曲线拟合 编辑:程序博客网 时间:2024/05/20 19:32

Abbott Standard Interface RS-232 Manual/雅培标准接口RS - 232手册中的ASTM通讯协议,用到的串口通讯校验方法。

这里只提供,将需要校验的字符串数组,转换成校验数据,然后返回待发送的byte数组。

        public List<byte[]> GetRetMsgList(params string[] dataArr)        {            //   返回消息的初始化            List<byte[]> retMsgList = new List<byte[]>();            List<byte[]> retList = new List<byte[]>();            for (int i = 0; i < dataArr.Length; i++)            {                retMsgList.Add(Encoding.ASCII.GetBytes(dataArr[i]));            }            for (int i = 0; i < retMsgList.Count; i++)            {                int checksum = 0;                // 初始化消息数组                List<byte> tempByteArrList = new List<byte>();                // <STX>                tempByteArrList.Add(Encoding.ASCII.GetBytes(strSTX)[0]);                // <FN>                tempByteArrList.Add(Encoding.ASCII.GetBytes(((i + 1) % 8).ToString())[0]);                checksum += Encoding.ASCII.GetBytes(((i + 1) % 8).ToString())[0];                // Comment                tempByteArrList.AddRange(retMsgList[i]);                for (int j = 0; j < retMsgList[i].Length; j++)                {                    checksum += retMsgList[i][j];                }                // <ETX>                tempByteArrList.Add(Encoding.ASCII.GetBytes(strETX)[0]);                checksum += Encoding.ASCII.GetBytes(strETX)[0];                // <C1><C2>校验和                tempByteArrList.AddRange(Encoding.ASCII.GetBytes(((byte)checksum).ToString("X2")));                // <CR>                tempByteArrList.Add(Encoding.ASCII.GetBytes(strCR)[0]);                // <LF>                tempByteArrList.Add(Encoding.ASCII.GetBytes(strLF)[0]);                retList.Add(tempByteArrList.ToArray());            }            return retList;        }

调用时:

            string[] dataArr = new string[]            {                "H|\\^&|||ARCHITECT^8.10^F3453440210^H1P1O1R1C1Q1L1|||||||P|1|20161101081152\r",                "P|1|||||||U\r",                "O|1|1047|1047^F301^1|^^^1066^CA^STANDARD^P|R||||||||||||||||||||F\r",                "R|1|^^^1066^CA^STANDARD^P^25805UN16^24153^^F|1.70|mmol/L||||F||FSE^FSE||20161101081152|c1600926\r",                "R|2|^^^1066^CA^STANDARD^P^25805UN16^24153^^P|0.6865|Abs.||||F||FSE^FSE||20161101081152|c1600926\r",                "L|1\r"            };            List<byte[]> retMsgList = GetRetMsgList(dataArr);

消息解析后效果:


0 0
原创粉丝点击