⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pressure.c

📁 labview开发的智能仪器试验
💻 C
字号:
#include "toolbox.h"
#include <ansi_c.h>
#include <tcpsupp.h>
#include <cvirte.h>		
#include <userint.h>
#include "pressure.h"
#include "dask.h"

#pragma comment(lib,"pci-dask.lib")

static int panelHandle;
int cardID=0;
unsigned short temp1,temp2;
float pressure,temperature;
float tempSet;
float temp_array[2];
int up=0;
int down=0;
int ac=0;


float pressure_add=0;
float temp_add=0;
float press_out=0;
float temp_out=0; 
int index1=0;
int index2=0;
int is_run=0;

struct sever_data
{
	char tag[12];
	float value;
}transTemp;

float trans[3]={0};
///sever////
static int g_hconversation=0;
int sever_stat=0;

int CVICALLBACK ServerTCP( unsigned handle, int event, int error,void *callbackData);

int transData(void* data);

int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;	/* out of memory */
	if ((panelHandle = LoadPanel (0, "pressure.uir", PANEL)) < 0)
		return -1;
	cardID=Register_Card(PCI_9112,0); 

	//SetCtrlVal (panelHandle,PANEL_NUMERIC,cardID); 
	//SetCtrlVal (panelHandle,PANEL_NUMERICTHERM,30.0); 
	GetCtrlVal (panelHandle,PANEL_NUMERICTHERM,&tempSet);
	DisplayPanel (panelHandle);
	RunUserInterface();
	DiscardPanel (panelHandle);
	return 0;
}

int CVICALLBACK start (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(cardID>=0)
			{
				Release_Card(cardID);
				cardID=Register_Card(PCI_9112,0);
				SetCtrlAttribute(panelHandle,PANEL_START,ATTR_CMD_BUTTON_COLOR,VAL_BLUE); 
				SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
			    is_run=1;
				
			}
			else
			{
				SetCtrlAttribute(panelHandle,PANEL_START,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
				MessagePopup("warning","Register card fail");
			}
			
			break;
	}
	return 0;
}

int CVICALLBACK quit (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
		   if(cardID>=0)
	         {
	       		 Release_Card(cardID);  
	         }
		         QuitUserInterface (0);
		    	break;  
	}
	return 0;
}

int CVICALLBACK stop (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(is_run)
			{
			 up=0;
			 down=0;
			 ac=0;
			 is_run=0;
			 DO_WritePort(cardID,0,0x0003);
			SetCtrlAttribute(panelHandle,PANEL_START,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
		   	SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_BLUE);
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
			}
			break;
	}
	return 0;
}

int CVICALLBACK setTemp (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			break;

		case EVENT_VAL_CHANGED:
			 GetCtrlVal (panelHandle,PANEL_NUMERICTHERM,&tempSet);
			/*strcpy(transTemp.tag,"serSetTemp");
	  		transTemp.value=tempSet;
			if(sever_stat==1)
			{
				if (ClientTCPWrite (g_hconversation,&transTemp,sizeof(struct sever_data), 100) < 0)			
			    	SetCtrlVal(panelHandle,PANEL_TEXTMSG,"发送数据失败"); 
				 else
				 {
				//	SetCtrlVal(panelHandle,PANEL_TEXTMSG,"发送数据:停止"); 
					SetCtrlVal(panelHandle,PANEL_TEXTMSG,transTemp.tag);
				 }
				//NUMERIC  
				
			}   */
			break;
	}
	return 0;
}

int CVICALLBACK upTemp (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(is_run)
			{
		   	up=1;
			 down=0;
			 ac=0;
			 SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_BLUE);
			 DO_WritePort(cardID,0,0x0002);
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_BLUE); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
			}
			break;
	}
	return 0;
}

int CVICALLBACK downTemp (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(is_run)
			{
			 up=0;
			 down=1;
			 ac=0;
			 DO_WritePort(cardID,0,0x0001);
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_BLUE); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
			}
			break;
	}
	return 0;
}

int CVICALLBACK autoControl (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(is_run)
			{
			 up=0;
			 down=0;
			 ac=1;
			// DO_WritePort(cardID,0,0x0001);
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
			SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_BLUE);
			}
			break;
	}
	return 0;
}

int CVICALLBACK timer (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	 
		//tempSet=35;
		//press_out=(float)Random(200.0,400.0);
		//temp_out=(float)Random(40,50);
		//trans[0]=tempSet;
		//trans[1]=temp_out;
		//trans[2]=press_out;
     	//	transData(&trans);  
	
	switch (event)
	{
		
		case EVENT_TIMER_TICK:
		//	transData(temp_out);
		//	transData(&trans);
			//SetCtrlVal(panelHandle,PANEL_NUMERIC,press_out);
		//	SetCtrlVal(panelHandle, PANEL_PRESSURE, press_out);   
			if(is_run)
			{
				//for(i=0;i<500;i++)
				if(index1<10)
				{
					AI_ReadChannel(cardID, 0, AD_U_5_V, &temp1);  //pressure
				//	temp1=(unsigned short int)Random(10000,30000);   //test
					
			 	    temp1 = (temp1>>4)&0x0fff;
				    pressure = temp1*5.0/4095.0*500/4.88;
					pressure_add+=pressure;
					index1++;
				}
				if(index1==10)
				{
				  press_out=pressure_add/10;
				  index1=0;
				  pressure_add=0;
				}
				SetCtrlVal(panelHandle, PANEL_PRESSURE, press_out);
				PlotStripChart (panelHandle, PANEL_STRIPCHART_2, &press_out, 1, 0, 0, VAL_FLOAT); 
			  if (press_out>500)								 
                 SetCtrlVal (panelHandle, PANEL_LED, 1);
              else
                 SetCtrlVal (panelHandle, PANEL_LED, 0);
			  
			  
			  //temperture
			  
			  
			  //for(i=0;i<500;i++)
			  if(index2<10)
				{
					AI_ReadChannel(cardID, 1, AD_U_5_V, &temp2);  //pressure
				//	temp2=(unsigned short int)Random(10000,30000); 
			 	    temp2 = (temp2>>4)&0x0fff;
				    temperature = temp2*5.0/4095.0*76.5/4.88;
					temp_add+=temperature;
					index2++;
				}
			  if(index2==10)
			  {
				temp_out=temp_add/10;
				index2=0;
				temp_add=0;
			  }
				SetCtrlVal(panelHandle, PANEL_NUMERICTHERM_2, temp_out);
			  if (temp_out>76.8)								 
                 SetCtrlVal (panelHandle, PANEL_LED_2, 1);
              else
                 SetCtrlVal (panelHandle, PANEL_LED_2, 0);
			  //transData
			    trans[0]=tempSet;
				trans[1]=temp_out;
				trans[2]=press_out;
		     	transData(&trans); 
				
			  temp_array[0]=tempSet;
			  temp_array[1]=temp_out;
			  PlotStripChart (panelHandle, PANEL_STRIPCHART, temp_array, 2, 0, 0, VAL_FLOAT);
			  
		/*	   if(ac==1)
			      {
			          if(tempSet-temp_out>=0.5)
			          {
			           //升温
			           DO_WritePort(cardID, 0, 0x0002);
			          }
			          else if(tempSet-temp_out<=-0.5)
			          {
			          //降温
			          DO_WritePort(cardID, 0, 0x0001);
			          }
			          else
			          {
			          //既不升温度也不降温
			          DO_WritePort(cardID, 0, 0x0003);
			          }
			     }
			 
			     if(up==1)
			     {  DO_WritePort(cardID, 0, 0x0002);     //sheng wen
			     } 
			     
			     if(down==1)
			      { 
			        DO_WritePort(cardID, 0, 0x0001);
			     }
				 
				 */
			} 
			break;
	}
	return 0;
}

////////////////sever part/////////////////



int CVICALLBACK startSever (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{

	switch (event)
	{
		case EVENT_COMMIT:
			if(is_run)
			{
				if(sever_stat==0)
				{
					if( RegisterTCPServer (6060, ServerTCP, 0) < 0)
					{
						MessagePopup("TCP server","register TCP failed");
					}
					else
					{
						sever_stat=1;
						SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "服务器已启动"); 
						SetCtrlAttribute(panelHandle,PANEL_SEVER,ATTR_LABEL_TEXT,"停止服务器");
					}
				}
				else
				{
					SetCtrlAttribute(panelHandle,PANEL_SEVER,ATTR_LABEL_TEXT,"启动服务器");
					UnregisterTCPServer(6060);
					sever_stat=0;
					g_hconversation=0;
					SetCtrlVal(panelHandle,PANEL_TEXTMSG_3,"服务器已停止");
				}
			}
			break;
	}
	return 0;
}

int transData(void* data)
{
	//float* temp=&data;
	if(sever_stat && g_hconversation)
	{
		if (ServerTCPWrite (g_hconversation, data,3*sizeof(float), 100) < 0)			
		{
			SetCtrlVal(panelHandle,PANEL_TEXTMSG,"发送数据失败");
			return 0;
		}
		else
		{
			return 1;
		}
	}
	return 0;
	
	
}

int CVICALLBACK ServerTCP( unsigned handle, int event, int error,void *callbackData)
{
	char recBuf[256]={0};
	int dataSize=sizeof(recBuf)-1;
	//int command=0;
	char addrBuf[31];
	void* tempData=NULL;  
	//enum data{STOP=5,DOWN,UP};
	switch(event)
	{
		case TCP_CONNECT:
			if(g_hconversation)
			{
				GetTCPPeerAddr (handle, addrBuf, 31);
		     	 SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, addrBuf); 
			  	DisconnectTCPClient (handle);
			}
			else
			{
				 g_hconversation = handle;	
				 GetTCPPeerAddr (g_hconversation, addrBuf, 31);
				 GetTCPPeerName (g_hconversation, recBuf, 256);
				 SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "客户端已连接");
				 SetCtrlVal (panelHandle, PANEL_TEXTMSG_4, addrBuf);
				 SetTCPDisconnectMode (g_hconversation, TCP_DISCONNECT_AUTO);
			}
			break;
		 case TCP_DATAREADY:
			  //dataSize = ServerTCPRead (g_hconversation, recBuf,dataSize, 1000);
			  if ((dataSize = ServerTCPRead (g_hconversation, recBuf,
                                           dataSize, 1000))
                < 0)
                {
              //  SetCtrlVal (g_hmainPanel, MAINPNL_RECEIVE, "Receive Error\n");
					MessagePopup("error","receive error");
                }
				else
				{
					  recBuf[dataSize] = '\0';
					 // command=atoi(recBuf);
					  //SetCtrlVal (panelHandle, PANEL_TEXTMSG_4, recBuf);
					  if(!strcmp("stop",recBuf))  //stop
						{
							 up=0;
							 down=0;
							 ac=0;
							 DO_WritePort(cardID,0,0x0003);
							SetCtrlAttribute(panelHandle,PANEL_START,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
						   	SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_BLUE);
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
							 SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "客户端已经连接:停止"); 
					 
						}
						else if(!strcmp("up",recBuf))   //heat
						{
							 up=1;
							 down=0;
							 ac=0;
							 SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_BLUE);
							 DO_WritePort(cardID,0,0x0002);
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_BLUE); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
							 SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "客户端已经连接:加热");   					 
					 
						}
						else if(!strcmp("down",recBuf))   //cool
						{
							 up=0;
							 down=1;
							 ac=0;
							 DO_WritePort(cardID,0,0x0001);
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_BLUE); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
							 SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "客户端已经连接:冷却");  
						}
						else if(!strcmp("ac",recBuf))
						{
							up=0;
							 down=0;
							 ac=1;
							// DO_WritePort(cardID,0,0x0001);
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_3,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY);
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_2,ATTR_CMD_BUTTON_COLOR,VAL_LT_GRAY); 
							SetCtrlAttribute(panelHandle,PANEL_COMMANDBUTTON_4,ATTR_CMD_BUTTON_COLOR,VAL_BLUE);
							SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "客户端已经连接:自动"); 
							
						}
						else if(!strcmp("setTemp",recBuf))
						{
						//	MessagePopup("haah","setTemp");
							tempData=&recBuf[12];
							tempSet= *(float*)tempData;
							SetCtrlVal(panelHandle,PANEL_NUMERICTHERM ,tempSet);
							SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "客户端已经连接:设置温度"); 
						}
				}
				break;
				case TCP_DISCONNECT:
					 if (handle == g_hconversation)
					 {
				     	 g_hconversation = 0;
			         	SetCtrlVal (panelHandle, PANEL_TEXTMSG_3, "客户端已断开"); 
					 }
					 break;
			
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -