modbus驱动源代码Word格式.docx
《modbus驱动源代码Word格式.docx》由会员分享,可在线阅读,更多相关《modbus驱动源代码Word格式.docx(55页珍藏版)》请在冰豆网上搜索。
//*/
}
#endif
voidRS232CheckRXDataDeal(void)
unsignedintm,kk,jj;
unsignedchar*pt;
unsignedchari,k;
unsignedcharx,y;
unsignedchartemp;
unsignedcharFun_Code,Date_Len;
if(bDataChange==dTrue)//串口2交换数据到串口1
{
temp=RxdLen;
pt=&
RxRs232DataZone[0];
m=comp_crc16(pt,temp);
i=(m/256);
k=(m);
x=RxRs232DataZone[temp];
y=RxRs232DataZone[temp+1];
if((i!
=x)||(k!
=y))
return;
for(i=0;
RxdLen;
i++)
TxRs232DataZone2[i]=RxRs232DataZone[i];
LenTXD2=RxdLen;
RxdLen=0;
bTXCodeFlag2=dTrue;
bDataChange=dFalse;
return;
}
Fun_Code=RxRs232DataZone[1];
if((bWatchReciveReadData==dTrue)&
&
(Fun_Code==3))
Date_Len=RxRs232DataZone[2];
Para_H=RxRs232DataZone[3];
Para_L=RxRs232DataZone[4];
temp=Date_Len+3;
if(Add_H==0x21)//0x21群组
{
if(Add_L==4)//amp
{
MainDisplayId_Amp=(Para_H<
<
8)|Para_L;
bWatchReciveReadData=dFalse;
}
elseif(Add_L==5)//dcvol
MainDisplayId_DcVol=(Para_H<
elseif(Add_L==6)//outvol
MainDisplayId_OutVol=(Para_H<
elseif(Add_L==2)//fre
MenuMainNum=(Para_H<
}
}
if(Fun_Code==3)
m=(Add_H*100)+Add_L+20000;
//参数任务号
/*debug
bTXCodeFlag=dTrue;
LenTXD=8;
TxRs232DataZone[0]=0xff;
TxRs232DataZone[1]=Add_H;
TxRs232DataZone[2]=Add_L;
TxRs232DataZone[3]=MeunTaskID>
>
8;
TxRs232DataZone[4]=MeunTaskID;
TxRs232DataZone[5]=m>
TxRs232DataZone[6]=m;
TxRs232DataZone[7]=0xff;
if(bMotoStop)
dRXD_motostopDeal(m);
elseif(bMotoRun)
dRXD_motorunDeal(m);
elseif(bMotoJog)
dRXD_motojopDeal(m);
else
{
dRXD0000Deal(m);
elseif(Fun_Code==6)//write
Rx_Write_Addr_H=RxRs232DataZone[2];
Rx_Write_Addr_L=RxRs232DataZone[3];
Rx_Write_Dat_H=RxRs232DataZone[4];
Rx_Write_Dat_L=RxRs232DataZone[5];
temp=6;
/*
if((bWaitAdjust==dTrue)
&
(Rx_Write_Addr_H==Wait_Write_Addr_H)
(Rx_Write_Addr_L==Wait_Write_Addr_L))//*/
if(bWaitAdjust==dTrue)
kk=(uint)(Rx_Write_Dat_H);
MenuMainNum=(kk<
8)|Rx_Write_Dat_L;
jj=MenuMainNum;
shownum[0]=jj/10000;
shownum[1]=jj/1000%10;
shownum[2]=jj/100%10;
shownum[3]=jj/10%10;
shownum[4]=jj%10;
//bpoint[2]=dTrue;
for(i=0;
{
if(shownum[i]==0)
{
shownum[i]=NoDispNum;
}
else
break;
}
bDisp=dTrue;
bWaitAdjust=dFalse;
if((bWaitReciveWriteData==dTrue)
(Rx_Write_Addr_L==Wait_Write_Addr_L))
if((Rx_Write_Addr_H==1)&
(Rx_Write_Addr_L==0))//设定01-00后,更新主菜单显示内容
kk=(uint)(Rx_Write_Dat_H);
MenuMainNum=(kk<
bWaitReciveWriteData=dFalse;
shownum[0]=DispNum__;
//
shownum[1]=DispNum_E;
shownum[2]=DispNum_N;
//-
shownum[3]=DispNum_D;
//0
shownum[4]=DispNum__;
//0
bDispLimitTime=dTrue;
}
voidRS232CheckRXDataDeal2(void)
temp=RxdLen2;
RxRs232DataZone2[0];
x=RxRs232DataZone2[temp];
y=RxRs232DataZone2[temp+1];
for(i=0;
RxdLen2;
TxRs232DataZone[i]=RxRs232DataZone2[i];
LenTXD=RxdLen2;
RxdLen2=0;
bDataChange=dTrue;
CountDataChange=0;
/*
voidRS232_DelayLoad(void)
bDelaySendCode=dFalse;
OperationTimeLimitCount=dTimeLimitCount10MS;
bOperationTimeOverFlag=dFalse;
bOperationTimeLimitFlag=dTrue;
bWaitLoadSendDataFlag=dTrue;
}//*/
voidRS232ReadCmd(unsignedcharDdeviceAdd,unsignedcharStartAddr_H,unsignedcharStartAddr_L,unsignedcharReadLen_H,unsignedcharReadLen_L)
unsignedchar*j;
unsignedintm;
TxRs232DataZone[0]=DdeviceAdd;
TxRs232DataZone[1]=3;
TxRs232DataZone[2]=StartAddr_H;
TxRs232DataZone[3]=StartAddr_L;
TxRs232DataZone[4]=ReadLen_H;
TxRs232DataZone[5]=ReadLen_L;
Add_H=StartAddr_H;
Add_L=StartAddr_L;
j=&
TxRs232DataZone[0];
m=comp_crc16(j,6);
TxRs232DataZone[6]=(m/256);
TxRs232DataZone[7]=(m);
voidRS232WriteCmd(unsignedcharDdeviceAdd,unsignedcharStartAddr_H,unsignedcharStartAddr_L,unsignedcharWriteData_H,unsignedcharWriteData_L)
TxRs232DataZone[1]=6;
TxRs232DataZone[4]=WriteData_H;
TxRs232DataZone[5]=WriteData_L;
voidRS232TXStart(void)
unsignedchari;
if((bRXingCodeFlag==dTrue)||(bTXingCodeFlag==dTrue))return;
RS485Control=1;
bTXingCodeFlag=dTrue;
//避免TXing时Load
//RS232TxByteCount=0;
//LED1^=1;
for(i=0;
i<
LenTXD;
i++)
Udatas(TxRs232DataZone[i]);
LenTXD=0;
RS485Control=0;
bTXingCodeFlag=dFalse;
voidRS232TXStart2(void)
if((bRXingCodeFlag2==dTrue)||(bTXingCodeFlag2==dTrue))return;
RS485Control2=1;
bTXingCodeFlag2=dTrue;
LenTXD2;
Udatas2(TxRs232DataZone2[i]);
LenTXD2=0;
RS485Control2=0;
bTXingCodeFlag2=dFalse;
voiddMenuMainDeal(void)
uchari,j;
if(KeyValue==KeyENT)//
shownum[0]=0;
shownum[1]=0;
shownum[2]=DispNum__;
shownum[3]=NoDispNum;
shownum[4]=NoDispNum;
bDisp=dTrue;
MeunTaskID=dMenu00xx;
elseif(KeyValue==KeyCycle)//
if(++MainDisplayId>
4)
MainDisplayId=0;
if(MainDisplayId==0)
if(IsDisplayOutAmp==0)
MainDisplayId=1;
}
else
MenuDisplayNum000(MainDisplayId_Amp);
}
if(MainDisplayId==1)
if(IsDisplayOutVol==0)
MainDisplayId=2;
MenuDisplayNum000(MainDisplayId_OutVol);
if(MainDisplayId==2)
if(IsDisplayDcVol==0)
MainDisplayId=3;
MenuDisplayNum000(MainDisplayId_DcVol);
if(MainDisplayId==3)
if(IsDisplayUseSet1==0)
MainDisplayId=4;
MenuDisplayNum000(MainDisplayId_UseSet1);
if(MainDisplayId==4)
if(IsDisplayUseSet2==1)
MenuDisplayNum000(MainDisplayId_UseSet2);
elseif(KeyValue==KeyUp)
if(MenuMainNum<
60000)
MenuMainNum++;
j=(uchar)(MenuMainNum);
i=(uchar)(MenuMainNum>
8);
LenTXD=8;
RS232WriteCmd(0xff,0x20,1,i,j);
//RS232WriteCmd(0xff,1,0,i,j);
bWaitAdjust=dTrue;
}
elseif(KeyValue