跪求各位路过的牛人,神人,超神给我指条明路吧,兄弟我第一次接触RTU,用S52的片子,程序基本功能写好以后,只要加上奇偶校验就出问题,例如我接受到上位机的指令00 03 00 00 00 01 crc,加上奇偶校验的程序不是没反应就是应答为00 03 00 00 00 3F CRC,总是不对,我的这部分程序是借鉴网络上的的代码,如下:
if(RI)
{
RI=0;T
receBuf[receCount]=SBUF; //接收数据
receCount++;
if(receCount==8)command_ok=1;
commCount=receCount;
ACC=receBuf[receCount];
//以下进行奇偶校验
if(P!=RB8) js_check=2;
receCount&=0x0f;
dwIntTick=0;TR0=1;//接收完数据,启动接收计时,检测是否停顿超过1.5个字符时间停顿!
}
检验校验部分如下:
js_CRC=receBuf[7]+(receBuf[6]<<8);
if((receBuf[0]==0x0b)&&(js_CRC==crc_z))//是否发给本机,并CRC正确?
{
if(js_check==1)//奇偶校验正确?
{ 相应的操作}
只要加上奇偶校验和检测马上出问题,反馈和接受都不行,求牛人帮帮我,江湖救急啊
------解决方案--------------------
兄弟,你这代码看不懂啊。贴就贴全了。crc_z 哪来的?js_check 什么时候是1?
一般奇偶校验在硬件做,还要注意通讯另一端要作相应设置
------解决方案--------------------
奇偶校验有硬件完成,不需要软件检测!
在硬件设定时选择就可以了,如8E1或8O1,否则是8N1
画蛇添足!
------解决方案--------------------
modbus 协议有他的帧格式,是没有奇偶校验位的,这个不能随便改