modbus驱动源代码.docx
- 文档编号:9609716
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:55
- 大小:23.08KB
modbus驱动源代码.docx
《modbus驱动源代码.docx》由会员分享,可在线阅读,更多相关《modbus驱动源代码.docx(55页珍藏版)》请在冰豆网上搜索。
modbus驱动源代码
MODBUS驱动源程序,如有需要或者项目外包请联系qq:
942922109
//---------------------------------------------------------------------
//---------------------------------------------------------------------
#if1
voidMenuDisplayNum000(uinti)
{
//uinti;
//i=DispDataNum;
shownum[0]=i/10000;
shownum[1]=i/1000%10;
shownum[2]=i/100%10;
shownum[3]=i/10%10;
shownum[4]=i%10;
for(i=0;i<4;i++)//高位0不显示
{
if(shownum[i]==0)
{
shownum[i]=NoDispNum;
}
else
{
break;
}
}
bDisp=dTrue;//*/
}
#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;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; 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; } 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<<8)|Para_L; bWatchReciveReadData=dFalse; } elseif(Add_L==6)//outvol { MainDisplayId_OutVol=(Para_H<<8)|Para_L; bWatchReciveReadData=dFalse; } elseif(Add_L==2)//fre { MenuMainNum=(Para_H<<8)|Para_L; bWatchReciveReadData=dFalse; } } return; } if(Fun_Code==3) { Date_Len=RxRs232DataZone[2]; Para_H=RxRs232DataZone[3]; Para_L=RxRs232DataZone[4]; temp=Date_Len+3; 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; } 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>>8; 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; 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; } /* 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;i<4;i++) { if(shownum[i]==0) { shownum[i]=NoDispNum; } else { break; } } bDisp=dTrue; bWaitAdjust=dFalse; } if((bWaitReciveWriteData==dTrue) &&(Rx_Write_Addr_H==Wait_Write_Addr_H) &&(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<<8)|Rx_Write_Dat_L; } bWaitReciveWriteData=dFalse; shownum[0]=DispNum__;// shownum[1]=DispNum_E;// shownum[2]=DispNum_N;//- shownum[3]=DispNum_D;//0 shownum[4]=DispNum__;//0 bDispLimitTime=dTrue; bDisp=dTrue; } } } voidRS232CheckRXDataDeal2(void) { unsignedintm,kk,jj; unsignedchar*pt; unsignedchari,k; unsignedcharx,y; unsignedchartemp; unsignedcharFun_Code,Date_Len; temp=RxdLen2; pt=&RxRs232DataZone2[0]; m=comp_crc16(pt,temp); i=(m/256); k=(m); x=RxRs232DataZone2[temp]; y=RxRs232DataZone2[temp+1]; if((i! =x)||(k! =y)) { return; } for(i=0;i { TxRs232DataZone[i]=RxRs232DataZone2[i]; } LenTXD=RxdLen2; RxdLen2=0; bTXCodeFlag=dTrue; 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); bTXCodeFlag=dTrue; } //--------------------------------------------------------------------- //--------------------------------------------------------------------- //--------------------------------------------------------------------- voidRS232WriteCmd(unsignedcharDdeviceAdd,unsignedcharStartAddr_H,unsignedcharStartAddr_L,unsignedcharWriteData_H,unsignedcharWriteData_L) { unsignedchar*j; unsignedintm; TxRs232DataZone[0]=DdeviceAdd; TxRs232DataZone[1]=6; TxRs232DataZone[2]=StartAddr_H; TxRs232DataZone[3]=StartAddr_L; TxRs232DataZone[4]=WriteData_H; TxRs232DataZone[5]=WriteData_L; Add_H=StartAddr_H; Add_L=StartAddr_L; j=&TxRs232DataZone[0]; m=comp_crc16(j,6); TxRs232DataZone[6]=(m/256); TxRs232DataZone[7]=(m); bTXCodeFlag=dTrue; } //--------------------------------------------------------------------- //--------------------------------------------------------------------- voidRS232TXStart(void) { unsignedchari; if((bRXingCodeFlag==dTrue)||(bTXingCodeFlag==dTrue))return; RS485Control=1; bTXingCodeFlag=dTrue;//避免TXing时Load //RS232TxByteCount=0; //LED1^=1; for(i=0;i { Udatas(TxRs232DataZone[i]); } LenTXD=0; RS485Control=0; bTXingCodeFlag=dFalse; } //--------------------------------------------------------------------- //--------------------------------------------------------------------- voidRS232TXStart2(void) { unsignedchari; if((bRXingCodeFlag2==dTrue)||(bTXingCodeFlag2==dTrue))return; RS485Control2=1; bTXingCodeFlag2=dTrue;//避免TXing时Load for(i=0;i { 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; } else { MenuDisplayNum000(MainDisplayId_OutVol); } } if(MainDisplayId==2) { if(IsDisplayDcVol==0) { MainDisplayId=3; } else { MenuDisplayNum000(MainDisplayId_DcVol); } } if(MainDisplayId==3) { if(IsDisplayUseSet1==0) { MainDisplayId=4; } else { 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- modbus 驱动 源代码