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,一开始有3个ai点,2s后有6个ai点。
步骤
修改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(),程序会阻塞在此;
本文出自 “菜豆树” 博客,转载请与作者联系!