====== 정전 시 데이터 유지 (EEPROM 저장 예제) ====== ===== 적용 모델 ===== * MSB610L * MSB6XX 시리즈 전반 (EEPROM 내장 모델) ===== 개요 ===== 정전 또는 전원 OFF 시에도 주요 데이터 값을 유지하기 위해 D영역의 데이터를 EEPROM에 저장하는 예제입니다. 본 예제에서는 * D0 ~ D10 값을 EEPROM에 주기적으로 저장 * 전원 재인가 시 EEPROM 값을 D영역으로 복원 하는 구조로 작성되어 있습니다. 산업 현장에서 다음과 같은 용도로 자주 사용됩니다. * 생산 수량 카운트 유지 * 운전 시간 누적 * 설정값 유지 * 마지막 동작 상태 기록 ----- ===== 동작 원리 ===== * 부팅 시 EEPROM → D영역 복사 * 운전 중 D영역 값 변화 감지 * 값이 변경되면 EEPROM에 저장 * EEPROM 수명 보호를 위해 변경 시에만 기록 ----- ===== BASIC 예제 소스 ===== 정전 시 D0~D10 값을 유지하는 예제입니다. #include "MSB6XX" Dim TempAdr As Integer Dim EepromAdr As Integer Dim Tempi As Byte Opencom 1,115200,3,200,200 Set Modbus 1,1,100 Ramclear ' 부팅 시 EEPROM 값을 D영역으로 복사 For TempAdr = 0 To 10 _D(TempAdr) = Eeread(EepromAdr,2) Xor &hffff EepromAdr = EepromAdr + 2 Next ' USEPIN 은 이곳에서 설정 Set Ladder On Usepin 8,In 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 EepromSaveRtn: Do Loop Until Sys(4)=0 eew EepromAdr,Tempi Return ----- ===== 레더 로직 구성 ===== 예제에서는 * 입력 P8이 ON 되면 * D0, D1 값을 카운트 업 하도록 간단한 테스트 로직을 구성했습니다. {{ :cubloc_manual:msb:msb_nonvolatile_power_failure:ladderl_logic_non-volatile_in_case_of_power_failure.png?nolink |}} (현장에서는 생산 카운터 또는 운전 시간 누적용으로 사용 가능) ----- ===== HMI / SCADA 표시 시 주의사항 ===== {{ :cubloc_manual:msb:msb_nonvolatile_power_failure:hmiscreen_non-volatile_in_case_of_power_failure.png?nolink |}} HMI에서 값을 읽어올 때는 * **DWORD (Unsigned 32bit)** 형식으로 읽어야 합니다. 이유: * D영역 값이 16비트를 초과할 수 있음 * 부호 있는 정수로 읽으면 값이 깨져 보일 수 있음 {{ :cubloc_manual:msb:msb_nonvolatile_power_failure:museuse_dwordvalue.png?nolink |}} ----- Keywords: MSB EEPROM Save, Power Failure Data Retention, MSB610L Example, Eeread, EEWrite, PLC Data Backup, Nonvolatile Memory, Production Counter Backup [[..:index|MSB 일체형 큐블록 시리즈]]