BACnet stack server修改―修改ai点数

BACnet stack server修改----修改ai点数

 

使用bacnet-stack-0.8.2

修改的文件:

ai.c   ~\bacnet-stack-0.8.2\demo\object\ai.c

main.c   ~\bacnet-stack-0.8.2\demo\server\main.c

 

修改方案一

修改效果,使用yabe浏览器,从客户端读取server,一开始有3ai点,2s后有6ai点。

 

步骤

修改ai.c,改变MAX_ANALOG_INPUTS为变量,并增加一个修改MAX_ANALOG_INPUTS的函数

//#ifndef MAX_ANALOG_INPUTS

//#define MAX_ANALOG_INPUTS 4

//#endif

//**********************by ming******change  MAX_ANALOG_INPUTS

static int MAX_ANALOG_INPUTS = 3;

void Change_MAX_ANALOG_INPUTS(int i)

{

     MAX_ANALOG_INPUTS=i;

}

//**********************by ming end******change  MAX_ANALOG_INPUTS

//ANALOG_INPUT_DESCR AI_Descr[MAX_ANALOG_INPUTS];

ANALOG_INPUT_DESCR AI_Descr[10];

 

修改server项目的main.c文件

增加定时头文件

#include <time.h>//by ming

main函数的for循环里增加条件判断,并使用Change_MAX_ANALOG_INPUTS()Device_Init()修改ai的个数,其中用到单线程非阻塞的计时方式

for (;;) {

     if(flag_change_ai_num== 0)//by ming

     {//by ming

……

if(flag_change_num_one==0)//by ming

{//by ming

  time_end = clock();

  if ((time_end - time_start) / CLK_TCK >= 2)  //wait 2s

  {

       printf("ok\n");

       flag_change_ai_num=1;//by ming

       flag_change_num_one=1;//by ming

  }

}//by ming

else//by ming

{//by ming

Change_MAX_ANALOG_INPUTS(6);//by ming

Device_Init(NULL);//by ming

flag_change_ai_num=0;//by ming

}//by ming

}

 

知识点:

单线程非阻塞性计时:

C/C++ code

#include "time.h"

main()

{

float time_start,time_end;

time_start=clock();

while(1)

{

time_end = clock();

if ((time_end - time_start) / CLK_TCK >= 2)

{

printf("ok\n");

time_start=time_end;

}

}

}

 

如果用#include <windows.h> 的Sleep(),程序会阻塞在此;

本文出自 “菜豆树” 博客,转载请与作者联系!

你可能感兴趣的:(stack,bacnet)