?? modbus0.c
字號(hào):
/******************************************************************************************
TX0,RX0 Used Asigned 485
********************************************************************************************/
#include "config.h"
//unsigned char CmdBuf[10];
extern unsigned char X4Dat[65];
extern unsigned char X3Dat[100];
extern uint8 RecDat0[20];
extern uint8 X0Dat[5];
extern uint8 TureBdTmp;
extern uint16 StartTm;
extern uint16 WindowsFg;
extern uint16 TpumSpeed;
extern float TpumVaccum;
extern float LeakBase;
extern uint8 LeakExp;
extern uint8 CalBase ;
extern uint8 CalExp ;
extern uint8 Volum;
extern uint8 AlarmBase;
extern uint8 AlarmExp;
extern uint8 DecPort;
unsigned char OutBuf0[50];
uint8 SavePar0;
extern int8 RecLen0;
extern unsigned char const auchCRCHi[];
extern unsigned char const auchCRCLo[] ;
extern void Delay(void);
extern unsigned short CRC(unsigned char dat[] , unsigned short usDataLen);
void SendX340(unsigned int Add,unsigned int Num1,uint8 Dat[])
{
unsigned char i,Len;
unsigned int CrcTmp;
OutBuf0[0]=0x01;
OutBuf0[1]=RecDat0[1];
OutBuf0[2]=Num1*2;
for(i=0;i<Num1*2;i++)
{
//OutBuf[i+3]=Dat[Add*2+i];
//OutBuf[i+4]=Dat[Add*2+i+1] ;
OutBuf0[i+3]=Dat[Add*2+i];
}
Len=i+3;
CrcTmp=CRC(OutBuf0,Len);
OutBuf0[Len+1]=CrcTmp&0x00ff;
OutBuf0[Len]=(CrcTmp>>8)&0x00ff;
Delay();
for(i=0;i<Len+2;i++)
{
U0THR =OutBuf0[i];
while ((U0LSR & 0x20) == 0); // 等待數(shù)據(jù)發(fā)送完畢
}
Delay();
}
void SendX010(unsigned int Add,unsigned int Num1,uint8 Dat[])
{
unsigned char i,Len;
unsigned int CrcTmp;
OutBuf0[0]=0x01;
OutBuf0[1]=RecDat0[1];
OutBuf0[2]=Num1*2;
for(i=0;i<Num1*2;i++)
{
//OutBuf[i+3]=Dat[Add*2+i];
//OutBuf[i+4]=Dat[Add*2+i+1] ;
OutBuf0[i+3]=Dat[Add*2+i];
}
Len=i+3;
CrcTmp=CRC(OutBuf0,Len);
OutBuf0[Len+1]=CrcTmp&0x00ff;
OutBuf0[Len]=(CrcTmp>>8)&0x00ff;
Delay();
for(i=0;i<Len+2;i++)
{
U0THR =OutBuf0[i];
while ((U0LSR & 0x20) == 0); // 等待數(shù)據(jù)發(fā)送完畢
}
Delay();
}
void SetResp0(unsigned int Add,unsigned int Num1)
{
unsigned char i,Len;
unsigned int CrcTmp;
OutBuf0[0]=0x01;
OutBuf0[1]=RecDat0[1];
OutBuf0[2]=Add>>8&0x00ff;
OutBuf0[3]=Add&0x00ff;
//OutBuf[4]=RecDat[4];
//OutBuf[5]=RecDat[5];
for(i=0;i<Num1*2;i++)
{
//OutBuf[i+4]=X4Dat[Add*2+i];
//OutBuf[i+5]=X4Dat[Add*2+i+1] ;
OutBuf0[i+4]=X4Dat[Add*2+i];
}
//i=1;
Len=i+4;
CrcTmp=CRC(OutBuf0,Len);
OutBuf0[Len+1]=CrcTmp&0x00ff;
OutBuf0[Len]=(CrcTmp>>8)&0x00ff;
Delay();
for(i=0;i<Len+2;i++)
{
U0THR =OutBuf0[i];
while ((U0LSR & 0x20) == 0); // 等待數(shù)據(jù)發(fā)送完畢
}
Delay();
}
void RespX010(unsigned int Add)
{
unsigned char i,Len;
unsigned int CrcTmp;
OutBuf0[0]=0x01;
OutBuf0[1]=RecDat0[1];
OutBuf0[2]=Add>>8&0x00ff;
OutBuf0[3]=Add&0x00ff;
OutBuf0[4]=RecDat0[4];
OutBuf0[5]=RecDat0[5];
//for(i=0;i<Num1*2;i++)
//{
//OutBuf[i+4]=X4Dat[Add*2+i];
//OutBuf[i+5]=X4Dat[Add*2+i+1] ;
//OutBuf[i+4]=X4Dat[Add*2+i];
//}
//i=1;
Len=6;
CrcTmp=CRC(OutBuf0,Len);
OutBuf0[Len+1]=CrcTmp&0x00ff;
OutBuf0[Len]=(CrcTmp>>8)&0x00ff;
Delay();
for(i=0;i<Len+2;i++)
{
U0THR =OutBuf0[i];
while ((U0LSR & 0x20) == 0); // 等待數(shù)據(jù)發(fā)送完畢
}
Delay();
}
void MbusDel0(void)
{
uint8 i,CmdAdd,Num;
float TmpVcm;
if((RecLen0>0)||RecLen0>6)
{
for(i=RecLen0;i>0;i--)
{
//CmdBuf[i-1]=RecDat[i-1];
}
//CrcRes= CRC(RecDat,RecLen-2);
if ((RecDat0[RecLen0-2]*256+RecDat0[RecLen0-1])==CRC(RecDat0,RecLen0-2) )//Cmd Right
{
if (RecDat0[0]==0x1)//設(shè)備號(hào)為1
{
switch(RecDat0[1])
{
case 1:
CmdAdd=RecDat0[2]*256+RecDat0[3];
Num=(RecDat0[4]*256+RecDat0[5])/16;
SendX340(CmdAdd,Num,X0Dat);
break;
case 2:
break;
case 3:
//X4Dat[61]=TureBdTmp;
//X4Dat[60]=BdTmp/256;
X4Dat[0]=AlarmBase/256;
X4Dat[1]=AlarmBase;
X4Dat[2]=AlarmExp/256;
X4Dat[3]=AlarmExp;
X4Dat[4]=Volum/256;
X4Dat[5]=Volum;
X4Dat[6]=Unit/256;
X4Dat[7]=Unit%256;
X4Dat[8]=CalBase/256;
X4Dat[9]=CalBase;
X4Dat[10]=CalExp/256;;
X4Dat[11]=CalExp;
X4Dat[12]=DecPort/256;;
X4Dat[13]=DecPort;
X4Dat[16]=VacumUnit/256;
X4Dat[17]=VacumUnit%256;
X4Dat[18]=FltMod/256;
X4Dat[19]=FltMod%256;
X4Dat[38]=RunHour/256;
X4Dat[39]=RunHour%256;
X4Dat[40]=0;
X4Dat[41]=0;
X4Dat[42]=RunMin/256;
X4Dat[43]=RunMin%256;
X4Dat[44]=0;
X4Dat[45]=0;
X4Dat[46]=ErrTimes/256;
X4Dat[47]=ErrTimes%256;
X4Dat[48]=0;
X4Dat[49]=0;
CmdAdd=RecDat0[2]*256+RecDat0[3];
Num=RecDat0[4]*256+RecDat0[5];
SendX340(CmdAdd,Num,X4Dat);
break;
case 4:
X3Dat[0]=WindowsFg/256;
X3Dat[1]=WindowsFg%256;
X3Dat[2]=StartTm/256;
X3Dat[3]=StartTm%256;
X3Dat[4]=CalTm/256;
X3Dat[5]=CalTm%256;
X3Dat[8]=(int16)(LkPtVaccumMain) /256;
X3Dat[9]=(int16)(LkPtVaccumMain) % 256;
X3Dat[10]=(int16)(TpumVaccumMain)/256;
X3Dat[11]=(int16)(TpumVaccumMain)%256;
TmpVcm=LkPtVaccum;
i=0;
if((LkPtVaccum<10)&&(LkPtVaccum!=0))
{
X3Dat[16]=0;//檢漏口壓力符號(hào)
X3Dat[17]=1;//負(fù)號(hào)
while(TmpVcm<10)
{
TmpVcm=TmpVcm*10;
i++;
}
X3Dat[12]=(int8)(TmpVcm)/256;
X3Dat[13]=(int8)(TmpVcm)%256;
X3Dat[14]=(int8)(i-1) /256;
X3Dat[15]=(int8)(i-1) % 256;
}
else if((LkPtVaccum>=100))
{
X3Dat[16]=0;//檢漏口壓力符號(hào)
X3Dat[17]=0;//+號(hào)
while((uint32)(TmpVcm)>=100)
{
TmpVcm=TmpVcm/10;
i++;
}
X3Dat[12]=(int8)(TmpVcm)/256;
X3Dat[13]=(int8)(TmpVcm)%256;
X3Dat[14]=(int8)(i+1) /256;
X3Dat[15]=(int8)(i+1) % 256;
}
TmpVcm=TpumVaccum;
i=0;
if((TpumVaccum<10)&&(TpumVaccum!=0))
{
X3Dat[26]=0;//壓力符號(hào)
X3Dat[27]=1;//負(fù)號(hào)
while(TmpVcm<10)
{
TmpVcm=TmpVcm*10;
i++;
}
X3Dat[22]=(int8)(TmpVcm)/256;
X3Dat[23]=(int8)(TmpVcm)%256;
X3Dat[24]=(int8)(i-1) /256;
X3Dat[25]=(int8)(i-1) % 256;
}
else if((TpumVaccum>=100))
{
X3Dat[26]=0;//壓力符號(hào)
X3Dat[27]=0;//+號(hào)
while((uint32)(TmpVcm)>=100)
{
TmpVcm=TmpVcm/10;
i++;
}
X3Dat[22]=(int8)(TmpVcm)/256;
X3Dat[23]=(int8)(TmpVcm)%256;
X3Dat[24]=(int8)(i+1) /256;
X3Dat[25]=(int8)(i+1) % 256;
}
X3Dat[18]=(int8)(LeakBase)/256;
X3Dat[19]=(int8)(LeakBase)%256;
X3Dat[20]=LeakExp/256;
X3Dat[21]=LeakExp%256;
X3Dat[30]=(uint16)(RemCal)/256;
X3Dat[31]=(uint16)(RemCal)%256;
X3Dat[32]=0;
X3Dat[33]=0;
X3Dat[34]=StartBar/256;
X3Dat[35]=StartBar%256;
X3Dat[36]=DxCurent/256;
X3Dat[37]=DxCurent%256;
X3Dat[38]=TrapCurent/256;
X3Dat[39]=TrapCurent%256;
X3Dat[40]=SigVol/256;
X3Dat[41]=SigVol%256;
X3Dat[42]=LkVol/256;
X3Dat[43]=LkVol%256;
X3Dat[44]=PumVol/256;
X3Dat[45]=PumVol%256;
X3Dat[46]=0;
X3Dat[47]=0;
X3Dat[48]=TureBdTmp/256;
X3Dat[49]=TureBdTmp%256;
X3Dat[50]=AmpRate/256;
X3Dat[51]=AmpRate%256;
X3Dat[52]=Xx/256;
X3Dat[53]=Xx%256;
X3Dat[54]=0;
X3Dat[55]=(int8)(MsOk&1);
X3Dat[56]=0;
X3Dat[57]=(int8)(TmpOk&1);
X3Dat[58]=0;
if((IO0PIN&Var1)==0)
X3Dat[59]=0;
else
X3Dat[59]=1;
X3Dat[60]=0;
if((IO0PIN&Var2)==0)
X3Dat[61]=0;
else
X3Dat[61]=1;
X3Dat[62]=0;
if((IO0PIN&Var3)==0)
X3Dat[63]=0;
else
X3Dat[63]=1;
X3Dat[64]=0;
if((IO0PIN&Var4)==0)
X3Dat[65]=0;
else
X3Dat[65]=1;
X3Dat[66]=0;
if((IO1PIN&Var5)==0)
X3Dat[67]=0;
else
X3Dat[67]=1;
X3Dat[68]=0;
if((IO0PIN&Var6)==0)
X3Dat[69]=0;
else
X3Dat[69]=1;
X3Dat[70]=0;
X3Dat[71]=(int8)(Zeroing&0x01);
CmdAdd=RecDat0[2]*256+RecDat0[3];
Num=RecDat0[4]*256+RecDat0[5];
SendX340(CmdAdd,Num,X3Dat);
break;
case 5:
CmdAdd=RecDat0[2]*256+RecDat0[3];
if (RecDat0[4]==0xff)
X0Dat[CmdAdd/8]=X0Dat[CmdAdd/8]|(1<<(CmdAdd%8));
else
X0Dat[CmdAdd/8]=X0Dat[CmdAdd/8]&(~(1<<(CmdAdd%8)));
RespX010(CmdAdd);
break;
case 6:
X4Dat[61]=TureBdTmp;
//X4Dat[60]=BdTmp/256;
CmdAdd=RecDat0[2]*256+RecDat0[3];
Num=RecDat0[4]*256+RecDat0[5];
SendX340(CmdAdd,Num,X4Dat);
break;
case 16:
CmdAdd=RecDat0[2]*256+RecDat0[3];
Num=RecDat0[4]*256+RecDat0[5];
for(i=0;i<Num*2;i++)
{
X4Dat[CmdAdd*2+i]=RecDat0[7+i];
//X4Dat[CmdAdd*2]=RecDat[7];
//X4Dat[CmdAdd*2+1]=RecDat[8];
}
AlarmBase=256*X4Dat[0]+X4Dat[1];
AlarmExp =256*X4Dat[2]+X4Dat[3];
Volum =256*X4Dat[4]+X4Dat[5];
Unit =256*X4Dat[6]+X4Dat[7];
CalBase =256*X4Dat[8]+X4Dat[9];
CalExp =256*X4Dat[10]+X4Dat[11];
DecPort =256*X4Dat[12]+X4Dat[13];
VacumUnit=256*X4Dat[16]+X4Dat[17];
FltMod =256*X4Dat[18]+X4Dat[19];
SavePar0=1;
SetResp0(CmdAdd,Num);
break;
default:
RecLen0=0;
break;
}
}
}
else
{
RecLen0=0;
}
RecLen0=0;
}
else if(RecLen0<6)
{
RecLen0=0;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -