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

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

?? mbm.c

?? modbus linux libiary!
?? C
字號:
#include <modbus.h>#include <signal.h>int Mb_device;				/* device tu use */int Mbm_Pid_Child;		/* PID child used to read the slave answer */int Mbm_Pid_Sleep;		/* PID use to wait the end of the timeout */byte *Mbm_result;			/* byte readed on the serial port : answer of the slave *//************************************************************************************		Mbm_get_data : thread reading data on the serial port*************************************************************************************input :-------len	:	number of data to read;no output************************************************************************************/void Mbm_get_data(int *len ){	int i;	byte read_data;	Mbm_Pid_Child=getpid();		if (Mb_verbose)			fprintf(stderr,"starting receiving data, total length : %d \n",*len);	for(i=0;i<(*len);i++)	{		/* read data */		read(Mb_device,&read_data,1);		/* store data to the slave answer packet */		Mbm_result[i]=read_data;				/* call the pointer function if exist */		if(Mb_ptr_rcv_data!=NULL)			(*Mb_ptr_rcv_data)(read_data);		if (Mb_verbose)			fprintf(stderr,"receiving byte :0x%x %d (%d)\n",read_data,read_data,Mbm_result[i]);	}	if (Mb_verbose)		fprintf(stderr,"receiving data done\n");	Mbm_Pid_Child=0;}int Csm_get_data(int len, int timeout){	int i;	byte read_data;	time_t t;	if (Mb_verbose)		fprintf(stderr,"in get data\n");		t = (time(NULL) + ((timeout * 2)/1000));	for(i=0;i<(len);i++)	{		if(t < time(NULL))			return(0);		/* read data */		while(read(Mb_device,&read_data,1) == 0){			if(t < time(NULL))				return(0);		}		/* store data to the slave answer packet */		Mbm_result[i]=read_data;				if (Mb_verbose)			fprintf(stderr,"receiving byte :0x%x %d (%d)\n",read_data,read_data,Mbm_result[i]);	  	}	if (Mb_verbose)		fprintf(stderr,"receiving data done\n");	return(1);}/************************************************************************************		Mbm_sleep : thread wait timeout*************************************************************************************input :-------timeout : duduration of the timeout in msno output************************************************************************************/void Mbm_sleep(int *timeout){	Mbm_Pid_Sleep=getpid();	if (Mb_verbose)		fprintf(stderr,"sleeping %d ms\n",*timeout);	usleep(*timeout*1000);	Mbm_Pid_Sleep=0;	if (Mb_verbose)		fprintf(stderr,"Done sleeping %d ms\n",*timeout);}/************************************************************************************		Mbm_send_and_get_result : send data, and wait the answer of the slave*************************************************************************************input :-------trame	  : packet to sendtimeout	: duduration of the timeout in mslong_emit : length of the packet to sendlongueur  : length of the packet to readanswer :--------0			: timeout failure1			: answer ok************************************************************************************/int Mbm_send_and_get_result(byte trame[], int timeout, int long_emit, int longueur){	int i,stat1=-1,stat2=-1;	pthread_t thread1,thread2;	Mbm_result = (unsigned char *) malloc(longueur*sizeof(unsigned char));	/* clean port */	tcflush(Mb_device, TCIFLUSH);	/* create 2 threads for read data and to wait end of timeout*/	pthread_create(&thread2, NULL,(void*)&Mbm_sleep,&timeout);	pthread_detach(thread2);	pthread_create(&thread1, NULL,(void*)&Mbm_get_data,&longueur);	pthread_detach(thread1);	if (Mb_verbose)		fprintf(stderr,"start writing \n");	for(i=0;i<long_emit;i++)	{		/* send data */		write(Mb_device,&trame[i],1);		/* call pointer function if exist */		if(Mb_ptr_snd_data!=NULL)			(*Mb_ptr_snd_data)(trame[i]);	}  if (Mb_verbose)		fprintf(stderr,"write ok\n");	do {		if (Mbm_Pid_Child!=0)			/* kill return 0 if the pid is running or -1 if the pid don't exist */			stat1=0;		else			stat1=-1;		if (Mbm_Pid_Sleep!=0)			stat2=0;		else			stat2=-1;		/* answer of the slave terminate or and of the timeout */		if (stat1==-1 || stat2==-1) 			break;		usleep(timeout);	} while(1); 	if (Mb_verbose)	{		fprintf(stderr,"pid reading %d return %d\n",Mbm_Pid_Child,stat1);		fprintf(stderr,"pid timeout %d return %d\n",Mbm_Pid_Sleep,stat2);	}	/* stop both childs */	Mbm_Pid_Child=0;	Mbm_Pid_Sleep=0;	pthread_cancel(thread1);	pthread_cancel(thread2);	/* error : timeout fealure */	if (stat1==0)	{		free(Mbm_result);		return 0;	}	/* ok : store the answer packet in the data trame */	for (i=0;i<=longueur;i++)		trame[i]=Mbm_result[i];		free(Mbm_result);	return 1;}		int Csm_send_and_get_result(unsigned char trame[], int timeout, int long_emit, int longueur){	int i;	int ret;	Mbm_result = trame;		if (Mb_verbose)		fprintf(stderr,"start writing \n");	for(i=0;i<long_emit;i++)	{		/* send data */		write(Mb_device,&trame[i],1);		/* call pointer function if exist */		if(Mb_ptr_snd_data!=NULL)			(*Mb_ptr_snd_data)(trame[i]);	}  if (Mb_verbose)		fprintf(stderr,"write ok\n");	Mb_tio.c_cc[VMIN]=0;	Mb_tio.c_cc[VTIME]=1;	if (tcsetattr(Mb_device,TCSANOW,&Mb_tio) <0) {		perror("Can't set terminal parameters ");		return 0;	}  	ret = Csm_get_data(longueur, timeout);	Mb_tio.c_cc[VMIN]=1;	Mb_tio.c_cc[VTIME]=0;	if (tcsetattr(Mb_device,TCSANOW,&Mb_tio) <0) {		perror("Can't set terminal parameters ");		return 0 ;	}		return ret;}/************************************************************************************					Mbm_master : comput and send a master packet*************************************************************************************input :-------Mb_trame	  : struct describing the packet to comput						device		: device descriptor						slave 		: slave number to call						function 	: modbus function						address		: address of the slave to read or write						length		: lenght of data to senddata_in	  : data to send to the slavedata_out	  : data to read from the slavetimeout	  : timeout duration in msptrfoncsnd : function to call when master send data (can be NULL if you don't whant to use it)ptrfoncrcv : function to call when master receive data (can be NULL if you don't whant to use it)*************************************************************************************answer :--------0 : OK-1 : unknow modbus function-2 : CRC error in the slave answer-3 : timeout error-4 : answer come from an other slave*************************************************************************************/int Mb_master(Mbm_trame Mbtrame,int data_in[], int data_out[],void *ptrfoncsnd, void *ptrfoncrcv){	int i,longueur,long_emit;	int slave, function, adresse, nbre;	byte trame[256];	Mb_device=Mbtrame.device;	slave=Mbtrame.slave;	function=Mbtrame.function;	adresse=Mbtrame.address;	nbre=Mbtrame.length;	Mb_ptr_snd_data=ptrfoncsnd;	Mb_ptr_rcv_data=ptrfoncrcv;			switch (function)	{		case 0x03:		case 0x04:			/* read n byte */			trame[0]=slave;			trame[1]=function;			trame[2]=adresse>>8;			trame[3]=adresse&0xFF;			trame[4]=nbre>>8;			trame[5]=nbre&0xFF;			/* comput crc */			Mb_calcul_crc(trame,6);			/* comput length of the packet to send */			long_emit=8;			break;				case 0x05: //write a single coil			trame[0]=slave;			trame[1]=function;			trame[2]=adresse>>8;			trame[3]=adresse&0xFF;			trame[4]=data_in[0]>>8;			trame[5]=data_in[0]&0xFF;			/* comput crc */			Mb_calcul_crc(trame,6);			/* comput length of the packet to send */			long_emit=8;			break;					case 0x06:			/* write one byte */			trame[0]=slave;			trame[1]=function;			trame[2]=adresse>>8;			trame[3]=adresse&0xFF;			trame[4]=data_in[0]>>8;			trame[5]=data_in[0]&0xFF;			/* comput crc */			Mb_calcul_crc(trame,6);			/* comput length of the packet to send */			long_emit=8;			break;		case 0x07:			/* read status */			trame[0]=slave;			trame[1]=function;			/* comput crc */			Mb_calcul_crc(trame,2);			/* comput length of the packet to send */			long_emit=4;			break;					case 0x08:			/* line test */			trame[0]=slave;			trame[1]=0x08;			trame[2]=0;			trame[3]=0;			trame[4]=0;			trame[5]=0;			Mb_calcul_crc(trame,6);			/* comput length of the packet to send */			long_emit=8;			break;					case 0x10:			/* write n byte  */			trame[0]=slave;			trame[1]=0x10;			trame[2]=adresse>>8;			trame[3]=adresse&0xFF;			trame[4]=nbre>>8;			trame[5]=nbre&0xFF;			trame[6]=nbre*2;			for (i=0;i<nbre;i++)			{				trame[7+i*2]=data_in[i]>>8;				trame[8+i*2]=data_in[i]&0xFF;			}			/* comput crc */			Mb_calcul_crc(trame,7+nbre*2);			/* comput length of the packet to send */			long_emit=(nbre*2)+9;			break;		default:			return -1;	}	if (Mb_verbose) 	{		fprintf(stderr,"send packet length %d\n",long_emit);		for(i=0;i<long_emit;i++)			fprintf(stderr,"send packet[%d] = %0x\n",i,trame[i]);	}		/* comput length of the slave answer */	switch (function)	{		case 0x03:		case 0x04:			longueur=5+(nbre*2);			break;				case 0x05:		case 0x06:		case 0x08:		case 0x10:		longueur=8;			break;		case 0x07:		longueur=5;			break;		default:			return -1;			break;	}	/* send packet & read answer of the slave		answer is stored in trame[] */	for(i = 0;i < 4; i++){		if(Csm_send_and_get_result(trame,Mbtrame.timeout,long_emit,longueur)){			i = 1;			break;		}	}	if(i != 1) 		return -3;	/* timeout error */  	if (Mb_verbose)	{		fprintf(stderr,"answer :\n");		for(i=0;i<longueur;i++)			fprintf(stderr,"answer packet[%d] = %0x\n",i,trame[i]);	}		if (trame[0]!=slave)		return -4;	/* this is not the right slave */	switch (function)	{		case 0x03:		case 0x04:			/* test received data */			if (trame[1]!=0x03 && trame[1]!=0x04)				return -2;			if (Mb_test_crc(trame,3+(nbre*2)))				return -2;			/* data are ok */			if (Mb_verbose)				fprintf(stderr,"Reader data \n");			for (i=0;i<nbre;i++)			{				data_out[i]=(trame[3+(i*2)]<<8)+trame[4+i*2];				if (Mb_verbose)					fprintf(stderr,"data %d = %0x\n",i,data_out[i]);			}			break;					case 0x05: //write a single coil			/* test received data */			if (trame[1]!=0x05)				return -2;			if (Mb_test_crc(trame,6))				return -2;			/* data are ok */			if (Mb_verbose)				fprintf(stderr,"data stored succesfull !\n");			break;				case 0x06:			/* test received data */			if (trame[1]!=0x06)				return -2;			if (Mb_test_crc(trame,6))				return -2;			/* data are ok */			if (Mb_verbose)				fprintf(stderr,"data stored succesfull !\n");			break;		case 0x07:			/* test received data */			if (trame[1]!=0x07)				return -2;			if (Mb_test_crc(trame,3))				return -2;			/* data are ok */			data_out[0]=trame[2];	/* store status in data_out[0] */			if (Mb_verbose)				fprintf(stderr,"data  = %0x\n",data_out[0]);			break;		case 0x08:			/* test received data */			if (trame[1]!=0x08)				return -2;			if (Mb_test_crc(trame,6))				return -2;			/* data are ok */			if (Mb_verbose)				fprintf(stderr,"Loopback test ok \n");			break;		case 0x10:			/* test received data */			if (trame[1]!=0x10)				return -2;			if (Mb_test_crc(trame,6))				return -2;			/* data are ok */			if (Mb_verbose)				fprintf(stderr,"%d setpoint stored succesfull\n",(trame[4]<<8)+trame[5]);			break;		default:			return -1;			break;	}	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品丝袜在线| 色猫猫国产区一区二在线视频| 欧美日本一区二区在线观看| 亚洲婷婷国产精品电影人久久| 不卡的av电影在线观看| 亚洲视频免费看| 色欧美乱欧美15图片| 亚洲黄色在线视频| 欧美精品色综合| 久久电影网电视剧免费观看| 久久青草欧美一区二区三区| av亚洲精华国产精华| 一区二区三区波多野结衣在线观看| 欧美婷婷六月丁香综合色| 午夜激情一区二区三区| 精品国产精品网麻豆系列| 国产成人av影院| 亚洲人123区| 91精品国产综合久久精品性色| 蜜臀av一级做a爰片久久| 国产亚洲欧美日韩在线一区| 国产女同性恋一区二区| 国产一区二区三区四区五区美女| 日本一区二区三区国色天香 | 久久综合久久鬼色中文字| 国产盗摄女厕一区二区三区| 亚洲美女免费视频| 欧美不卡一区二区三区四区| av不卡免费在线观看| 亚洲图片欧美色图| 久久免费的精品国产v∧| 91久久香蕉国产日韩欧美9色| 免费亚洲电影在线| 亚洲免费在线电影| 日韩欧美123| 日本久久电影网| 精品一区二区三区蜜桃| 亚洲黄色片在线观看| 久久只精品国产| 欧美视频一二三区| 国产成人8x视频一区二区| 亚洲国产另类av| 欧美激情在线免费观看| 精品视频一区二区三区免费| 国产丶欧美丶日本不卡视频| 中文字幕欧美三区| 欧美精品精品一区| 97久久人人超碰| 日韩影院在线观看| 亚洲欧美成aⅴ人在线观看| 欧美日韩国产美女| 色偷偷88欧美精品久久久| 卡一卡二国产精品| 五月激情六月综合| 国产午夜精品久久久久久免费视| 91久久免费观看| 激情av综合网| 午夜欧美电影在线观看| 国产精品对白交换视频| 日韩欧美亚洲国产精品字幕久久久 | 91久久精品一区二区| 久国产精品韩国三级视频| 亚洲国产精品一区二区久久恐怖片 | 成人av在线网站| 人人精品人人爱| 日本成人在线网站| 亚洲婷婷综合久久一本伊一区| 日本一区二区视频在线| 日韩区在线观看| 欧美精品xxxxbbbb| 欧美色爱综合网| 国产99久久久国产精品潘金网站| 狠狠色狠狠色合久久伊人| 五月婷婷激情综合网| 亚洲精品久久久蜜桃| 欧美激情综合五月色丁香| 国产欧美一区二区精品性色超碰| 欧美久久久久久久久久| 欧美日韩高清一区二区三区| 一本一道综合狠狠老| 日本久久一区二区| 一本大道久久精品懂色aⅴ| 老汉av免费一区二区三区| 婷婷国产在线综合| 亚洲黄色小视频| 亚洲成人激情自拍| 亚洲一区免费在线观看| 五月天丁香久久| 婷婷成人综合网| 日本最新不卡在线| 日韩不卡免费视频| 久久精品国产精品青草| 九色综合狠狠综合久久| 国产成人综合自拍| 国产精品911| 91丨九色丨蝌蚪丨老版| 99在线精品免费| 欧美午夜免费电影| 欧美日韩中文字幕一区| 精品国产自在久精品国产| 日韩一区二区免费电影| 国产日韩欧美高清在线| 中文字幕中文字幕在线一区| 亚洲一区二区三区四区五区黄| 亚洲成人第一页| 激情综合色播五月| 国产成人精品一区二区三区四区 | 日韩电影在线观看一区| 丝袜脚交一区二区| 国产乱人伦偷精品视频不卡 | 成人黄色综合网站| 97久久精品人人澡人人爽| 91麻豆精品国产| 精品国产一区二区国模嫣然| 国产精品乱码一区二三区小蝌蚪| 国产精品久久毛片av大全日韩| 五月开心婷婷久久| 久久疯狂做爰流白浆xx| 色综合久久综合网欧美综合网 | 3d成人h动漫网站入口| 日韩欧美国产成人一区二区| 国产精品成人在线观看| 亚洲影院在线观看| 国产99久久久久久免费看农村| 成人18视频日本| 日韩精品一区二区三区四区| 中文无字幕一区二区三区| 日韩影院在线观看| 粉嫩aⅴ一区二区三区四区| 欧美美女喷水视频| 久久久久久一级片| 婷婷开心久久网| 国产一区中文字幕| 91精品国产综合久久香蕉的特点 | 午夜精品福利在线| 韩国毛片一区二区三区| 欧美日韩国产成人在线免费| 精品国产91久久久久久久妲己| 亚洲自拍偷拍av| 国产精品2024| 日韩一级大片在线| 中文字幕一区在线观看| 国产精品99久久久久久宅男| 在线日韩一区二区| 国产精品美女久久久久久久久| 日韩中文字幕91| 欧美色窝79yyyycom| 中文av一区特黄| 国产乱人伦偷精品视频免下载| 在线影院国内精品| 亚洲婷婷综合久久一本伊一区| 韩国女主播成人在线观看| 欧美一区二区三区四区在线观看| 中文字幕一区二区三区蜜月| 国产成人在线视频网址| 5月丁香婷婷综合| 婷婷六月综合亚洲| 色老汉一区二区三区| 综合婷婷亚洲小说| 国产成人精品三级| 国产欧美一区二区在线观看| 天天操天天色综合| 欧美日韩日日夜夜| 国产精品美女久久久久aⅴ| 风间由美一区二区av101| 欧美性猛片xxxx免费看久爱| 亚洲视频狠狠干| 99视频热这里只有精品免费| 国产午夜亚洲精品羞羞网站| 国产美女一区二区三区| 日韩一区二区免费视频| 免费成人美女在线观看.| 欧美精品日韩一区| 美国欧美日韩国产在线播放| 在线综合亚洲欧美在线视频| 免费在线观看视频一区| 欧美二区乱c少妇| 琪琪久久久久日韩精品| 欧美日韩黄色一区二区| 亚洲精品国产无天堂网2021| 91视频在线观看免费| 一区二区三区中文在线观看| 在线亚洲高清视频| 午夜精品久久久久久久久| 欧美系列亚洲系列| 中文字幕国产精品一区二区| 高清免费成人av| 亚洲精品高清在线| 91日韩一区二区三区| 亚洲va欧美va人人爽午夜| 日韩欧美国产小视频| 国产一区二区三区美女| 国产精品嫩草影院com| 成人h动漫精品一区二区| 亚洲亚洲精品在线观看| 欧美日韩国产不卡| 国产一区视频导航| 中文子幕无线码一区tr| 欧美日韩视频在线观看一区二区三区| 亚洲成人中文在线|