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

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

?? mbm.c

?? 很好的Modbus協義庫棧
?? 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_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_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_create(&thread1, NULL,(void*)&Mbm_get_data,&longueur);	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=kill(Mbm_Pid_Child,0);      else         stat1=0;      if (Mbm_Pid_Sleep!=0)         stat2=kill(Mbm_Pid_Sleep,0);      else         stat2=0;      /* answer of the slave terminate or and of the timeout */      if (stat1==-1 || stat2==-1)          break;   } 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)   {      return 0;   }   /* ok : store the answer packet in the data trame */   for (i=0;i<=longueur;i++)      trame[i]=Mbm_result[i];   return 1;}      /************************************************************************************   				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 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 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[] */	if(!Mbm_send_and_get_result(trame,Mbtrame.timeout,long_emit,longueur))      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 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一区二区三区免费野_久草精品视频
欧美成人乱码一区二区三区| 欧美成人综合网站| 免费欧美日韩国产三级电影| 欧美极品另类videosde| 日韩一区二区三区电影| 91婷婷韩国欧美一区二区| 激情文学综合丁香| 五月激情六月综合| 亚洲欧美色一区| 久久嫩草精品久久久久| 欧美日韩高清一区二区不卡 | 亚洲一区二区av在线| 亚洲精品一区二区三区香蕉| 欧美巨大另类极品videosbest| 成人午夜电影小说| 成人av在线观| 国内精品伊人久久久久av一坑| 五月激情六月综合| 一区二区在线观看免费视频播放| 国产欧美1区2区3区| 欧美本精品男人aⅴ天堂| 欧美高清视频www夜色资源网| 91啪在线观看| aaa国产一区| 99视频一区二区| 丰满少妇在线播放bd日韩电影| 九九热在线视频观看这里只有精品| 亚洲福利一区二区| 一区二区三区国产精品| 亚洲欧美日本在线| 日韩理论片中文av| 综合久久综合久久| 亚洲视频在线一区二区| 国产精品女同一区二区三区| 久久蜜桃一区二区| 久久久噜噜噜久噜久久综合| 911精品产国品一二三产区| 欧美中文字幕亚洲一区二区va在线| 91老师片黄在线观看| 91猫先生在线| 91福利国产成人精品照片| 色94色欧美sute亚洲线路一ni | 在线亚洲精品福利网址导航| 色综合久久88色综合天天| 色婷婷香蕉在线一区二区| 日本高清成人免费播放| 欧美午夜片在线观看| 在线视频欧美区| 欧美性猛交一区二区三区精品 | 日韩欧美高清在线| 日韩欧美亚洲一区二区| 精品电影一区二区| 中文字幕乱码日本亚洲一区二区| 国产精品高潮久久久久无| 亚洲精品videosex极品| 五月婷婷色综合| 久久国产麻豆精品| 成人污污视频在线观看| 色诱亚洲精品久久久久久| 欧洲一区二区三区在线| 91麻豆精品国产| 精品国产三级a在线观看| 欧美国产日韩精品免费观看| 亚洲综合一区在线| 男人操女人的视频在线观看欧美| 韩国理伦片一区二区三区在线播放 | 高清成人在线观看| 色婷婷一区二区三区四区| 欧美一区二区三区思思人| 国产午夜精品美女毛片视频| 亚洲激情一二三区| 精品综合久久久久久8888| 99久久精品国产导航| 欧美日韩国产经典色站一区二区三区| 日韩一区二区三区在线| 国产日韩欧美精品一区| 亚洲一区二区综合| 免费人成黄页网站在线一区二区 | 色又黄又爽网站www久久| 欧美日韩色综合| 精品日韩一区二区| 亚洲欧美国产三级| 久久福利视频一区二区| 99久久精品国产麻豆演员表| 日韩一区二区三区视频| 综合激情网...| 久久99热这里只有精品| 一本色道久久综合亚洲91| 精品三级在线观看| 亚洲小说欧美激情另类| 国产激情一区二区三区四区| 欧美日韩一级视频| 国产精品私人影院| 爽好久久久欧美精品| 成人高清在线视频| 欧美刺激午夜性久久久久久久| 亚洲欧美视频在线观看视频| 国产精品一区在线| 91精品在线一区二区| 亚洲丝袜自拍清纯另类| 精品无人区卡一卡二卡三乱码免费卡| 色噜噜夜夜夜综合网| 国产三级精品视频| 毛片av中文字幕一区二区| 欧美亚洲综合网| 国产精品福利在线播放| 国内精品伊人久久久久av影院| 337p亚洲精品色噜噜狠狠| 亚洲精品成人少妇| 岛国一区二区在线观看| 久久老女人爱爱| 久久国产综合精品| 91精品国产综合久久久久| 一区二区三区四区视频精品免费| 福利电影一区二区三区| 26uuu国产日韩综合| 天堂久久久久va久久久久| 欧美影院一区二区| 亚洲精品国产成人久久av盗摄 | 欧美精品xxxxbbbb| 一区二区在线观看免费| av电影在线观看不卡| 国产精品水嫩水嫩| 福利电影一区二区| 国产视频一区在线播放| 狠狠狠色丁香婷婷综合久久五月| 4438成人网| 日本不卡视频在线观看| 欧美日韩亚洲综合在线 | 亚洲一二三四区| 色哦色哦哦色天天综合| 亚洲欧美一区二区三区久本道91| 99久久精品国产一区| 亚洲日本护士毛茸茸| 色综合中文字幕| 亚洲欧美日韩国产中文在线| 色婷婷av一区二区三区软件| 亚洲欧美日韩国产手机在线| 一本色道久久综合狠狠躁的推荐 | 国产精品美女一区二区| caoporm超碰国产精品| 中文欧美字幕免费| jlzzjlzz欧美大全| 亚洲国产精品精华液网站| 欧美精品乱码久久久久久| 日韩va亚洲va欧美va久久| 欧美本精品男人aⅴ天堂| 国产黑丝在线一区二区三区| 国产精品狼人久久影院观看方式| 91欧美一区二区| 亚洲国产精品一区二区久久 | 97精品超碰一区二区三区| 亚洲天堂成人网| 欧美日韩在线播放一区| 毛片不卡一区二区| 国产精品久久免费看| 在线观看精品一区| 日本美女视频一区二区| 久久精品视频在线免费观看| 91蜜桃婷婷狠狠久久综合9色| 亚洲亚洲精品在线观看| 精品久久久久香蕉网| av成人免费在线观看| 午夜激情久久久| 久久久午夜电影| 91高清视频免费看| 蜜臀精品久久久久久蜜臀| 欧美极品aⅴ影院| 欧美无人高清视频在线观看| 韩国三级在线一区| 亚洲精品视频在线| 欧美一二区视频| 91麻豆成人久久精品二区三区| 日韩高清不卡一区二区三区| 国产欧美一区二区精品性| 欧美日韩国产一级二级| 国产精品一区一区| 亚洲成a人片综合在线| 国产日产欧美一区二区三区| 欧亚洲嫩模精品一区三区| 国产成人免费视频| 午夜精品一区二区三区免费视频| 国产欧美日韩亚州综合| 欧美日韩国产色站一区二区三区| 国产成人在线看| 首页亚洲欧美制服丝腿| 亚洲视频一区在线| 久久影院视频免费| 欧美精品v国产精品v日韩精品| 波多野结衣一区二区三区| 老司机精品视频导航| 一区二区三区日本| 久久久www成人免费无遮挡大片| 欧美无人高清视频在线观看| thepron国产精品| 国产制服丝袜一区| 日韩综合小视频| 亚洲精品中文字幕乱码三区| 国产欧美日韩亚州综合| 欧美xxxxx牲另类人与|