读书人

RS485通讯

发布时间: 2012-12-26 14:39:28 作者: rapoo

RS485通讯求助
我遇到一问题,需要用到RS485通讯,硬件连接 电脑通过RS232转485接口 连接到下位机读取数据,通讯定义如下:
1.1 传输格式
信息传输为异步方式,并以字节为单位(LSB先),在主机和从机之间传递的通讯信息是11位的字格式。
有校验位(奇偶校验)的传输序列:1个起始位、8个数据位、1个校验位、1个停止位。
无校验位的传输序列:1个起始位、8个数据位、2个停止位。(出厂默认)
1.2 帧格式
一个新的通讯信息帧开始之前,通讯总线应存在不小于3.5字节的间歇时间,通讯开始之后,每两个字节之间应不大于1.5字节的间歇时间。
开 始地址码功能码数据区CRC校验码低字节CRC校验码高字节结 束
≥3.5字节间歇时间1字节1字节n字节1字节1字节≥3.5字节间歇时间

3.1 功能码03H:读寄存器数据

例1:主机要读取从机地址为01H,起始寄存器地址为0FH的1个寄存器数据。 03H是读取数据的意思
主机发送:01 03 00 0F 00 01 B4 09
主机发送发送的信息
地址码01H
功能码03H
起始寄存器地址高字节00H
低字节0FH
寄存器数量高字节00H
低字节01H
CRC校验码低字节B4H
高字节09H
如果从机0FH寄存器的数据为1388H,从机返回:01 03 02 13 88 B5 12
从机返回返回的信息
地址码01H
功能码03H
返回数据的字节数02H
0FH寄存器数据高字节13H
低字节88H
CRC校验码低字节B5H
高字节12H

现在要问下
1:一个新的通讯信息帧开始之前,通讯总线应存在不小于3.5字节的间歇时间,通讯开始之后,每两个字节之间应不大于1.5字节的间歇时间。
这个1.5字节是多长时间

2:主机发送:01 03 00 0F 00 01 B4 09
这个具体通讯代码要怎么写?是发送8次两十六进制数据还是别的,麻烦给个具体代码,谢谢!

只有62分了,全部压上,想用无校验位的方式。
[解决办法]
第 一个不懂,

第二个
2:主机发送:01 03 00 0F 00 01 B4 09
这个具体通讯代码要怎么写?是发送8次两十六进制数据还是别的,麻烦给个具体代码,谢谢!
直接
用byte[] buffer=new byte[你要发送的长度]
buffer[0]=0x01;
buffer[1]=0x03;
buffer[2]=0x00;
...
buffer[6]=0xB4;

最后一位较验位是这么算的

for(int i=0;i<buffer.Length-1;i++)
{
buffer[7] ^=buffer[i];
}

然后直接调用SericePort的Send(buffer);
[解决办法]


public byte[] CRC16(byte[] data)
{
byte CRC16Lo;
byte CRC16Hi; //CRC寄存器
byte CL; byte CH; //多项式码&HA001
byte SaveHi; byte SaveLo;
byte[] tmpData;

int Flag;
CRC16Lo = 0xFF;
CRC16Hi = 0xFF;
CL = 0x01;
CH = 0xA0;
tmpData = data;
for (int i = 0; i < tmpData.Length; i++)
{
CRC16Lo = (byte)(CRC16Lo ^ tmpData[i]); //每一个数据与CRC寄存器进行异或
for (Flag = 0; Flag <= 7; Flag++)
{


SaveHi = CRC16Hi;
SaveLo = CRC16Lo;
CRC16Hi = (byte)(CRC16Hi >> 1); //高位右移一位
CRC16Lo = (byte)(CRC16Lo >> 1); //低位右移一位
if ((SaveHi & 0x01) == 0x01) //如果高位字节最后一位为1
{
CRC16Lo = (byte)(CRC16Lo
[解决办法]
0x80); //则低位字节右移后前面补1
} //否则自动补0
if ((SaveLo & 0x01) == 0x01) //如果LSB为1,则与多项式码进行异或
{
CRC16Hi = (byte)(CRC16Hi ^ CH);
CRC16Lo = (byte)(CRC16Lo ^ CL);
}
}
}
byte[] ReturnData = new byte[2];
ReturnData[0] = CRC16Hi; //CRC高位
ReturnData[1] = CRC16Lo; //CRC低位
return ReturnData;
}



crc校验
[解决办法]
再给你个我写的C#串口调试工具 v2.0。有源码。
http://download.csdn.net/detail/yeqi3000/4853494

读书人网 >C#

热点推荐