사용자 도구

사이트 도구

English

cublocapp:an34103:index

AN34103 - 레더 메모리 정전유지

큐블록 레더로직 영역중 일부분을 정전시 유지시켜주는 기능을 구현한 프로그램입니다.

참고적으로 MSB시리즈를 MSB LOGIC으로 사용할 때에는 K영역과 C,T영역중 일부분을 자동으로 정전유지시켜주고 있습니다.

CUBLOC STUDIO를 사용할 때에는 레더영역중 일부분을 정전유지해주지 않으므로, 유저가 EEPROM을 이용하여 직접 구현해주어야 합니다.

소스 프로그램

베이직 쪽 소스는 다음과 같습니다.

keep_m_area.zip

'레더에서 M0 ~ 127에 기록된 값은, 자동적으로 EEPROM에 보관되고, 
'이후 전원이 꺼졌다 켜지면 EEPROM에 보관된 값이 M0~127영역으로 복귀된다.
'EEPROM은 총 16바이트를 사용함. (16 X 8 = 128비트)
 
Const Device = CB380
Dim TempAdr As Integer
Dim EepromAdr As Integer
Dim Tempi As Byte
 
Ramclear '모든변수값이 0 이 됨
 
'부팅시 EEPROM에 보관되어 있는 값을 M영역으로 카피
For TempAdr = 0 To 7
    _WM(TempAdr) = Eeread(EepromAdr,2) Xor &hffff
    EepromAdr = EepromAdr + 2
Next
 
 
'USEPIN 은 이곳에서 적으세요.
Usepin 10,In
Usepin 11,In
Usepin 30,Out
 
Set Ladder On '레더시작
 
 
EepromAdr = 0
TempAdr = 0
Do
     Tempi = _WM(TempAdr) '하위 바이트
     Tempi = Tempi Xor &hff
     If Tempi <> Eeread(EepromAdr,1) Then
         Gosub EepromSaveRtn
     End If
     Incr EepromAdr
     Tempi = _WM(TempAdr) >> 8 '상위 바이트
     Tempi = Tempi Xor &hff
     If Tempi <> Eeread(EepromAdr,1) Then
         Gosub EepromSaveRtn
     End If
     Incr EepromAdr
    Incr TempAdr
    If TempAdr > 7 Then
        TempAdr = 0
        EepromAdr = 0
    End If
Loop
 
'
'    EEprom에 1바이트를 써넣는 서브루틴
'
EepromSaveRtn:
    Do
    Loop Until Sys(4)=0
    eew EepromAdr,Tempi
    Return
 

동작 설명

이 프로그램은 M0부터 M127까지를 정전유지시켜줍니다.

버튼 1을 누르면 SETOUT에 의해서 M10 이 ON상태를 유지합니다. 이때 전원을 껏다 켜면, M10이 그대로 켜져 있는것을 확인하실 수 있습니다.

버튼 2를 누르면 RSTOUT에 의해서 M10이 OFF상태를 유지합니다. 마찬가지로 이때 전원을 OFF –> ON하면 M10이 OFF상태를 유지하는 것을 보실 수 있습니다.

D영역을 정전유지 해주는 프로그램

위 소스를 살짝 바꾸어서 이번에는 D영역을 정전시 유지시켜주는 프로그램을 만들어 보았습니다.

레더동작시 D0 ~ D10 까지의 내용을 자동적으로 정전유지 시켜줍니다.

즉, EEPROM에 수시로 저장합니다. 따라서 전원이 OFF되도 그값은 유지됩니다. 나중에 파워가 복구될때, EEPROM에 있는 내용을 D0~10 으로 복귀시켜줍니다.

소스중 _D 부분을 _T나 _C로 바꾼다면 T영역이나 C영역을 대상으로 사용하실 수도 있습니다.

'레더에서 D0 ~ 10에 기록된 값은, 자동적으로 EEPROM에 보관되고, 
'이후 전원이 꺼졌다 켜지면 EEPROM에 보관된 값이 D0~10영역으로 복귀된다.
'결과적으로 D0~10은 Keep (정전시 유지) 됨.
 
Const Device = CB380
Dim TempAdr As Integer
Dim EepromAdr As Integer
Dim Tempi As Byte
 
Ramclear '모든변수값이 0 이 됨
 
'부팅시 EEPROM에 보관되어 있는 값을 M영역으로 카피
For TempAdr = 0 To 10
    _D(TempAdr) = Eeread(EepromAdr,2) Xor &hffff
    EepromAdr = EepromAdr + 2
Next
 
 
'USEPIN 은 이곳에서 적으세요.
 
Set Ladder On '레더시작
 
EepromAdr = 0
TempAdr = 0
Do
     Tempi = _D(TempAdr) '하위 바이트
     Tempi = Tempi Xor &hff
     If Tempi <> Eeread(EepromAdr,1) Then
         Gosub EepromSaveRtn
     End If
     Incr EepromAdr
     Tempi = _D(TempAdr) >> 8 '상위 바이트
     Tempi = Tempi Xor &hff
     If Tempi <> Eeread(EepromAdr,1) Then
         Gosub EepromSaveRtn
     End If
     Incr EepromAdr
    Incr TempAdr
    If TempAdr > 10 Then
        TempAdr = 0
        EepromAdr = 0
    End If
Loop
 
'
'    EEprom에 1바이트를 써넣는 서브루틴
'
EepromSaveRtn:
    Do
    Loop Until Sys(4)=0
    eew EepromAdr,Tempi
    Return

큐블록 어플리케이션 노트

cublocapp/an34103/index.txt · 마지막으로 수정됨: 2017/10/23 23:35 저자 Comfile Technology