/cvi/apps/TempCtrl/TempCtrl.uir |
Cannot display: file marked as a binary type.
|
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: apps/TempCtrl/TempCtrl.c |
=================================================================== |
--- apps/TempCtrl/TempCtrl.c (revision 303) |
+++ apps/TempCtrl/TempCtrl.c (nonexistent) |
@@ -1,335 +0,0 @@ |
-#include <rs232.h> |
-#include <utility.h> |
-#include <userint.h> |
-#include <ansi_c.h> |
-#include <pw18-1.8aq.h> |
-#include "TempCtrl.h" |
-FILE *gFp; |
- |
-#define RSTREG(a,x) (a&=(~(x))) |
-#define SETREG(a,x) (a|=x) |
- |
-int gMask=0xF; |
- |
-static int pa; |
- |
-#define TEXT_LENGTH 2000 |
-char read_data[TEXT_LENGTH]; |
- |
-int read_term_index; |
-int read_term; |
-int read_cnt; |
-int bytes_read; |
- |
-#define COM_PORT 11 |
- |
- |
-typedef struct |
-{ |
- double dState; // Last temperature input |
- double iState; // Integrator state |
- double iMax, iMin; // Maximum and minimum allowable integrator state |
- double iGain, // integral gain |
- pGain, // proportional gain |
- dGain; // derivative gain |
-} SPid; |
- |
-SPid pid; |
- |
-double UpdatePID(SPid * pid, double error, double temperature) |
-{ |
- double pTerm, dTerm, iTerm; |
- pTerm = pid->pGain * error; |
- // calculate the proportional term |
- // calculate the integral state with appropriate limiting |
- pid->iState += error; |
- if (pid->iState > pid->iMax) pid->iState = pid->iMax; |
- else if (pid->iState < pid->iMin) pid->iState = pid->iMin; |
- //if (debug ) |
- iTerm = pid->iGain * pid->iState; // calculate the integral term |
- dTerm = pid->dGain * (temperature - pid->dState); |
- pid->dState = temperature; |
- return pTerm + iTerm - dTerm; |
-} |
- |
-void SetDimming(int state) { |
- SetCtrlAttribute (pa, PA_START, ATTR_DIMMED, state); |
- SetCtrlAttribute (pa, PA_EXIT, ATTR_DIMMED, state); |
- SetCtrlAttribute (pa, PA_STOP, ATTR_DIMMED, !state); |
-} |
- |
- |
- |
-int CVICALLBACK ReadVoltageCurrentCB (int panel, int control, int event, |
- void *callbackData, int eventData1, int eventData2) |
-{ |
- |
- int iRet; |
- char ch=0; |
- double Voltage; |
- double Current; |
- char cv_cc; |
- switch (event) |
- { |
- case EVENT_COMMIT: |
- GetCtrlVal(pa,PA_CHANNEL, &ch); |
- iRet = TMI_TimeOut(TMI_DeviceId, 1); |
- iRet = TMI_Refresh(TMI_DeviceId); |
- |
- |
- iRet = TMI_MoniDataQ(TMI_DeviceId, ch+1, &Voltage, &Current, &cv_cc); |
- |
- SetCtrlVal(panel, PA_VMON, Voltage); |
- SetCtrlVal(panel, PA_IMON, Current); |
- SetCtrlVal(panel, PA_CVCC, cv_cc); |
- |
- break; |
- } |
- return 0; |
-} |
- |
- |
-int CVICALLBACK SelectChannelCB (int panel, int control, int event, |
- void *callbackData, int eventData1, int eventData2) |
-{ |
- unsigned char state, preset; |
- double Voltage, Current; |
- unsigned char ch; |
- switch (event) |
- { |
- case EVENT_COMMIT: |
- GetCtrlVal(pa,PA_CHANNEL, &ch); |
- GetCtrlVal(pa,PA_PRESET, &preset); |
- |
- |
- |
- TMI_VoltageQ(TMI_DeviceId, ch+1, preset, &Voltage); |
- TMI_CurrentQ(TMI_DeviceId, ch+1, preset, &Current); |
- SetCtrlVal(pa, PA_VSET, Voltage); |
- SetCtrlVal(pa, PA_ISET, Current); |
- |
- break; |
- } |
- return 0; |
-} |
- |
- |
- |
- |
-int main (int argc, char *argv[]) |
-{ |
- int DeviceId=0; |
- unsigned char ch; |
- unsigned char MainOutput, preset; |
- double Voltage, Current, tinterval; |
- char str[0xFF]; |
- if (InitCVIRTE (0, argv, 0) == 0) |
- return -1; /* out of memory */ |
- SetStdioPort (CVI_STDIO_WINDOW); |
- pid.iGain= 0.3; |
- pid.dGain= 0.5; |
- pid.pGain = 3; |
- pid.iMax =100; |
- pid.iMin =-100 ; |
- pid.iState=0; |
- pid.dState=0; |
- |
- if ((pa = LoadPanel (0, "TempCtrl.uir", PA)) < 0) |
- return -1; |
- |
- if (TMI_Open()== 0) MessagePopup("Error","Cannot open USB device"); |
- DeviceId = TMI_OpenHandle ("PW-A","USB:1:1"); |
- if (TMI_Test() == 0 )MessagePopup("DLL error","Dll Error"); |
- if (DeviceId < 0) MessagePopup("Error","Not Connected"); |
- printf("TMI device ID %d\n",TMI_DeviceId); |
- |
- TMI_MainOutputQ(TMI_DeviceId, &MainOutput); |
- TMI_PresetQ(TMI_DeviceId, &preset); |
- SetCtrlVal(pa, PA_ONOFF, MainOutput); |
- SetCtrlVal(pa, PA_PRESET, preset); |
- /* |
- GetCtrlVal(pa, P1_TINTERVAL, &tinterval); |
- SetCtrlAttribute (pa, P1_TIMER, ATTR_INTERVAL, tinterval); |
- */ |
- SelectChannelCB (pa, PA_CHANNEL, EVENT_COMMIT, NULL, 0,0); |
- ReadVoltageCurrentCB (pa, PA_CHANNEL, EVENT_COMMIT, NULL, 0,0); |
- |
- |
- |
- DisplayPanel (pa); |
- SetDimming(0); |
- RunUserInterface (); |
- CloseCom(COM_PORT); |
- DiscardPanel (pa); |
- TMI_Close(); |
- if (gFp) fclose(gFp); |
- return 0; |
-} |
- |
- |
-int CVICALLBACK ExitCB (int panel, int control, int event, |
- void *callbackData, int eventData1, int eventData2) { |
- switch (event) { |
- case EVENT_COMMIT: |
- QuitUserInterface (0); |
- break; |
- } |
- return 0; |
-} |
- |
- |
- |
-int CVICALLBACK SwitchOnOffCB (int panel, int control, int event, |
- void *callbackData, int eventData1, int eventData2) |
-{ |
- unsigned char state; |
- switch (event) |
- { |
- case EVENT_COMMIT: |
- GetCtrlVal(panel, control, &state); |
- TMI_MainOutput(TMI_DeviceId, state); |
- break; |
- } |
- return 0; |
-} |
- |
- |
- |
-/* Callback Function */ |
-void ComCallback(int portNumber, int eventMask, void *callbackdata) { |
- |
- if (eventMask & LWRS_RXFLAG) { |
-//printf("Received specified character\n"); |
- int strLen = GetInQLen (COM_PORT); |
- bytes_read = ComRd (COM_PORT, read_data, strLen); |
- double temp= atof(read_data); |
- double f[10]; |
- int debug1; |
- GetCtrlVal(pa,PA_DEBUG_1, &debug1); |
-//printf("%f#%s#", temp, read_data); |
- sscanf(read_data,"%lf %lf %lf %lf %lf %lf",&f[0],&f[1],&f[2],&f[3],&f[4],&f[5]); |
- double humidity = f[5]; |
-// printf("%lf %lf %lf %lf %lf %lf",f[0],f[1],f[2],f[3],f[4],f[5]); |
- int RS232Error = ReturnRS232Err (); |
- if (ReturnRS232Err ()) { |
- sprintf(read_data,"#%s\n", GetRS232ErrorString(RS232Error)); |
- MessagePopup("RS232Err",read_data); |
- } else { |
- |
- |
- int polar; |
- SelectChannelCB (pa, PA_CHANNEL, EVENT_COMMIT, NULL, 0,0); |
- ReadVoltageCurrentCB (pa, PA_CHANNEL, EVENT_COMMIT, NULL, 0,0); |
- double tset,vmon,imon,vset,iset,vmax; |
- unsigned char ch, preset; |
- GetCtrlVal(pa,PA_TSET,&tset); |
- GetCtrlVal(pa,PA_VMON,&vmon); |
- GetCtrlVal(pa,PA_IMON,&imon); |
- GetCtrlVal(pa,PA_CHANNEL, &ch); |
- GetCtrlVal(pa,PA_PRESET,&preset); |
- TMI_Preset(TMI_DeviceId,preset); |
- GetCtrlVal(pa,PA_POLAR,&polar); |
- |
- double tdiff = temp - tset; |
- double retpid = UpdatePID(&pid, tdiff, temp); |
- const double troom = 20; |
- double Pheat= 0.2 * (temp - troom); |
- double Ptec = retpid - Pheat*2; |
- vset = (polar*Ptec>0) ? sqrt(fabs(Ptec)) : 0; |
- if (debug1) printf("%d PID tmon=%f tset=%f tdiff=%f vmon=%f imom=%f pid=%f Pheat=%f =>vset %f", ch, temp, tset, tdiff, vmon, imon,retpid ,Pheat, vset); |
- GetCtrlVal(pa,PA_VMAX,&vmax); |
- if (vset >vmax) vset=vmax; |
- if (vset <0) vset =0; |
- if (debug1) printf("vset --->%f \n",vset); |
- TMI_Voltage(TMI_DeviceId, ch+1, preset, vset); |
- GetCtrlVal(pa,PA_IMAX,&iset); |
- TMI_Current(TMI_DeviceId, ch+1, preset, iset); |
- |
- |
- |
- |
- |
- ReadVoltageCurrentCB (pa, PA_CHANNEL, EVENT_COMMIT, NULL, 0,0); |
- |
- PlotStripChart (pa, PA_GRAPH, &temp, 1, 0, 0, VAL_DOUBLE); |
- double pgraph[2]={vmon,imon}; |
- PlotStripChart (pa, PA_GRAPH_VMON, pgraph, 2, 0, 0, VAL_DOUBLE); |
- PlotStripChart (pa, PA_GRAPH_3, &humidity, 1, 0, 0, VAL_DOUBLE); |
- SetCtrlVal(pa,PA_TMON,temp); |
- int log=0; |
- GetCtrlVal(pa,PA_LOG, &log); |
- if (log) { |
- char fname[0xFF]; |
- GetCtrlVal(pa,PA_FNAME, fname); |
- FILE *fp = fopen (fname,"a"); |
- fprintf(fp, "%u 0 %f\n", time(NULL), temp); |
- fclose(fp); |
- |
- } |
- |
- } |
- } |
- |
- if (eventMask & LWRS_TXEMPTY) |
- |
- printf("Transmit queue now empty\n"); |
- |
- if (eventMask & LWRS_RECEIVE) { |
- |
- printf("50 or more bytes in input queue\n"); |
- |
- } |
- |
-} |
- |
- |
-int CVICALLBACK StartCB (int panel, int control, int event, |
- void *callbackData, int eventData1, int eventData2) { |
- switch (event) { |
- case EVENT_COMMIT: |
- OpenComConfig (COM_PORT, "", 115200, 0, 8, 1, 512, 512); |
- /* Turn off Hardware handshaking (loopback test will not function with it on) */ |
- SetCTSMode (COM_PORT, LWRS_HWHANDSHAKE_OFF); |
- |
- /* Make sure Serial buffers are empty */ |
- FlushInQ (COM_PORT); |
- FlushOutQ (COM_PORT); |
- |
- int notifyCount = 50; /* Wait for at least 50 bytes in queue. */ |
- int eventChar = 10; /* Wait for LF. */ |
- int eventMask = LWRS_RXFLAG | LWRS_TXEMPTY | LWRS_RECEIVE; |
- InstallComCallback (COM_PORT, eventMask, notifyCount, eventChar, ComCallback, NULL); |
- SetDimming(1); |
- |
- break; |
- } |
- return 0; |
-} |
- |
- |
-int CVICALLBACK StopCB (int panel, int control, int event, |
- void *callbackData, int eventData1, int eventData2) { |
- switch (event) { |
- case EVENT_COMMIT: |
- CloseCom(COM_PORT); |
- SetDimming(0); |
- break; |
- } |
- return 0; |
-} |
- |
-int CVICALLBACK SetPresetCB (int panel, int control, int event, |
- void *callbackData, int eventData1, int eventData2) { |
- |
- switch (event) { |
- case EVENT_COMMIT:{ |
- unsigned char preset; |
- double Voltage, Current; |
- GetCtrlVal(panel, control, &preset); |
- TMI_Preset(TMI_DeviceId, preset); |
- |
- break; |
- } |
- } |
- return 0; |
-} |