亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? f280x_modbusprotocol.c

?? MODBUS完整原代碼,很好的東西
?? C
?? 第 1 頁 / 共 2 頁
字號:
//###########################################################################
//
// FILE:	F280x_ModbusProtocol.c
//
// TITLE:	F280x ModbusProtocol Application Functions.
//
//###########################################################################
//
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  1.00| 11 Sep 2003 | L.H. | Changes since previous version (v.58 Alpha)
//      |             |      | Changed USER0-USER11 to USER1-USER12 to match the CPU guide
//###########################################################################
#include "F280x_Application.h"     // F280x Headerfile Include File
#include "F280x_EMC.h"             // F280x Examples Include File
#include "F280x_CommDefault.h"             // F280x Examples Include File

/*CRC 高位字節值表*/
const unsigned int auchCRCHi[] = {
	0x00C1, 0x8140, 0x01C0, 0x8041, 0x01C0,
	0x8041, 0x00C1, 0x8140, 0x01C0, 0x8041, 
	0x00C1, 0x8140, 0x00C1, 0x8140, 0x01C0, 
	0x8041, 0x01C0, 0x8041, 0x00C1, 0x8140, 
	0x00C1, 0x8140, 0x01C0, 0x8041, 0x00C1, 
	0x8140, 0x01C0, 0x8041, 0x01C0, 0x8041, 
	0x00C1, 0x8140, 0x01C0, 0x8041, 0x00C1, 
	0x8140, 0x00C1, 0x8140, 0x01C0, 0x8041, 
	0x00C1, 0x8140, 0x01C0, 0x8041, 0x01C0, 
	0x8041, 0x00C1, 0x8140, 0x00C1, 0x8140, 
	0x01C0, 0x8041, 0x01C0, 0x8041, 0x00C1, 
	0x8140, 0x01C0, 0x8041, 0x00C1, 0x8140, 
	0x00C1, 0x8140, 0x01C0, 0x8041, 0x01C0, 
	0x8041, 0x00C1, 0x8140, 0x00C1, 0x8140, 
	0x01C0, 0x8041, 0x00C1, 0x8140, 0x01C0, 
	0x8041, 0x01C0, 0x8041, 0x00C1, 0x8140, 
	0x00C1, 0x8140, 0x01C0, 0x8041, 0x01C0, 
	0x8041, 0x00C1, 0x8140, 0x01C0, 0x8041, 
	0x00C1, 0x8140, 0x00C1, 0x8140, 0x01C0, 
	0x8041, 0x00C1, 0x8140, 0x01C0, 0x8041, 
	0x01C0, 0x8041, 0x00C1, 0x8140, 0x01C0, 
	0x8041, 0x00C1, 0x8140, 0x00C1, 0x8140, 
	0x01C0, 0x8041, 0x01C0, 0x8041, 0x00C1, 
	0x8140, 0x00C1, 0x8140, 0x01C0, 0x8041, 
	0x00C1, 0x8140, 0x01C0, 0x8041, 0x01C0, 
	0x8041, 0x00C1, 0x8140 
} ; 
/*CRC低位字節值表*/
const unsigned int auchCRCLo[] = {
	0x00C0, 0xC101, 0xC303, 0x02C2, 0xC606, 
	0x07C7, 0x05C5, 0xC404, 0xCC0C, 0x0DCD, 
	0x0FCF, 0xCE0E, 0x0ACA, 0xCB0B, 0xC909, 
	0x08C8, 0xD818, 0x19D9, 0x1BDB, 0xDA1A, 
	0x1EDE, 0xDF1F, 0xDD1D, 0x1CDC, 0x14D4, 
	0xD515, 0xD717, 0x16D6, 0xD212, 0x13D3, 
	0x11D1, 0xD010, 0xF030, 0x31F1, 0x33F3, 
	0xF232, 0x36F6, 0xF737, 0xF535, 0x34F4, 
	0x3CFC, 0xFD3D, 0xFF3F, 0x3EFE, 0xFA3A, 
	0x3BFB, 0x39F9, 0xF838, 0x28E8, 0xE929, 
	0xEB2B, 0x2AEA, 0xEE2E, 0x2FEF, 0x2DED, 
	0xEC2C, 0xE424, 0x25E5, 0x27E7, 0xE626, 
	0x22E2, 0xE323, 0xE121, 0x20E0, 0xA060, 
	0x61A1, 0x63A3, 0xA262, 0x66A6, 0xA767, 
	0xA565, 0x64A4, 0x6CAC, 0xAD6D, 0xAF6F, 
	0x6EAE, 0xAA6A, 0x6BAB, 0x69A9, 0xA868, 
	0x78B8, 0xB979, 0xBB7B, 0x7ABA, 0xBE7E, 
	0x7FBF, 0x7DBD, 0xBC7C, 0xB474, 0x75B5, 
	0x77B7, 0xB676, 0x72B2, 0xB373, 0xB171, 
	0x70B0, 0x5090, 0x9151, 0x9353, 0x5292, 
	0x9656, 0x5797, 0x5595, 0x9454, 0x9C5C, 
	0x5D9D, 0x5F9F, 0x9E5E, 0x5A9A, 0x9B5B, 
	0x9959, 0x5898, 0x8848, 0x4989, 0x4B8B, 
	0x8A4A, 0x4E8E, 0x8F4F, 0x8D4D, 0x4C8C, 
	0x4484, 0x8545, 0x8747, 0x4686, 0x8242, 
	0x4383, 0x4181, 0x8040 
};

//const Uint16 bd_485_delay[]={26667,13333,6667,3333,1666,833,417};//延時1個字符時限
const Uint16 bd_485_delay[]={36667,18333,9167,4583,2292,1146,573};//延時1個字符時限

void GetSoe(Uint16 no);
//-------------------------------------------------------------------
//
//Modbus網絡協議子程序
//

//CRC校驗函數
Uint16 CRC16(Uchar * p_crc_msg, Uint16 crc_len)
{
	unsigned char crc_lo=0xff;
	unsigned char crc_hi=0xff;
	unsigned char crc_index;
	unsigned int  crc_value;
	while(crc_len--)
	{
		crc_index=crc_hi^((*p_crc_msg++)&0xff);//080409crc_index=crc_hi^*p_crc_msg++;
		//crc_hi=crc_lo^auchCRCHi[crc_index];
		//crc_lo=auchCRCLo[crc_index];		
		if(crc_index==crc_index/2*2)
		{//偶數位取其高字節
			crc_hi=crc_lo^(auchCRCHi[crc_index/2]>>8);
			crc_lo=auchCRCLo[crc_index/2]>>8;		
		}
		else
		{//奇數位取其低字節
			crc_hi=crc_lo^(auchCRCHi[crc_index/2]&0xff);
			crc_lo=auchCRCLo[crc_index/2]&0xff;		
		}

	}
	crc_value=crc_hi<<8|crc_lo;
	return crc_value;
}
//Modbus協議初始化
void InitSerModbus(Uchar flag)
{
    if(flag==0x55)//因保存定值的退出不再進行初始化
      return;  
    SerModbus.Access=0;   
    SerModbus.Busy=0;
    SerModbus.receive_count=0;
    SerModbus.send_count=0;
    SerModbus.send_head=0;
    SerModbus.crc_len=0;
    SerModbus.enable_flag=0,
    SerModbus.start_flag=0;
    SerModbus.end_flag=0;
	SerModbus.ck_count=0;
	SerModbus.ck_point=0;
	SerModbus.ck_flag=0;
	SerModbus.event_report=0;
	SerModbus.receive_flag=0;//接收幀計時
	SerModbus.send_flag=0;//發送幀計時
	SerModbus.r_timer=0;//接收幀計時
	SerModbus.s_timer=0;//發送幀計時
	/*
	soe_no=0;
	soe_id=0;
	soe_count=0;
	soe_flag=0;
	*/

}
//Modbus異常應答返回
void ErrorResponse(Uchar err)
{//err-異常碼 1-非法功能,2-非法數據地址,3-非法數據值
	///unsigned char com_type;
	unsigned int  crc_result;
    SerModbus.Busy=0xff;//置通訊狀態忙標志
	SerModbus.send_msg[1]=SerModbus.send_msg[1]|0x80;
	SerModbus.send_msg[2]=err;//異常碼
	SerModbus.crc_len=3;
	crc_result=CRC16((Uchar *)&SerModbus.send_msg[0],SerModbus.crc_len);
	SerModbus.send_msg[3]=crc_result&0xff;
	SerModbus.send_msg[4]=(crc_result>>8)&0xff;
	SerModbus.send_count=SerModbus.crc_len+2;		
	SerModbus.s_timer=0;//發送記時清零	          
	SerModbus.send_flag=0xff;//置發送標志
	//com_type=COM_SER;  
	//ComSendCtrl(com_type);//通訊口發送控制
	ComSendCtrl(Com.port_typ);
}
//Modbus接收通信幀控制
void ModbusFrameCtrl(void)
{	
	Uint16 crc_result,crc_receive;
	//發送幀處理	
	if(SerModbus.send_flag)
	{
	 	//if(SerModbus.s_timer>(Uint32)bd_485_delay[dzbd]*7*SAMPLEPOINT/20000+1)
	 	if(SerModbus.s_timer>((Uint32)bd_485_delay[dzbd]*7*SAMPLEPOINT>>14)-1)
		{//判斷發送間隔停頓時限大于7字符時限
		   SerModbus.enable_flag=0;
		   SerModbus.send_flag=0;//發送標志清零
	       SerModbus.send_count=0;
	       SerModbus.send_head=0;       
	       SerModbus.Access=0;//釋放命令
	       SerModbus.Busy=0;
		   Ser.port_right=0;//釋放通訊口
		   com1_reset_cnt=0;
	       com1_de=0;//關閉422發送使能端
		}
	}
	//接收幀處理	
	if(SerModbus.receive_flag && SerModbus.start_flag)
	{
		//if(SerModbus.r_timer>(Uint32)bd_485_delay[dzbd]*4*SAMPLEPOINT/20000+1)
		if(SerModbus.r_timer>((Uint32)bd_485_delay[dzbd]*4*SAMPLEPOINT>>14)-1)
		{//判斷接收間隔停頓時限大于3.5字符時限
			SerModbus.start_flag=0;
			SerModbus.receive_flag=0;
			SerModbus.end_flag=0x55;//置幀結束標志
		}
	}

	if(SerModbus.end_flag!=0x55)
	{//幀接收處理過程中
		return;
	}
				
	//幀接收完成	
    Ser.port_right=0x55;//控制串口通訊口
	if(SerModbus.receive_count>2)
	    SerModbus.crc_len=SerModbus.receive_count-2;//CRC16校驗長度
	else
		SerModbus.crc_len=0;
    SerModbus.receive_count=0;
	SerModbus.enable_flag=0;
	SerModbus.receive_flag=0;	
	SerModbus.start_flag=0;	
	SerModbus.end_flag=0;			
    SerModbus.send_msg[0]=dzid;
    SerModbus.send_msg[1]=SerModbus.receive_msg[1];
	//地址域解析
	if((SerModbus.receive_msg[0]!=dzid && SerModbus.receive_msg[0]!=0) || SerModbus.crc_len==0)
	{//幀接收解析地址域不匹配
		Ser.port_right=0;
		return;	
	}
		
    //CRC16校驗
	crc_result=CRC16((Uchar *)&SerModbus.receive_msg[0],SerModbus.crc_len);
	crc_receive=SerModbus.receive_msg[SerModbus.crc_len]*256+SerModbus.receive_msg[SerModbus.crc_len+1];
	if(crc_result!=crc_receive)
	{//CRC校驗不成功,非法數據
		Ser.port_right=0;
        return;    
	}
    SerModbus.Access=0xff;//校驗成功置命令啟動標志				

}
void RemoteCtrl()//開出監視控制
{
	Uint16* p_kc_time;
    if (SerModbus.ck_flag==0 || bittst((Uint16 * )&SerModbus.event_report,0)==0)
    {
       return;
    }
    p_kc_time=(Uint16*)&dzkc1_t;  
	if(SerModbus.ck_point<2) SerModbus.ck_point=2;
    if (SerModbus.ck_count>(*(p_kc_time+SerModbus.ck_point-2))*MACROSAMPLE_TIMES)
    {
	   bitclr(&kc_value,SerModbus.ck_point);
	   SerModbus.ck_count=0;
	   SerModbus.ck_flag=0;
	   SerModbus.ck_point=0;
	   bitclr((Uint16 * )&SerModbus.event_report,0);
	}
    else
	   SerModbus.ck_count++;
}		        

//Modbus消息控制
void SerModbusCtrl(void)
{
	Uchar   broad_flag,opcode,flag;
	Uint16  offset,s_addr,d_num,ctrl_point,byte,id,crc_result,value,i,j,k;
	Uint16* p_addr;
	ModbusFrameCtrl();//MODBUS通訊幀控制
	RemoteCtrl();//開出監視控制		        
    //--無接收命令或者通訊忙狀態程序立即返回
    if ((SerModbus.Access!=0xff || Ser.port_right!=0x55) || SerModbus.Busy==0xff) 
    { //--無接收命令或者通訊忙狀態程序立即返回
    	return;
    }
    SerModbus.Busy=0xff;//置通訊狀態忙標志
    SerModbus.send_count=0;
    //com_type=Com.port_typ;
    //com_type=COM_SER;    
    broad_flag=0;
    if(SerModbus.receive_msg[0]==0)
    {//廣播命令
	    broad_flag=0xff;
    }
    opcode=SerModbus.receive_msg[1];//解析功能碼
    if (opcode<1 || opcode>24)
    {//功能碼異常
		ErrorResponse(1);
        return;    
    }    
    switch(opcode)
    {
	case 1://Read Coil Status
			SerModbus.send_count=SerModbus.crc_len+2;
			break;   
	case 2://Read Input Status--遙信量
            ///offset=SerModbus.receive_msg[2]*256+SerModbus.receive_msg[3];
            ///d_num=SerModbus.receive_msg[4]*256+SerModbus.receive_msg[5];
            s_addr=SerModbus.receive_msg[2]*256+SerModbus.receive_msg[3];
            d_num=SerModbus.receive_msg[4]*256+SerModbus.receive_msg[5];
			j=0; while((s_addr<DigitalComm[j].start_addr || s_addr>=DigitalComm[j+1].start_addr) && j<DIGITAL_NO-1){j++;}//檢索起始地址--地址范圍:Start_pre<=x && x<Start_next
			offset = s_addr-DigitalComm[j].start_addr;//起始地址偏移量

			//召喚數據地址檢測
            if (d_num<1 || ((d_num-1)>>4)+6 > MACROCOMM_S_NO)
            {
				ErrorResponse(3);//非法數據值
		        return;    
	        }
			//響應數據幀
			//數據類型為BYTE--8bit
	        SerModbus.send_msg[2]=((d_num-1)>>3)+1;//字節數目
	        for(i=0;i<SerModbus.send_msg[2];i++)
	        {
				//響應數據區域索引
				
				/*
				for(k=0;k<8;k++)
				{
					if (offset>=DigitalComm[j].data_num)
					{
						if ((offset+DigitalComm[j].start_addr)>=DigitalComm[j+1].start_addr && j<DIGITAL_NO-1)
						{
							offset = 0;j++;
							if (bittst(DigitalComm[j].p_addr,offset))
								bitset((Uint16*)&value,k);//狀態量置1
							else
								bitclr((Uint16*)&value,k);//狀態量清0						
						}
						else bitclr((Uint16*)&value,k);//狀態量清0
					}
					else
					{ 
						if (bittst(DigitalComm[j].p_addr,offset))
							bitset((Uint16*)&value,k);//狀態量置1
						else
							bitclr((Uint16*)&value,k);//狀態量清0
					}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人123区| 国产乱子伦一区二区三区国色天香| 亚洲午夜一二三区视频| 久久福利视频一区二区| 北条麻妃国产九九精品视频| 欧美日韩成人在线| 国产精品久久久久久久久免费桃花| 午夜精品久久一牛影视| 国产91精品一区二区| 欧美久久久久久蜜桃| 中文字幕一区二区三区四区不卡| 喷水一区二区三区| 欧美天天综合网| 亚洲欧洲精品一区二区三区不卡| 免费观看30秒视频久久| 欧美四级电影网| 国产精品的网站| 国产成人亚洲精品青草天美| 日韩一区二区三区视频在线观看| 伊人婷婷欧美激情| 99精品视频一区二区| 国产女人18水真多18精品一级做| 久久超级碰视频| 日韩欧美在线1卡| 免费成人美女在线观看.| 97精品视频在线观看自产线路二| 日韩亚洲电影在线| 婷婷国产在线综合| 欧美在线观看一二区| 亚洲欧美综合在线精品| 国产成人av一区二区三区在线观看| 91精品国产综合久久精品麻豆 | 色婷婷精品久久二区二区蜜臂av| 久久久九九九九| 国产乱码字幕精品高清av| 精品国产伦一区二区三区观看方式 | 精品剧情在线观看| 蜜桃久久av一区| 这里是久久伊人| 肉色丝袜一区二区| 日韩一区二区麻豆国产| 麻豆一区二区三| 欧美xxxxx牲另类人与| 韩国理伦片一区二区三区在线播放| 欧美一区二区黄| 经典三级在线一区| 久久久99久久| www.在线成人| 亚洲精品国产a| 欧美日韩一本到| 久久机这里只有精品| 国产肉丝袜一区二区| aa级大片欧美| 亚洲大片一区二区三区| 欧美一级二级在线观看| 精品中文字幕一区二区| 国产情人综合久久777777| www.欧美.com| 亚洲一区二区三区四区在线观看 | 五月天激情综合| 日韩一区二区免费在线观看| 国产一区二区影院| 亚洲特级片在线| 欧美中文字幕亚洲一区二区va在线 | 亚洲精品国产高清久久伦理二区| 777午夜精品免费视频| 国产曰批免费观看久久久| 国产精品成人免费精品自在线观看 | 成人免费毛片高清视频| 亚洲码国产岛国毛片在线| 欧美久久免费观看| 成人黄色在线看| 亚洲午夜免费电影| 久久综合狠狠综合久久综合88 | 国产成人精品1024| 亚洲夂夂婷婷色拍ww47| 欧美一级久久久| 色综合视频在线观看| 免费成人在线网站| 亚洲另类一区二区| 久久久久久99久久久精品网站| 色婷婷综合在线| 精品一区二区三区在线视频| 中文字幕色av一区二区三区| 91精品国产综合久久精品性色| 成人三级伦理片| 男人的j进女人的j一区| 国产精品福利在线播放| 欧美一区二区三区视频免费 | 国产一区二区不卡| 亚洲一区在线观看免费| 国产片一区二区| 日韩精品一区二区三区蜜臀 | 欧美日韩一区二区三区不卡| 国产精品影视网| 天堂成人免费av电影一区| 国产精品久久久久国产精品日日| 91精品国产欧美日韩| 91小视频免费观看| 国产美女精品在线| 久久国产视频网| 亚洲福利国产精品| 夜夜嗨av一区二区三区网页| 亚洲国产激情av| 久久午夜羞羞影院免费观看| 日韩一卡二卡三卡国产欧美| 欧美天天综合网| 欧美视频在线一区| 91行情网站电视在线观看高清版| 成人av在线资源网| 福利91精品一区二区三区| 精品系列免费在线观看| 久久精品国产77777蜜臀| 日本一道高清亚洲日美韩| 亚洲国产美女搞黄色| 亚洲一区二区三区在线看| 亚洲欧美另类图片小说| 亚洲黄色av一区| 一区二区成人在线视频| 亚洲一区二区三区四区在线| 亚洲国产一区视频| 首页综合国产亚洲丝袜| 琪琪一区二区三区| 麻豆freexxxx性91精品| 九九精品一区二区| 国产成人av电影免费在线观看| 国产激情一区二区三区四区 | 91精品国产麻豆| 欧美大片国产精品| 久久理论电影网| 国产精品污污网站在线观看| 中文字幕一区二区三区蜜月| 一区二区三区四区不卡在线| 午夜精品久久久久久久| 日本成人中文字幕在线视频| 精品一区中文字幕| 99热这里都是精品| 欧美亚洲愉拍一区二区| 日韩午夜在线播放| 国产精品久久看| 五月天久久比比资源色| 韩国一区二区在线观看| 99在线精品一区二区三区| 在线亚洲一区观看| 精品久久久久久无| 中文字幕精品在线不卡| 亚洲成人在线免费| 国产一区二区三区久久久| 91一区二区三区在线播放| 欧美日韩一区二区欧美激情| 久久嫩草精品久久久久| 一区二区三区日韩欧美| 久久爱www久久做| 不卡大黄网站免费看| 在线观看91av| 国产精品欧美一级免费| 亚洲成av人片www| 国产jizzjizz一区二区| 欧美三级一区二区| 国产女人水真多18毛片18精品视频| 亚洲3atv精品一区二区三区| 国产一区二区美女诱惑| 欧洲人成人精品| 久久精品人人做人人爽97| 亚洲一区二区三区四区中文字幕| 国产电影精品久久禁18| 欧美高清性hdvideosex| 国产精品美女久久久久aⅴ| 日本午夜精品视频在线观看 | 亚洲成人免费影院| 成人免费看的视频| 精品入口麻豆88视频| 五月婷婷欧美视频| 91色porny蝌蚪| 国产欧美日韩不卡免费| 久久99久久久久久久久久久| 欧美无砖专区一中文字| 国产精品久久久久毛片软件| 精品一区二区免费在线观看| 欧美日韩一区二区在线视频| 中文字幕中文在线不卡住| 狠狠色伊人亚洲综合成人| 在线播放视频一区| 亚洲国产综合色| 欧美在线一二三| 自拍偷拍国产精品| 丁香婷婷综合色啪| 久久久久国产精品麻豆| 精品在线一区二区| 欧美一区二区日韩一区二区| 亚洲高清免费在线| 欧美视频在线不卡| 亚洲午夜激情网站| 在线精品亚洲一区二区不卡| 亚洲欧美偷拍三级| 91捆绑美女网站| 亚洲精品国产精品乱码不99 | 成人av动漫网站| 国产精品午夜春色av| 成人深夜视频在线观看|