今天来说说怎么样向触屏写入数据,这也是这个示例的最后一篇
首先来说说06功能码,写入单个寄存器
byte[] buffer = new byte[12];
//事务处理序号
buffer[0] = 0x00;
buffer[1] = 0x00;
//协议标识符
buffer[2] = 0x00;
buffer[3] = 0x00;
//随后字节数
buffer[4] = 0x00;
buffer[5] = 0x06;
//单元标识符
buffer[6] = 0x01;//MBAP报文头
//功能码
buffer[7] = 0x06;
//寄存器起始地址
buffer[8] = 0x00;
buffer[9] = 0x00;
//要写入的数据,需要注意的是数据地址的高低位
buffer[10] = 0x00;
buffer[11] = 0x04;
下面看看功能码16,写入多个寄存器
//字节数组的长度为13,不能多,
byte[] buffer = new byte[13];
//事务处理序号
buffer[0] = 0x00;
buffer[1] = 0x00;
//协议标识符
buffer[2] = 0x00;
buffer[3] = 0x00;
//随后字节数
buffer[4] = 0x00;
buffer[5] = 0x06;
//单元标识符
buffer[6] = 0x01;//MBAP报文头
//功能码,16对应的16进制数是0x10
buffer[7] = 0x10;
//寄存器起始地址
buffer[8] = 0x00;
buffer[9] = 0x00;
//要写入的数据,需要注意的是数据地址的高低位
buffer[10] = 0x00;
buffer[11] = 0x04;
//把输入的16位数据转换成字节数组
byte[] buffer1 = BitConverter.GetBytes(Convert.ToUInt16(textBox1.Text));
//把字节数组进行顺序颠倒
buffer1 = SequenceReversal(buffer1);
//设置字节数组的长度
buffer[12] = (byte)buffer1.Length;//设置要发送字符的长度
//设置一个新的字节数组
byte[] buffer3 = new byte[buffer.Length + buffer1.Length];
//把buffer中的内容拷贝到buffer3中
Buffer.BlockCopy(buffer, 0, buffer3, 0, buffer.Length);
//把buffer1中的内容拷贝到buffer3中,位置在buffer内容的后面
Buffer.BlockCopy(buffer1, 0, buffer3, buffer.Length * sizeof(byte), buffer1.Length);
socketSend.Send(buffer3);//从网口发送字符
/// <summary>
/// 进行顺序颠倒
/// </summary>
/// <param name="byt"></param>
/// <returns></returns>
public byte[] SequenceReversal(byte[] byt )
{
int a = byt.Length;
byte[] b=new byte[a];
for (int i=0;i<byt.Length; i++)
{
b[a - 1 - i] = byt[i];
}
return b;
}
下面看看怎么样写入字符串
/// <summary>
/// 获得一个字符串,从网口发送出去
/// </summary>
/// <param name="str"></param>
public void DataForwarding(string str)
{
try
{
byte[] buffer = new byte[13];
//事务处理序号
buffer[0] = 0x00;
buffer[1] = 0x00;
//协议标识符
buffer[2] = 0x00;
buffer[3] = 0x00;
//随后字节数
buffer[4] = 0x00;
buffer[5] = 0x06;
//单元标识符
buffer[6] = 0x01;//MBAP报文头
//功能码
buffer[7] = 0x10;
//寄存器起始地址
buffer[8] = 0x00;
buffer[9] = 0x64;
//请求字节长度
buffer[10] = 0x00;
buffer[11] = 0x40;
byte[] buffer1 = Encoding.ASCII.GetBytes(str);//获得要发送的字符
buffer[12] = (byte)buffer1.Length;//设置要发送字符的长度
//设置一个新的字节数组
byte[] buffer3 = new byte[buffer.Length + buffer1.Length];
//把buffer中的内容拷贝到buffer3中
Buffer.BlockCopy(buffer, 0, buffer3, 0, buffer.Length);
//把buffer1中的内容拷贝到buffer3中,位置在buffer内容的后面
Buffer.BlockCopy(buffer1, 0, buffer3, buffer.Length * sizeof(byte), buffer1.Length);
socketSend.Send(buffer3);//从网口发送字符
}
catch
{
}
}