您的位置:首页 > 编程语言

[代码积累]ASTM校验和计算与消息返回--根据消息类型切割

2017-01-11 14:32 309 查看
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.Ge
4000
tBytes(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);


消息解析后效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐