|
目的:
1,接收到来自MODBUS主站数据uint16_t,提取一个uint16_t里面位状态。比如:1,2,4,8,16,32,64...互相不影响。
将这些位状态,作为开关信号来处理。进行逻辑组合判断。
2,如果像这样的位处理多起来了,导致代码很繁琐。
INT8U Bit_Judge(INT16U BitData,INT16U AndValue)
{
INT8U ReturnValue;
switch (AndValue){
case 0x1:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x2:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x4:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x8:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x10:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x20:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x40:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x80:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x100:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x200:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x400:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x800:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x1000:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x2000:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x4000:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
case 0x8000:
if(BitData & AndValue )
{ ReturnValue=0x01;}
else
{ ReturnValue=0x00;}
break;
}
return ReturnValue;
}
-----------------------------------------------------------------------------------------------------------------------------------------
FromPLC_Word1_Bit_AnalysisStruct.bit0=Bit_Judge(pModbus_Data[15],0x1);/*抽真空许可*/
FromPLC_Word1_Bit_AnalysisStruct.bit1=Bit_Judge(pModbus_Data[15],0x2);/*抽真空指令*/
FromPLC_Word1_Bit_AnalysisStruct.bit2=Bit_Judge(pModbus_Data[15],0x4);/*主阀门Open*/
FromPLC_Word1_Bit_AnalysisStruct.bit3=Bit_Judge(pModbus_Data[15],0x8);/*主阀门Close*/
FromPLC_Word1_Bit_AnalysisStruct.bit4=Bit_Judge(pModbus_Data[15],0x10);/*Vent许可*/
FromPLC_Word1_Bit_AnalysisStruct.bit5=Bit_Judge(pModbus_Data[15],0x20);/*Vent指令*/
FromPLC_Word1_Bit_AnalysisStruct.bit6=Bit_Judge(pModbus_Data[15],0x40);/*再生许可*/
FromPLC_Word1_Bit_AnalysisStruct.bit7=Bit_Judge(pModbus_Data[15],0x80);/*再生指令*/
FromPLC_Word1_Bit_AnalysisStruct.bit8=Bit_Judge(pModbus_Data[15],0x100);/*干泵运行中抽真空可*/
FromPLC_Word1_Bit_AnalysisStruct.bit9=Bit_Judge(pModbus_Data[15],0x200);/*手动模式*/
FromPLC_Word1_Bit_AnalysisStruct.bit10=Bit_Judge(pModbus_Data[15],0x400);/*自动模式*/
FromPLC_Word1_Bit_AnalysisStruct.bit11=Bit_Judge(pModbus_Data[15],0x800);/*紧急停止*/
FromPLC_Word1_Bit_AnalysisStruct.bit12=Bit_Judge(pModbus_Data[15],0x1000);/*粗抽阀门Open*/
FromPLC_Word1_Bit_AnalysisStruct.bit13=Bit_Judge(pModbus_Data[15],0x2000);/*粗抽阀门Close*/
FromPLC_Word1_Bit_AnalysisStruct.bit14=Bit_Judge(pModbus_Data[15],0x4000);/*排气阀门Open*/
FromPLC_Word1_Bit_AnalysisStruct.bit15=Bit_Judge(pModbus_Data[15],0x8000);/*排气阀门Close*/
|
|