包头: ‘$’(1 byte)
包号: 区别前后的命令序列,取值范围为0x01-0xfe,每条命令加1
包号补码: 包号取反加1
长度: 数据包的长度(从包头到结束字的长度),暂固定为16字节。
长度补码: 长度取反加1
命令字: 上位机使用0xA0-0xfe;下位机使用0x50-0xfe(暂时不用为以后保留)
数据段: 将要传输的数据内容。如果部分命令没有具体数据,上位机以0xAB做为数据;下位机以0x55 做为数据.小数统一乘以1000后再发送,MSB在前。比如:0x12345678,依次发送12 34 56 78.
CRC: 使用CRC16校验和,以包头开始,直到数据段结束
结束字: ~(1 byte)public class SendData
{
public const byte DataHead = 0x24;
public byte headNum;
public byte comHaedNum;
public byte length;
public byte comLength;
public byte commandWord;
public byte[] data = new byte[7];
public byte[] crc = new byte[2];
public const byte DataEnd = 0x7e; public byte[] ToArray()
{ using(MemoryStream ms = new MemoryStream())
{
using(BinaryWriter bw = new BinaryWriter(ms))
{
bw.Write(DataHead);
bw.Write(headNum);
bw.Write(comHaedNum);
bw.Write(length);
bw.Write(comLength);
bw.Write(commandWord);
bw.Write(data);
bw.Write(crc);
bw.Write(DataEnd);
}
}
///////////////返回值
}
}各位大侠我这样做可以么?我实际数据段的大小是8个字节,怎么把它变成7个?我的返回值怎么写呢?class数据
解决方案 »
- C# winfrom如何下载服务器上的文件
- gridview cells单击弹出页面返回值问题
- 如何在 datagridview的单元格中嵌入 “组合框”、“文本框”进行编辑呢?
- Visual Studio 2010支持移動應用開發嗎?
- 关于结构体的问题
- c# 的console 如何访问远程的XML数据文件
- 请教API函数中的参数的设置
- 调查:大家用C#做什么?asp.net ,WindowsApplication.....
- 请实时系统跟一般系统有什么不同?
- 我想用C#做一个activex控件或com组件,大家能否提供一些这方面的文档,多谢!!!
- 【代码管理器】第一次用TFS,应该怎么创建团队项目服务器?
- vs2010里生成父类方法的快捷键是多少?
你定义的就是7个啊。
{
using (MemoryStream ms = new MemoryStream())
{
using (BinaryWriter bw = new BinaryWriter(ms))
{
bw.Write(DataHead);
bw.Write(headNum);
bw.Write(comHaedNum);
bw.Write(length);
bw.Write(comLength);
bw.Write(commandWord);
bw.Write(data);
bw.Write(crc);
bw.Write(DataEnd);
}
return ms.ToArray();
}
///////////////返回值
}