사용자 도구

사이트 도구

English

cublocapp:an36014:index

AN36014 - 와인 저장고

해외에서 CUTOUCH를 이용하여, 와인저장고의 온도제어/공기순환제어 시스템을 만들었습니다.

고맙게도 제작업체에서 소스를 공개해주셨습니다. CT1720으로 만든 어플리케이션입니다.

소스 프로그램

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/index.txt · 마지막으로 수정됨: 2017/10/19 22:37 저자 Comfile Technology