发表于:2005-04-22 21:41:00
楼主
modbus方面我得 有如下问题:receBuf[1]是功能码,为什么这里功能码是1 3 5,不作处理,而在功能码为6的分支里边处理?
1。这有什么区别?
15 强置多线圈 强置一串连续逻辑线圈的通断
16 预置多寄存器 把具体的二进制值装入一串连续的保持寄存器
2。我看:微控电子 www.mcuc.cn
modbus RTU 的C51程序
receBuf[1]是功能码,为什么这里功能码是1 3 5,不作处理,而在功能码为6的分支里边处理?
switch(receBuf[1])
{
case 1://读取线圈状态(读取点 16位以内)
case 3://读取保持寄存器(一个或多个)
case 5://强制单个线圈
case 6://设置单个寄存器
if(receCount >= 8)
{//接收完成一组数据
//应该关闭接收中断
if(receBuf[0]==localAddr && checkoutError==0)
{
crcData = crc16(receBuf,6);
if(crcData == receBuf[7]+(receBuf[6]<<8))
{//校验正确
if(receBuf[1] == 1)
{//读取线圈状态(读取点 16位以内)
readCoil();
}
else if(receBuf[1] == 3)
{//读取保持寄存器(一个或多个)
readRegisters();
}
else if(receBuf[1] == 5)
{//强制单个线圈
forceSingleCoil();
}
else if(receBuf[1] == 6)
{
//presetSingleRegister();
}
}
}
receCount = 0;
checkoutError = 0;
}
break;
case 15://设置多个线圈