====== AN36014 - 와인 저장고 ====== 해외에서 CUTOUCH를 이용하여, 와인저장고의 온도제어/공기순환제어 시스템을 만들었습니다. 고맙게도 제작업체에서 소스를 공개해주셨습니다. CT1720으로 만든 어플리케이션입니다. {{ :cublocapp:an36014:wine0.jpg?nolink |}} {{ :cublocapp:an36014:wine3.jpg?nolink |}} {{ :cublocapp:an36014:wine2_1_.jpg?nolink |}} {{ :cublocapp:an36014:wine1.jpg?nolink |}} ===== 소스 프로그램 ===== {{ :cublocapp:an36014:winecanvas.zip |}} ' Title......: Control de Temperatura Cavas de Vino ' Author.....: Diego Pulgar ' Date.......: 10/MAY/06 ' Versi?....: 3.0 ' Cliente....: Grupo Ramos ' WEB........: www.dpg-electric.com ' MAIL.......: info@dpg-electric.com ' Copyright (c) 2006 by DPG Electric ' Declaraci? de constantes Const Device = CT1720 Set Ladder On ' Start Ladder Set Pad 0,4,5 ' When input received by Touch screen Contrast 450 ' Contrast of the LCD ' Posici? de grafico de barra 1 Const x_box1 As Integer = 236 Const y_box1 As Integer = 22 Const v_box1_min As Integer = 5 Const v_box1_max As Integer = 40 Const title_1 = "Int." Const x_dialog As Integer = 10 Const y_dialog As Integer = 10 Const x_diagram As Integer = 23 Const y_diagram As Integer = 1 Const AJUSTE_TMP As Integer = 16 ' Ajuste de Temperatura Const PENDIENTE_1 As Single = 0.483019779 Const INTERCECION_1 As Single = 270.8233724 Const PENDIENTE_2 As Single = 0.488227206 Const INTERCECION_2 As Single = 271.7285621 Const CHR_01 = &HDB30 ' Contacto NO Const CHR_02 = &HDB31 ' Contacto NC Const CHR_03 = &HDB32 ' Flecha hacia arriba Const CHR_04 = &HDB33 ' Flecha hacia abajo Const CHR_05 = &HDB34 ' Contacto ON Const CHR_06 = &HDB35 ' Contacto OFF Const CHR_07 = &HDB36 ' Simbolo Heat Const CHR_08 = &HDB37 ' T invertida Const CHR_09 = &HDB38 ' Diagonal Izquierda Const CHR_10 = &HDB39 ' Diagonal Derecha Const CHR_11 = &HDB3A ' Motor Direccion Vertical Const CHR_12 = &HDB3B ' Motor Direccion Horizontal Const CHR_13 = &HDB3C ' Flecha Maximo Const CHR_14 = &HDB3D ' Flecha Minimo Const CHR_15 = &HDB3E ' Grados Centigrados ' Definici? de Caracteres Especiales Defchr CHR_01,_ ' Contacto NO &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H3F,&HFC,&H00,&H00,_ &H00,&H00,&H3F,&HFC,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80 Defchr CHR_02,_ ' Contacto NC &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H88,_ &H01,&H90,&H01,&HA0,&H3F,&HFC,&H00,&H80,_ &H01,&H00,&H3F,&HFC,&H05,&H80,&H09,&H80,_ &H11,&H80,&H01,&H80,&H01,&H80,&H01,&H80 Defchr CHR_03,_ ' Flecha hacia arriba &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,_ &H01,&H80,&H03,&HC0,&H07,&HE0,&H0F,&HF0,_ &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80 Defchr CHR_04,_ ' Flecha hacia abajo &H00,&H00,&H00,&H00,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H0F,&HF0,&H07,&HE0,_ &H03,&HC0,&H01,&H80,&H00,&H00,&H00,&H00 Defchr CHR_05,_ ' Contacto ON &H01,&H80,&H01,&H80,&H7F,&HFE,&H00,&H00,_ &H1E,&H88,&H12,&HC8,&H12,&HA8,&H12,&HA8,_ &H12,&HA8,&H12,&H98,&H12,&H88,&H1E,&H88,_ &H00,&H00,&H7F,&HFE,&H01,&H80,&H01,&H80 Defchr CHR_06,_ ' Contacto OFF &H01,&H80,&H01,&H80,&H7F,&HFE,&H00,&H00,_ &H7B,&HDE,&H4A,&H10,&H4A,&H10,&H4B,&H9C,_ &H4A,&H10,&H4A,&H10,&H4A,&H10,&H7A,&H10,_ &H00,&H00,&H7F,&HFE,&H01,&H80,&H01,&H80 Defchr CHR_07,_ ' Simbolo Heat &H01,&H80,&H01,&H80,&H3F,&H80,&H30,&H00,_ &H3F,&HFC,&H00,&H0C,&H3F,&HFC,&H30,&H00,_ &H3F,&HFC,&H00,&H0C,&H3F,&HFC,&H30,&H00,_ &H3F,&HFC,&H00,&H0C,&H01,&HFC,&H01,&H80 Defchr CHR_08,_' T invertida &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H01,&H80,&HFF,&HFF,_ &HFF,&HFF,&H00,&H00,&H00,&H00,&H00,&H00,_ &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00 Defchr CHR_09,_ ' Diagonal Izquierda &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,_ &H00,&H00,&H00,&H00,&H00,&H00,&H01,&HFF,_ &H01,&HFF,&H01,&H80,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80 Defchr CHR_10,_' Diagonal Derecha &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,_ &H00,&H00,&H00,&H00,&H00,&H00,&HFF,&H80,_ &HFF,&H80,&H01,&H80,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H01,&H80,&H01,&H80 Defchr CHR_11,_' Motor Direccion Vertical &H01,&H80,&H0E,&H70,&H31,&H8C,&H22,&H44,_ &H46,&H62,&H46,&H62,&H42,&H42,&H81,&H81,_ &H81,&H81,&H42,&H42,&H46,&H62,&H46,&H62,_ &H22,&H44,&H31,&H8C,&H0E,&H70,&H01,&H80 Defchr CHR_12,_' Motor Direccion Horizontal &H01,&H80,&H0E,&H70,&H30,&H0C,&H20,&H04,_ &H40,&H02,&H4C,&H32,&H5E,&H7A,&HA1,&H85,_ &HA1,&H85,&H5E,&H7A,&H4C,&H32,&H40,&H02,_ &H20,&H04,&H30,&H0C,&H0E,&H70,&H01,&H80 Defchr CHR_13,_' Flecha Maximo &H00,&H00,&H01,&H80,&H03,&HC0,&H06,&H60,_ &H0C,&H30,&H18,&H18,&H30,&H0C,&H3F,&HFC,_ &H3F,&HFC,&H00,&H00,&H00,&H00,&H00,&H00,_ &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00 Defchr CHR_14,_' Flecha Minimo &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,_ &H00,&H00,&H00,&H00,&H00,&H00,&H3F,&HFC,_ &H3F,&HFC,&H30,&H0C,&H18,&H18,&H0C,&H30,_ &H06,&H60,&H03,&HC0,&H01,&H80,&H00,&H00 Defchr CHR_15,_' Grados Centigrados &H00,&H00,&H00,&H00,&H18,&H00,&H24,&H78,_ &H24,&HCC,&H19,&H84,&H01,&H80,&H01,&H80,_ &H01,&H80,&H01,&H80,&H01,&H84,&H00,&HCC,_ &H00,&H78,&H00,&H00,&H00,&H00,&H00,&H00 ' Declaraci? de variables generales Dim VALUE_AD_0 As Integer Dim RESULT_AD_0 As Integer Dim VALUE_AD_1 As Integer Dim RESULT_AD_1 As Integer Dim TEMP_MAX As Integer Dim TEMP_MIN As Integer Dim LAST_TEMP_INT As Integer Dim LAST_TEMP_EXT As Integer Dim AJUSTE_TEMP_1 As Integer Dim AJUSTE_TEMP_2 As Integer Dim TX1 As Integer Dim TY1 As Integer Dim menu_0 As Byte Dim menu_1 As Byte Dim menu_2 As Byte Dim SCREEN_UPDATE As Byte Dim GIRO_MOTOR As Byte Input 0 ' Inicializa el canal del A/D 1 Input 1 ' Inicializa el canal del A/D 2 Low 18 ' Inicializa Buzzer Low 31 ' Inicializa Motor 1 Low 30 ' Inicializa Motor 2 Usepin 31, Out,Motor_1 Usepin 30, Out,Motor_2 Alias M0 = MASTER_OFF Alias M1 = MASTER_ON_DELAY Alias M2 = ALARMA_1_TEMP Alias M3 = ALARMA_2_TEMP Alias M4 = COMP1 Alias M5 = COMP2 Alias M6 = RELAY_AUX_1 Alias M7 = RELAY_AUX_2 Alias T1 = ON_DELAY_MOTOR Alias T2 = OFF_DELAY_MOTOR MASTER_RESET: Cls ' Initialize the LCD Ramclear ' Initialize all variables _M(0) = 0 ' Inicializa Master Off Layer 1, 1, 0 ' Set Layer: 1=ON, 2=ON, 3:OFF Font 2,0 ' Font Tipo 16x16 Style 0,0,0 ' Estilo de letra Normal Wmode 0 ' 0=FAST, 1=SLOW Light 0 ' 0=BACKLIGHT=OFF, 1=BACKLIGHT=ON Delay 1500 ' Wait 1-1/2 Seg. Light 1 ' 0=BACKLIGHT=OFF, 1=BACKLIGHT=ON _M(0) = 1 ' Inicializa Master On ' Creacion de menu principal Font 0,0 Style 0,0,0 Menuset 0,2,20,165,100,230 Menutitle 0,29,24,"OFF" Menuset 1,2,125,165,205,195 Menutitle 1,15,7,"COMP. 1" Menuset 2,2,125,200,205,230 Menutitle 2,15,7,"COMP. 2" Font 4,0 menu_1 = Eeread(0,1) If menu_1 > 1 Then menu_1 = 0 Eewrite 0, 0, 1 End If If menu_1 = 1 Then Menureverse 1 End If menu_2 = Eeread(1,1) If menu_2 > 1 Then menu_2 = 0 Eewrite 1, 0, 1 End If If menu_2 = 1 Then Menureverse 2 End If ' Creacion de pantalla inicial CREATE_BAR_GRAPHIC x_box1, y_box1, 1 CREATE_ELECTRIC_DIAGRAM x_diagram, y_diagram ' Creacion ventana de Dialogo Glayer 2 Box x_dialog,y_dialog,(x_dialog+130),(y_dialog+104) Glayer 1 Locate 2,1 Style 0,1,0 ' Estilo de letra Inverso Print " Temperatura " Locate 2,2 Style 0,0,0 ' Estilo de letra Normal Print "Ajuste...:" Locate 2,3 Print "Interna..:" Locate 2,4 Print "Externa..:" Locate 2,5 Print "Max......:" Locate 2,6 Print "Min......:" ' Inicializa registro de temperatura Maxima y Minima TEMP_MAX = 0 TEMP_MIN = 40 AJUSTE_TEMP_1 = AJUSTE_TMP AJUSTE_TEMP_2 = (AJUSTE_TMP + 2) CREATE_BAR_GRAPHIC x_box1, y_box1, 1 SCREEN_UPDATE = 1 Set ONTIMER On On Pad Gosub Touch_sreen On Timer(50) Gosub Convert_temp ' Evento cada 1/2 seg. Do ' Empty procedure Loop Touch_sreen: Dim memu_value As Byte memu_value = 0 TX1 = Getpad(2) ' Receive x coordinates TY1 = Getpad(2) ' Receive y coordinates If Menucheck(0,TX1,TY1) = 1 Then memu_value = 1 ' Bot? OFF If Menucheck(1,TX1,TY1) = 1 Then memu_value = 2 ' Bot? COMP. 1 If Menucheck(2,TX1,TY1) = 1 Then memu_value = 3 ' Bot? COMP. 2 Select Case memu_value Case 1 ' Bot? OFF SCREEN_UPDATE = 1 _M(0) = 0 Menureverse 0 BEEP_TONE Menureverse 0 If menu_1 = 1 Then Menureverse 1 menu_1 = 0 Eewrite 0, 0, 1 End If If menu_2 = 1 Then Menureverse 2 menu_2 = 0 Eewrite 1, 0, 1 End If Case 2 ' Bot? Compresor 1 BEEP_TONE SCREEN_UPDATE = 1 Menureverse 1 If menu_1 = 0 Then menu_1 = 1 Eewrite 0, 1, 1 Else menu_1 = 0 Eewrite 0, 0, 1 End If If menu_2 = 1 Then Menureverse 2 menu_2 = 0 Eewrite 1, 0, 1 End If Case 3 ' Bot? Compresor 2 BEEP_TONE SCREEN_UPDATE = 1 Menureverse 2 If menu_2 = 0 Then menu_2 = 1 Eewrite 1, 1, 1 Else menu_2 = 0 Eewrite 1, 0, 1 End If If menu_1 = 1 Then Menureverse 1 menu_1 = 0 Eewrite 0, 0, 1 End If End Select Return Convert_temp: Incr GIRO_MOTOR VALUE_AD_0 = Tadin(0) VALUE_AD_1 = Tadin(1) RESULT_AD_0 = (VALUE_AD_0 * PENDIENTE_1)-INTERCECION_1 ' Interna RESULT_AD_1 = (VALUE_AD_1 * PENDIENTE_2)-INTERCECION_2 ' Externa If RESULT_AD_0 > TEMP_MAX Then TEMP_MAX = RESULT_AD_0 End If If RESULT_AD_0 < TEMP_MIN Then TEMP_MIN = RESULT_AD_0 End If If _P(31) = 1 Then Locate 21,6 If GIRO_MOTOR.bit0 = 1 Then Print Chr(CHR_11)' Motor Direccion Vertical Else Print Chr(CHR_12)' Motor Direccion Horizontal End If End If If _P(30) = 1 Then Locate 25,6 If GIRO_MOTOR.bit0 = 1 Then Print Chr(CHR_11)' Motor Direccion Vertical Else Print Chr(CHR_12)' Motor Direccion Horizontal End If End If If LAST_TEMP_INT <> RESULT_AD_0 Or LAST_TEMP_EXT <> RESULT_AD_1 Or SCREEN_UPDATE = 1 Then SCREEN_UPDATE = 0 PRINT_VALUE_TEMP FILL_BAR_GRAPHIC x_box1, y_box1, v_box1_min, v_box1_max, RESULT_AD_0 LAST_TEMP_INT = RESULT_AD_0 LAST_TEMP_EXT = RESULT_AD_1 ' Alarma 1 de temperatura If AJUSTE_TEMP_1 < RESULT_AD_0 Then Locate 23,3 Print Chr(CHR_05)'ON HEAT _M(2)=1 Else Locate 23,3 Print Chr(CHR_06)'OFF HEAT 'Motor Izquierdo & Derecho stop Locate 21,6 Print Chr(CHR_12)'Motor Izquierdo stop Locate 25,6 Print Chr(CHR_12)'Motor Derecho stop _M(2)=0 End If ' Alarma 2 de temperatura If AJUSTE_TEMP_2 < RESULT_AD_0 Then _M(3)=1 Else _M(3)=0 End If ' Cierre y apertura de contacto compresor 1 If menu_1 = 0 Then ' Conctacto Comp. 1 Locate 21,5 Print Chr(CHR_01)'Contacto NO Izq. _M(4)=0 Else Locate 21,5 Print Chr(CHR_02)'Contacto NC Izq. _M(4)=1 End If ' Cierre y apertura de contacto compresor 2 If menu_2 = 0 Then ' Conctacto Comp. 2 Locate 25,5 Print Chr(CHR_01)'Contacto NO Der. _M(5)=0 Else Locate 25,5 Print Chr(CHR_02)'Contacto NC Der. _M(5)=1 End If End If Return End Sub PRINT_VALUE_TEMP () Glayer 1 Locate 13,2 Print DEC2 AJUSTE_TMP, Chr(CHR_15) Locate 13,3 Print DEC2 RESULT_AD_0, Chr(CHR_15) Locate 13,4 Print DEC2 RESULT_AD_1, Chr(CHR_15) Locate 13,5 Print DEC2 TEMP_MAX, Chr(CHR_15) Locate 13,6 Print DEC2 TEMP_MIN, Chr(CHR_15) End Sub Sub CREATE_BAR_GRAPHIC (x_pos As Integer, y_pos As Integer, title_bar_no As Byte) ' x_pos [0 - min, 280 max] ' y_pos [0 - min, 50 max] Dim fill_step As Integer Glayer 2 Linestyle 1 Dotsize 0,0 Color 1 Box x_pos,y_pos,(x_pos+8),(y_pos+184) For fill_step = (y_pos+8) To (y_pos+184) Step 12 Line (x_pos+4),fill_step,(x_pos+8),fill_step Next Glocate (x_pos-8), (y_pos-14) Gprint title_1 End Sub Sub CREATE_ELECTRIC_DIAGRAM (x_pos As Integer, y_pos As Integer) Glayer 1 Locate x_pos,y_pos Print Chr(CHR_03)'Flecha hacia arriba Locate x_pos,(y_pos+1) Print Chr(CHR_07)'Heat Locate x_pos,(y_pos+2) Print Chr(CHR_06)'OFF Locate x_pos,(y_pos+3) Print Chr(CHR_08)'T invertida Locate (x_pos-2),(y_pos+3) Print Chr(CHR_09)'Diagonal Izq. Locate (x_pos+2),(y_pos+3) Print Chr(CHR_10)'Diagonal Der. Locate (x_pos-2),(y_pos+4) Print Chr(CHR_01)'Contacto NO Izq. Locate (x_pos+2),(y_pos+4) Print Chr(CHR_01)'Contacto NO Der. Locate (x_pos-2),(y_pos+5) Print Chr(CHR_12)'Motor Izq. Locate (x_pos+2),(y_pos+5) Print Chr(CHR_12)'Motor Der. Locate (x_pos-3),(y_pos+5) Print "1" Locate (x_pos+1),(y_pos+5) Print "2" End Sub Sub FILL_BAR_GRAPHIC (x_pos As Integer, y_pos As Integer, v_min As Integer, v_max As Integer, v_actual As Integer) Dim convert_fill_bar As Integer ' Valor de [0 - 100] Dim m_x As Single ' Pendiente de la curva Dim b As Single ' Intercepcion eje y If v_actual < v_min Then v_actual = v_min End If If v_actual > v_max Then v_actual = v_max End If m_x = 100.0 /(v_max-v_min) b = v_min * m_x convert_fill_bar = (((v_actual * m_x)-b)*1.8)+2 Glayer 2 Color 0 Boxfill (x_pos+2),(y_pos+2),(x_pos+6),((y_pos+184)-convert_fill_bar),0 Waitdraw Color 1 Boxfill (x_pos+2),((y_pos+184)-convert_fill_bar),(x_pos+6),(y_pos+182),0 Waitdraw Font 8,0 Style 0,0,0 Glocate (x_pos+16), (y_pos+64) Dprint DEC2 v_actual Font 4,0 Waitdraw End Sub Sub BEEP_TONE () Pulsout 18,350 ' BEEP! End Sub {{ :cublocapp:an36014:wineladder.png?nolink |}} [[cublocapp:index|이전단계로]]