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

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

?? mmbl21xx.c

?? modbus 運用事例
?? C
字號:

/*  SAMPLE PROGRRAM **********************************************************

SAMPLE NAME:       		MM_BL21XX.C         

DESCRIPTION:				Modbus Master Sample program.  Written for use with
								the BL2100 series SBC's, Though it can be modified
								for any rabbit device with an RS232/RS485 channel.
								
								 

USER INSTRUCTIONS:		Run The MS_BL21XX.C sample program on the slave device.
								Setup to Match the slaves io and protocol settings
								with the user configuration area macros below.
								
								The Following sample is setup to read/write
								
								4 digital outputs
								4 digital inputs
								4 analog outputs	
								4 analog inputs
								
								The analog channels are setup to send/receive
								a floating point representation.  It will use
								2 registers per channel and convert from/to 
								floating point values.
								
								The Slave program is setup to use all of the BL21xx
								resources.  
								
								The following modbus registers are used for this
								sample;
								
								0x10001 	-> 0x10004	Output Coils
								0x20001	-> 0x20004  Input  Status
								0x30001	-> 0x30008  Analog Output Writing
														   2 regs per converted from float
								0x40001  -> 0x40008	Analog Input Status 
															2 regs per converted to (float)


END SAMPLE DESCRIPTION *******************************************************/




/*============================================================================*\
	
									USER CONFIGURATION AREA

\*============================================================================*/

//	Defines the Baudrate to use
#define	MODBUS_BAUDRATE	9600
// Defines the Protocol.  0 = ASCII, 1 = RTU
#define	MODBUS_PROTOCOL				1

// Defines the ms output delay between changes
#define	MODBUS_OUTPUT_DELAY	  		500

/*============================================================================*/




// Set the variable class to auto
#class	auto

// If not using separate I & D then move as much code into xmem as possible
#ifndef __SEPARATE_INST_DATA__
	#memmap xmem
#endif

// Modbus Master library
#use	"mmz_rab.lib"


// Setup serial port D in/out serial buffers.
#define	DINBUFSIZE	255
#define	DOUTBUFSIZE	255

// Defines the Serial port type. 0 = RS485, 1 = RS232
#define	MODBUS_SERIAL					0

// Defines the number of Digital outputs on the slaves
#define	MODBUS_DIGITAL_OUTPUTS		4

// Defines the Number of Digital inputs on the slaves
#define	MODBUS_DIGITAL_INPUTS		4

// Defines the number of analog inputs on the slaves
#define	MODBUS_ANALOG_INPUTS			4

// Defines the number of analog outputs on the slaves
#define	MODBUS_ANALOG_OUTPUTS		4

#define	MODBUS_SLAVES_COUNT			1

// for display purposes only
const char *onOff[] =
{
	"LOW ",
	"HIGH",
};

// Slave Data structure
typedef struct
{
 	// Slaves address	
	int	addr;
	// Slaves current digital output status
 	int	digOutShadow[MODBUS_DIGITAL_OUTPUTS+1];
 	// Slaves current digital input status 
	int	digInShadow[MODBUS_DIGITAL_INPUTS+1];  
	// Slaves current analog output status
	float	anaOutShadow[MODBUS_ANALOG_OUTPUTS+1];
	// Slaves current analog input status
	float	anaInShadow[MODBUS_ANALOG_INPUTS+1];	
	// Last error detected in the modbus transactions
	int	Errors;
} _mSlaves;

// 1 structure per slave
_mSlaves mSlaves[MODBUS_SLAVES_COUNT+1];

/*============================================================================*\
 			MODBUS FUNCTION (SEE FUNCTION DESCRIPTION FOR DETAILS)
\*============================================================================*/


nodebug
void	mmDrx  (void)
{
	while (serDwrUsed() || BitRdPortI(SDSR,2) || BitRdPortI(SDSR,3));
	ser485Rx();
	serDrdFlush();
}

nodebug
void mmDtx()
{
  ser485Tx();	 
}

nodebug
int mmDopen(unsigned long qBaud)
{
	if (serDopen(qBaud))
	{  	 
		serDparity(PARAM_EPARITY);
		serDdatabits(PARAM_8BIT); 
		serMode(0);  
		return 1;
	}
	return 0;   
}

/*==========================================================================*\
					Application specific functions with modbus functionality
\*==========================================================================*/

// For reading the status of the slaves digital outputs

int	readOutputs( _mSlaves *Slave )
{
	static int retval;
	static int outs;
	costate
	{
		retval = 0;
		// Send a Coil Read command, and wait for either a reply,
		// or a timeout err.
	  	waitfor( (Slave -> Errors = \
	  				 mmOutRd(Slave -> addr,	      
								0x0000,
								MODBUS_DIGITAL_OUTPUTS,
								&outs)					
								
				  	) != MM_BUSY );
		// if the reply from the slave was good, store the results		  	
	 	if (Slave -> Errors== MM_OK)	
	 	{
	 		// copying the results for the read to the shadow registers
	 		Slave -> digOutShadow[0] = bit(&outs,0);
	 		Slave -> digOutShadow[1] = bit(&outs,1); 
	 		Slave -> digOutShadow[2] = bit(&outs,2);
	 		Slave -> digOutShadow[3] = bit(&outs,3);     
	 		retval = 1;     
	 	}
	 	// if the reply was bad, return the bad reply code
	 	// (codes are located in the mm_rab.lib
	 	else retval = Slave -> Errors;  
	}
	return (retval);
}

// For reading the status of the slaves digital inputs
int	readInputs(_mSlaves *Slave ) 
{
	static int retval;
	static int ins;
	costate
	{
		retval = 0;
		// Send a Input Read command, and wait for either a reply,    
		// or a timeout err.
	  	waitfor( (Slave -> Errors = \
	  				 mmIn	( Slave -> addr,	      
							  0x0000,
							  MODBUS_DIGITAL_INPUTS,
							  &ins)             
							  
				  	) != MM_BUSY );
		// if the reply from the slave was good, store the results		    
	 	if (Slave ->  Errors == MM_OK)	
	 	{
	 		// copying the results for the read to the shadow registers     
	 	   Slave -> digInShadow[0] = bit(&ins,0);	    
	 		Slave -> digInShadow[1] = bit(&ins,1); 
	 		Slave -> digInShadow[2] = bit(&ins,2); 
	 		Slave -> digInShadow[3] = bit(&ins,3);
	 		retval = 1;     
	 	}
	 	else retval = Slave ->  Errors ;  
	}
	// if the reply was bad, return the bad reply code  
	// (codes are located in the mm_rab.lib
	return (retval);
}
// For reading the status of the slaves analog inputs
// Inputs will come in as two registers, and then converted to float values

int readAnaInputs( _mSlaves *Slave)
{
	static int retval;
	static int cnt;
	static unsigned int anaRegs[1+MODBUS_ANALOG_INPUTS * 2];  
	costate
	{
		retval = 0;
		// Send a Read Input Register command.
		waitfor( (Slave -> Errors = \    
					mmInput( Slave -> addr,	                
							  0x0000,
							  MODBUS_ANALOG_INPUTS * 2,
							  &anaRegs[0])          
				   ) != MM_BUSY );
	  if (Slave ->  Errors == MM_OK)	 
	  {
	 		cnt = 0;
	 		for (cnt = 0 ; cnt <MODBUS_ANALOG_INPUTS; cnt++)
	 		{     
	 			Slave ->anaInShadow[cnt] = *(float*)&anaRegs[(cnt*2)]; 		
	  		}
	  		retval = 1 ;    
	  }
	    
	  else retval = Slave ->  Errors ;        
	}
	return retval; 

}
// for writing to the digital outputs.
// 
int	writeOutputs(_mSlaves *Slave)
{
	static int retval;
	static long del;
	static char outs;  
	#GLOBAL_INIT {del = 0;}
	costate
	{
		retval = 0;
		if ( del < MS_TIMER)
		{
	  		if (Slave ->digOutShadow[0] == 1)
	  				outs = 0;
	  		else
	  		{	
	  		 		outs = 0xFF;	      
	  		}		
	 		waitfor( (Slave -> Errors = mmForceCoils(Slave -> addr,
	 				  				0x0000,
	 								MODBUS_DIGITAL_OUTPUTS,
	 								&outs		) )!= MM_BUSY);
	 		if (Slave ->  Errors == MM_OK)	retval = 1;						
	 		else retval = Slave ->  Errors ;
	 		del = MS_TIMER + MODBUS_OUTPUT_DELAY;	          
		}
		else
		{
			retval = 1;
		}
	}
	return retval;	
		
	

}

// For reading the status of the slaves analog outputs
// Output values are floats, and will be converted to two integer registers
// before sending to the slaves

writeAnaOut (_mSlaves *Slave)
{
	static int retval;
	static unsigned int anaRegs[2];   
	static int cnt;
	static long del;
	#GLOBAL_INIT {del = 0;}
	costate  
	{
	 	if (del < MS_TIMER)
	 	{	
			retval = 0;
			for (cnt = 0 ; cnt < MODBUS_ANALOG_OUTPUTS+1  ; cnt++)
			{
		  		if (Slave -> anaOutShadow[cnt] <  8.75 )    
		  			 Slave -> anaOutShadow[cnt] += 1.25;
		  			       
		 		else Slave -> anaOutShadow[cnt] = 0.00;
		  		*(float*) &anaRegs[0] = Slave -> anaOutShadow[cnt];
		  		waitfor( (Slave -> Errors = \       
						mmPresetRegs(Slave -> addr,
										0x0000 + (cnt * 2),
										2,
										anaRegs
										) ) != MM_BUSY);
		  		
			}           
			if (Slave ->  Errors == MM_OK)	 
	  		{
	 			retval = 1;     
	  		}
	    	else retval = Slave ->  Errors ;
	    	del = MS_TIMER + MODBUS_OUTPUT_DELAY;        
		}
		else 
		{
			retval = 1;
		}
	}
	return retval;
}
// The following are for display purposes only

void DispStr(int x, int y, char *s)
{
   x += 0x20;
   y += 0x20;
   printf ("\x1B=%c%c%s", x, y, s);
}

int	updateInputs(_mSlaves *Slave)
{
	char buff[100];
	sprintf(buff," %s        %s        %s        %s",
			 			onOff[Slave -> digInShadow[0]],
			 			onOff[Slave -> digInShadow[1]],
			 			onOff[Slave -> digInShadow[2]],
			 			onOff[Slave -> digInShadow[3]]);         
	DispStr(20,10,buff);
	return 1;

}

int	updateOutputs(_mSlaves *Slave)
{
	char buff[100];
	sprintf(buff," %s        %s        %s        %s",
			 			onOff[Slave -> digOutShadow[0]],
			 			onOff[Slave -> digOutShadow[1]],      
			 			onOff[Slave -> digOutShadow[2]],      
			 			onOff[Slave -> digOutShadow[3]]);         
	DispStr(20,14,buff);
	return 1;

}

int	updateAnaIns(_mSlaves *Slave)
{
	char buff[100];  
	sprintf(buff,"%5.2f       %5.2f        %5.2f      %5.2f",
			 			Slave ->anaInShadow[0],
			 			Slave ->anaInShadow[1],
			 			Slave ->anaInShadow[2],
			 			Slave ->anaInShadow[3]
			 			);           
	DispStr(20,18,buff);
	return 1;	

}


main ()
{

	brdInit();
	memset (mSlaves,0x00,sizeof(mSlaves) );	
#if (MODBUS_PROTOCOL)
	mmrDinit(MODBUS_BAUDRATE);  
#else
	mmaDinit(MODBUS_BAUDRATE);  
#endif
	// Set the Slave address 
	mSlaves[1].addr = 1;
	// display the title screen
	DispStr(20,2,"      MODBUS MASTER SAMPLE PROGRAM");
	DispStr(20,4," CHAN        CHAN        CHAN       CHAN");
	DispStr(20,5," 0            1           2          3  ");  
	DispStr(20,6,"----------------------------------------");
	
	DispStr(20,8,"             DIGITAL OUTPUTS          ");
	DispStr(20,9,"----------------------------------------");
	
	DispStr(20,12,"             DIGITAL INPUTS          ");  
	DispStr(20,13,"---------------------------------------");
	
	DispStr(20,16,"             ANALOG INPUTS          ");    
	DispStr(20,17,"---------------------------------------"); 
	
	for (;;)
	{
		costate
		{
			// Write to the output coils
			waitfor( writeOutputs(&mSlaves[1])); 
			// Write to the analog output channels
			waitfor( writeAnaOut(&mSlaves[1]));      
			// Read the output coil status
		 	waitfor( readOutputs(&mSlaves[1]));
			// Read the input status
		 	waitfor( readInputs(&mSlaves[1]));
			// Read the analog input channels
		 	waitfor( readAnaInputs(&mSlaves[1]));
			// Display the output status
		 	waitfor( updateOutputs(&mSlaves[1]));     
			// Display the input status
		 	waitfor( updateInputs(&mSlaves[1]));
			// Display the analog input status
		 	waitfor( updateAnaIns(&mSlaves[1]));     
		 	
		}
		
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩理论片在线| 91激情在线视频| 国产精品乱码一区二区三区软件| 欧美日韩国产电影| 精品亚洲国内自在自线福利| 国产欧美一区二区三区沐欲 | 一区二区三区免费| 久久综合一区二区| 日本视频在线一区| 亚洲日穴在线视频| 久久久亚洲精品石原莉奈| 色天使色偷偷av一区二区| 国产麻豆视频一区| 激情欧美日韩一区二区| 天堂资源在线中文精品| 中文字幕一区二区三区色视频| 欧美日韩成人一区二区| 一本久久精品一区二区| 91视频国产观看| 色诱亚洲精品久久久久久| 成人国产精品免费观看动漫 | 色综合视频一区二区三区高清| 日本大胆欧美人术艺术动态| 中文字幕av一区二区三区高 | 日韩限制级电影在线观看| 91麻豆精品国产91久久久资源速度 | 99re这里都是精品| 国产成人精品三级麻豆| 国产在线国偷精品产拍免费yy| 免费一区二区视频| 国产真实乱子伦精品视频| 国产成人免费视频一区| 91同城在线观看| 欧美乱熟臀69xxxxxx| 精品国产乱码久久久久久浪潮| 国产精品久久久久影视| 日韩专区在线视频| 国产在线精品免费av| 99riav一区二区三区| 欧美天堂一区二区三区| 欧美激情综合五月色丁香小说| 日韩精彩视频在线观看| 成人性色生活片免费看爆迷你毛片| 国产成人午夜高潮毛片| 色综合天天综合| 日本不卡视频在线| 色狠狠一区二区| 久久欧美中文字幕| 日韩精品成人一区二区在线| 91免费看`日韩一区二区| 日韩一级免费观看| 亚洲国产sm捆绑调教视频| 高清beeg欧美| 欧美一区二区久久| 亚洲女人小视频在线观看| 国产精品综合网| 精品乱码亚洲一区二区不卡| 亚洲狠狠爱一区二区三区| 久久成人久久爱| 欧美肥妇毛茸茸| 美女网站在线免费欧美精品| 欧美精品在线观看播放| 青青草成人在线观看| 欧美日韩大陆在线| 久久精品国产澳门| 337p日本欧洲亚洲大胆色噜噜| 韩国av一区二区三区| 久久亚洲影视婷婷| 精品亚洲aⅴ乱码一区二区三区| 91超碰这里只有精品国产| 亚洲久本草在线中文字幕| 9i看片成人免费高清| 秋霞电影网一区二区| 日韩久久免费av| 粗大黑人巨茎大战欧美成人| 一区二区三区精品久久久| 欧美一区二区三区在线电影| 国产一区二区三区精品欧美日韩一区二区三区| 欧美成人精品二区三区99精品| 蓝色福利精品导航| 久久久电影一区二区三区| 色视频成人在线观看免| 国内外精品视频| 亚洲444eee在线观看| 国产精品久久午夜| 日韩精品一区二区三区中文精品| 成人国产免费视频| 国产一区二区不卡老阿姨| 国产日韩一级二级三级| 91精品国产色综合久久久蜜香臀| 极品美女销魂一区二区三区 | 精品欧美一区二区久久| 99久久久国产精品| 国产另类ts人妖一区二区| 五月婷婷激情综合| 亚洲老司机在线| 中文字幕第一页久久| 精品久久国产字幕高潮| 欧美日韩一级黄| www.亚洲免费av| 国产精品亚洲第一| 国产乱对白刺激视频不卡| 久久99精品国产麻豆婷婷| 首页综合国产亚洲丝袜| 亚洲国产乱码最新视频| 亚洲一区二区三区激情| 一区二区视频在线看| 一区二区三区成人| 亚洲中国最大av网站| 尤物视频一区二区| 亚洲免费大片在线观看| 美女精品一区二区| 国产在线一区观看| 波多野结衣中文字幕一区二区三区 | 欧美日韩在线直播| 欧美另类一区二区三区| 日韩一区二区影院| 久久综合资源网| 日韩久久一区二区| 日日夜夜一区二区| 国产一区二区三区四区五区美女 | 91在线精品一区二区三区| 91国产免费观看| 日韩免费观看高清完整版| 国产片一区二区三区| 午夜欧美在线一二页| 九九精品视频在线看| 91麻豆蜜桃一区二区三区| 欧美tickling挠脚心丨vk| 亚洲精品视频免费看| 日韩欧美亚洲国产精品字幕久久久 | 99久久er热在这里只有精品15| 欧美日韩免费在线视频| 久久丝袜美腿综合| 日本欧美加勒比视频| 91香蕉视频污| 国产欧美一区视频| 日韩成人免费在线| 一二三四区精品视频| 韩国v欧美v亚洲v日本v| 3751色影院一区二区三区| 中文字幕日韩欧美一区二区三区| 久久国产人妖系列| 欧美精品在线一区二区三区| 亚洲综合一区二区| 91久久精品一区二区三区| 中文字幕综合网| 丰满白嫩尤物一区二区| 国产一区二区三区国产| 久久精品人人做人人爽人人| 麻豆久久一区二区| 久久亚洲精品小早川怜子| 国产麻豆91精品| 国产亚洲精品精华液| 国产一区二区三区四| 国产午夜精品美女毛片视频| 美日韩一区二区| 日韩美女一区二区三区四区| 久久亚洲二区三区| 91丨九色丨尤物| 日韩电影在线免费观看| 国产日韩欧美高清| 成人黄色一级视频| 五月天激情综合| 久久精品一区八戒影视| 91国偷自产一区二区开放时间 | 婷婷成人激情在线网| 日韩三级电影网址| 91一区一区三区| 国内精品在线播放| 亚洲色图欧美偷拍| 日韩一区二区在线看片| 国产精品一品二品| 亚洲国产精品人人做人人爽| 久久综合九色综合欧美98| 一本色道a无线码一区v| 日韩美女视频在线| 国产精品午夜电影| 亚洲婷婷综合久久一本伊一区| 亚洲色图制服诱惑| 韩国女主播成人在线| 日韩欧美国产高清| 久久美女艺术照精彩视频福利播放 | 亚洲网友自拍偷拍| 亚洲一区二区三区四区在线| 亚洲一区中文日韩| 视频一区视频二区中文字幕| 精品制服美女丁香| 成人激情小说网站| 日韩一区二区不卡| 国产精品久久久久久户外露出| 亚洲摸摸操操av| 亚洲第一二三四区| 麻豆精品新av中文字幕| 丁香激情综合国产| 欧美一级午夜免费电影| 亚洲精品综合在线| 国产乱一区二区| 欧美成人艳星乳罩| 婷婷丁香久久五月婷婷|