동기및비동기오류처리 목차 페이지 비동기오류처리... 2 오류조직블록처리... 3 비동기오류 OB의보기... 4 동기오류처리... 5 프로그래밍오류 OB121에대한시작정보... 6 액세스오류 OB122에대한시작정보... 7 동기오류마스크... 8 동기오류의마스크를위한 SFC 36... 9 프로그래밍오류필터의구조... 10 액세스오류필터의구조... 11 동기오류의마스크를해제하기위한 SFC 37... 12 오류레지스터를읽기위한 SFC 38... 13 보기 : 데이터블록테스트... 14 연습 8.1: FC43에서오류처리... 15 Page 1
비동기오류처리 비동기오류는특정프로그램위치에할당되지않습니다. 즉, 비동기오류는프로그램프로세싱에대해비동기적으로나타납니다. 오류종류보기오류 OB 시간오류 Max. scan time exceeded OB 80 전원공급오류 Failure of the backup battery OB 81 진단인터럽트 Wire break at the input of a diagnostic capable module OB 82 제거 / 삽입모듈인터럽트 Removing a signal module in S7-400 while in running mode OB 83 1) CPU 하드웨어오류 Faulty signal level on the MPI interface OB 84 1) 프로그램시퀀스오류 랙정지 Error in the updating of the process image (defective module) Power supply failure in the distributed rack OB 85 OB 86 1) 통신오류 Incorrect message identifier OB 87 1) S7-400에만적용 2) 오류 OB에상관없이정지하지않음 File: PRO2_08e.2 Information and 소개시간오류전원공급오류진단인터럽트제거 / 삽입인터럽트 CPU-H/W 오류 슬라이드는비동기오류이벤트의목록을보여줍니다. 이들오류는특정프로그램위치에할당되지않습니다. 스캔순환감시시간은기본설정이 150 ms입니다. 시스템은순환이지속시간이 150 ms보다길면시간오류를인식합니다. 오류가같은순환에서 2번일어나면 CPU는 Stop 상태가됩니다. 백업배터리가고장났거나없을때발생하며또한 S7-400의경우중앙장치또는확장장치에서 24 V 공급이정지했을때발생합니다. 다른종류의오류와는달리기존의오류 OB가없는CPU는 Run 상태에남아있게되며빨간색오류 LED가 CPU에켜집니다. 예를들어아날로그모듈과같은진단가능모듈은오류가발생할때진단인터럽트를발생시킬수있습니다. 진단인터럽트를사용할수있게하는그런방식으로모듈에파라미터를할당해야합니다. 이인터럽트는 S7-400 PLC 시스템에서모듈을삽입하거나제거함으로써발생합니다. 모듈을삽입할때운영체제는삽입된모듈형식이정확한지를확인합니다. 이함수는프로그램순환중에모듈의제거및삽입을가능하게합니다. S7-400 의경우 K-Bus 의 MPI 인터페이스에서또는분산 I/O 에대한인터페이스모듈에서오류가인식됩니다. 프로그램시퀀스 이오류는프로세스이미지를갱신할때 I/O 액세스오류에서발생하거나예를 오류 들어파라미터화되는타임오브데이인터럽트에대한 OB가없어서발생합니다. 랙정지 통신오류 이오류는네트워크로연결된 PLC 시스템의하위네트인랙이나분산 I/O 의스테이션이정지될때인식됩니다. 공유데이터를받을때잘못된메시지식별자가 S7-300 에있거나데이터블록이상태정보를저장하기에너무짧습니다. S7-400 의경우예를들어동기화메시지를보낼수없다든가하는추가원인이있습니다. Page 2
오류조직블록처리 오류가날때CPU가정지하지않도록하기위해빈오류조직블록을전송합니다. 오류 OB에원하는반응을프로그램하고필요하다면오류 OB를실행한후시스템함수 SFC 46으로 Stop 상태를요구합니다. 추가오류식별자는프로그램에서평가될수있는오류조직블록의시작정보에저장됩니다. 오류조직블록에대한설명은온라인도움말이나시스템및표준함수설명서에나와있습니다. CPU가지원하지않는오류OB의전송은오류메시지로거부됩니다. File: PRO2_08e.3 Information and 시작정보처리오류조직블록의사용에대한규칙에주의합니다. 모든조직블록의경우임시변수가선언부에서선언됩니다. 운영체제는시작정보를이변수에저장합니다. 운영체제는블록이호출된이유와같은추가정보를시작정보에저장합니다. 한예로서 OB 81 의시작정보를참고합니다. B#16#21: 중앙랙의한개이상의백억배터리가비어있음 (BATTF) B#16#22: 중앙랙의백업전압이없음 (BAF). B#16#23: 중앙랙에서 24V 공급이정지 / 제거됨 B#16#31: 확장랙의한개이상의백업배터리가비어있음 B#16#32: 확장랙의한개에백업전압이없음 B#16#33: 확장랙에서 24V 공급이정지됨 Page 3
비동기오류 OB 의보기 OB81: 오류 OB: 전원공급정지 네트워크 1: 배터리고장, 들어오는이벤트 L #OB81_FLT_ID // 오류식별자로드 L B#16#22 // 식별자 : CR에서배터리고장 ==I = M 81.1 // 보조메모리표시설정 L #OB81_EV_CLASS // 식별자 : 나가는, 들어오는 L B#16#39 // 식별자 : 들어오는이벤트 ==I = M 81.2 // 보조메모리표시들어오는이벤트 A M 81.1 // 배터리고장 A M 81.2 // 들어오는이벤트 S M 81.0 // 오류에대한보조메모리표시설정 // 표시 네트워크 2: 배터리가정상일때보조메모리표시리셋 L #OB81_EV_CLASS // 식별자 : 들어오는, 나가는 L B#16#38 // 식별자 : 나가는 ==I R M 81.0 // 보조메모리표시리셋 File: PRO2_08e.4 Information and 작업정의 설명 배터리고장이나면운영콘솔에오류표시가나타나야합니다. 배터리를교체한후그표시는자동으로꺼져야합니다. 예를들어배터리고장과같은전원공급오류의경우운영체제가오류조직블록을한번호출합니다. 오류가제거된후 OB81 을한번더호출합니다. 프로그램보기에서배터리고장이있었는지를결정하기위해 OB81_FLT_ID 변수를평가합니다. 이경우변수는값 22H 를포함합니다. 비교가완료되고비트메모리 M 81.1 이발생됩니다. 오류표시는배터리가고장날때 ( 들어오는이벤트 ) 시작되어서오류가제거된후 ( 나가는이벤트 ) 해제됩니다. 다음식별자는변수 OB81_EV_CLASS 에있습니다. B#16#39 들어오는이벤트 B#16#38 나가는이벤트보조메모리표시 M 81.0 의설정과리셋은이들변수의평가를통해이루어집니다. 순환프로그램에서보조메모리표시 M81.0 은점멸시계메모리에링크되어출력을할당받을수있습니다. 출력은배터리가비어있거나제거되어있는동안점멸합니다. Page 4
동기오류처리 동기오류는사용자프로그램의한위치에직접할당됩니다. 산술인스트럭션에서의오류 ( 과잉, 적절하지않은 REAL 숫자 ) 상태비트설정 STL 인스트럭션을프로세싱할때의오류 ( 동기오류 ) 동기오류 OB의호출 오류종류보기오류 OB 프로그래밍오류 액세스오류 Called block does not exist in the CPU Direct access on a defective or not existing module OB 121 OB 122 File: PRO2_08e.5 Information and 동기오류 동기오류마스크 CPU 의운영체제는오류가프로그램프로세싱과즉시연결되어발생하는동기오류를만듭니다. OB121 은프로그래밍오류로호출됩니다. OB122 는액세스오류로호출됩니다. 동기오류 OB 가 CPU 에로드되지않으면 CPU 는동기오류가발생할때 STOP 모드로전환합니다. 동기오류 OB 는오류가발생하는블록과같은우선순위를가집니다. 그때문에인터럽트된블록의레지스터는동기오류 OB 에서액세스되고동기오류 OB 의프로그램도또한 ( 필요하다면변경된내용을가지는 ) 레지스터를인터럽트된블록으로반환할수있습니다. S7 은다음 SFC 를가지며이 SFC 를이용해프로그램이처리되는동안 OB121 시작이벤트를마스크하거나마스크해제할수있습니다. SFC36 "MSK_FLT": 특정오류코드를마스크 SFC37 "DMSK_FLT": SFC36 으로마스크된오류코드의마스크를해제 SFC38 "READ_ERR": 오류레지스터읽음 Page 5
프로그래밍오류 OB121 에대한시작정보 변수이름데이터형설명, 할당 OB121_EV_CLASS BYTE B#16#25= 프로그램오류 OB121 호출 OB121_SW_FLT BYTE 오류코드 ( 텍스트참고 ) OB121_PRIORITY BYTE 오류가발생한우선순위클래스 OB121_OB_NUMBR BYTE OB 번호 (B#16#79) OB121_BLK_TYPE BYTE 인터럽트된블록의형식 (S7-400) OB: B#16#88, DB: B#16#8A, FB: B#16#8E, FC: B#16#8C OB121_RESERVED_1 BYTE 오류코드에추가 ( 텍스트참고 ) OB121_FLT_REG WORD OB121: 오류소스 OB121_BLK_NUM WORD 오류가발생한블록의번호 OB121_PRG_ADDR WORD 오류가발생한블록에서의오류어드레스 (S7-400) OB121_DATE_TIME DT 프로그래밍오류가발생한시점기록 File: PRO2_08e.6 Information and 오류코드 B#16#21: BCD 전환오류. 변수 OB121_FLT_REG는관련레지스터에대한 (OB121_SW_FLT) 식별자를포함합니다. B#16#22: 읽기중범위길이오류 B#16#23: 쓰기중범위길이오류 B#16#28: 0이아닌비트어드레스를가지는 BYTE, WORD, DWORD에대한간접읽기액세스 ( 읽기중정렬이잘못됨 ) B#16#29: 0이아닌비트어드레스를가지는 BYTE, WORD, DWORD에대한간접쓰기액세스 ( 쓰기중정렬이잘못됨 ) 이경우에 OB121_FLT_REG는잘못된바이트어드레스를포함하며 OB121_RESERVED_1은액세스의형식과메모리영역을포함합니다. 비트 4에서 7까지 ( 액세스형식 ): 비트 0에서 3까지 ( 메모리영역 ) 0: 비트액세스 0: I/O 영역 4: 공유 DB 1: 바이트액세스 1: PII 5: 인스턴스 DB 2: 워드액세스 2: PIQ 6: 자체로컬데이터 3: 더블워드액세스 3: 비트메모리 7: 호출자의로컬데이터 B#16#24: 읽기중범위오류 B#16#25: 쓰기중범위오류 OB121_FLT_REG는식별자 B#16#86: own local data area를포함합니다. B#16#26: 타이머번호오류 (OB121_FLT_REG의숫자가적절하지않음 ) B#16#27: 카운터번호오류 (OB121_FLT_REG의숫자가적절하지않음 ) B#16#30: 쓰기보호된공유 DB에대한쓰기액세스 (OB121_FLT_REG의숫자) B#16#31: 쓰기보호된인스턴스 DB에대한쓰기액세스 (OB121_FLT_REG의숫자 ) B#16#32: 공유 DB에대한액세스에서번호오류 (OB121_FLT_REG의숫자) B#16#33: 인스턴스 DB에대한액세스에서번호오류 (OB121_FLT_REG의숫자 ) B#16# 34: FC 호출에서번호오류 (OB121_FLT_REG의숫자) B#16#35: FB 호출에서번호오류 (OB121_FLT_REG의숫자) B#16#3A: 로드되지않은 DB에대한액세스 (OB121_FLT_REG의숫자) B#16#3C: 로드되지않은 FC에대한액세스 (OB121_FLT_REG의숫자) B#16#3D: 로드되지않은 SFC에대한액세스 (OB121_FLT_REG의숫자) B#16#3E: 로드되지않은 FB에대한액세스 (OB121_FLT_REG의숫자) B#16#3F: 로드되지않은 SFB에대한액세스 (OB121_FLT_REG의숫자) Page 6
액세스오류 OB122 에대한시작정보 Variable Name Data Type Description, Assignment OB122_EV_CLASS BYTE B#16#29=Call Access Error OB122_SW_FLT BYTE Error Code (Possible Values: B#16#42, B#16#43, B#16#44, B#16#45) OB122_PRIORITY BYTE Priority class in which the error occurred OB122_OB_NUMBR BYTE OB Number (B#16#80) OB122_BLK_TYPE BYTE Type of interrupted block (only S7-400) OB: B#16#88, DB: B#16#8A, FB: B#16#8E, FC: B#16#8C OB122_MEM_AREA BYTE Addition to error code (see text) OB122_FLT_REG WORD OB122: Operand address at which the error occurred OB122_BLK_NUM WORD Number of block in which the error occurred OB122_PRG_ADDR WORD Error address in the error causing block (only S7-400) OB122_DATE_TIME DT Recording point in time of programming error File: PRO2_08e.7 Information and 오류코드 변수 OB122_SW_FLT는다음의미를가집니다. B#16#42 S7-300: I/O 읽기액세스오류 S7-400: 오류발생후첫번째읽기액세스 B#16#43: S7-300: I/O 쓰기액세스오류 S7-400: 오류발생후첫번째쓰기액세스 B#16#44: Only for S7-400: 오류발생후 n번째 (n>1) 읽기액세스에서오류 B#16#45: Only for S7-400: 오류발생후 n번째 (n>1) 쓰기액세스에서오류 OB122_MEM_AREA 변수 OB122_MEM_AREA 는액세스의형식과메모리영역에대한정보를포함합니다. 비트 4 에서 7 은액세스의형식 0: 비트액세스 1: 바이트액세스 2: 워드액세스 3: 더블워드액세스비트 0 에서 3 은메모리영역 0: I/O 영역 1: 프로세스이미지입력표 2: 프로세스이미지출력표 Page 7
동기오류마스크 동기오류 OB의단점 : 프로세스관리및오류처리를위한코드가 2개이상의블록에분산 이후변경또는유지보수에서의문제점 장점 : 프로세스관리및오류처리를위한코드가같은블록에있음 동기오류마스크 : 위험한 인스트럭션사용이전 : SFC 36 MSK_FLT: 동기오류마스크 (OB12x-호출금지 ) 위험한 인스트럭션실행 오류가발생했는지여부평가 SFC 38 READ_ERR: 오류레지스터읽음 OB12x-호출다시허용 : SFC 37 DMSK_FLT: 동기오류마스크해제 File: PRO2_08e.8 Information and 동기오류 OB 의동기오류 OB 에의한동기오류이벤트의처리는많은단점을가집니다. 단점 적합한오류처리의경우동기오류를발생할수있는인스트럭션을가지는모든블록에대해동기오류 OB 에서해당오류평가를실행해야합니다. 따라서사용자프로그램에서오류가발생한장소를찾아내고상황에맞게반응하기위해동기오류 OB 에서상당한작업을수행해야합니다. 기존블록에서변경사항이있으면동기오류 OB 에서도대응하는변경이이루어져야합니다. 동기오류 OB 에서해당사항을수정하지않으면블록은사용자프로그램에서통합될수없습니다. 동기오류 OB에 S7은 Masking Synchronous Errors 함수를이용해서프로세스관리및관련 대한대안 오류처리가같은블록에설치될수있게하는메카니즘을제공합니다. 예를들어이메카니즘은다음단계를통해만들어집니다. 1. 중요한 인스트럭션 ( 예 : DB 열기또는길이를모르는 DB 에대한액세스 ) 을실행하기전에해당동기오류가 SFC 36 MSK_FLT 에의해마스크될수있습니다. 인스트럭션이실행되지못하면동기오류 OB 는호출되지않습니다. 2. 중요한인스트럭션을실행한후사용자는 SFC 38 READ_ERR 에의해오류가중요한섹션에서발생했는지여부를확인할수있습니다. 3. 활동을결론지을때이전에마스크된동기오류의마스크를해제할수있으며따라서동기오류 DB 에대한호출이다시허용됩니다. Page 8
동기오류의마스크를위한 SFC 36 EN "MSK_FLT" ENO??.? PRGFLT_SET_MASK RET_VAL??.???.? ACCFLT_SET_MASK PRGFLT_MASKED??.? ACCFLT_MASKED??.? 파라미터 선언 데이터형 메모리영역 설명 PRGFLT_SET_MASK INPUT DWORD I, Q, M, D, L, Const. 새 ( 추가 ) 프로그래밍오류필터 ACCFLT_SET_MASK INPUT BYTE I, Q, M, D, L, Const. 새추가액세스오류필터 RET_VAL OUTPUT INT I, Q, M, D, L SFC 반환값, W#16#0001: 새필터와기존필터병행 PRGFLT_MASKED OUTPUT DWORD I, Q, M, D, L 완전한프로그래밍오류필터 ACCFLT_MASKED OUTPUT DWORD I, Q, M, D, L 완전한액세스오류필터 File: PRO2_08e.9 Information and 동기오류마스크 SFC 36 MSK_FLT 의경우오류필터를통해동기오류 OB 의호출을금지합니다. 신호상태 1 을이용해오류필터에서 OB 가호출되지않는동기오류종류를구분합니다 ( 동기오류가 마스크 됩니다 ). 지정된마스크는운영체제에저장된마스크 ( 필터비트의 OR 논리연산 ) 에첨가되어관리됩니다.SFC36 은반환값으로입력파라미터에서지정된마스크의경우 1 비트이상에대한마스크가이미존재했는지의여부를표시합니다 (W#16#0001). SFC36 은출력파라미터를이용해신호상태가 1 인현재마스크된모든이벤트를전달합니다. CPU 반응 마스크범위 프로그래밍또는액세스오류가마스크될때 CPU 는이런종류의오류에다음과같이반응합니다. 1. 프로그래밍또는액세스오류에대해오류 OB 가호출되지않습니다. 2. 오류이벤트는오류레지스터에입력됩니다. 오류레지스터는 SFC38 READ_ERR 을이용해읽을수있습니다. 3. 운영체제는마스크에관계없이진단버퍼에동기오류를입력합니다. 마스크는 SFC 36 이호출되는우선순위클래스에대해서만유효합니다. 예를들어주프로그램에서동기오류 OB 의호출을금지한다고해도오류가인터럽트프로그램에서발생하면동기오류 OB 가호출됩니다. Page 9
프로그래밍오류필터의구조 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DB가로드되지않음쓰기오류 DB 쓰기오류인스턴스 DB FC가로드되지않음블록번호오류 DB FB가로드되지않음블록번호오류 DI 블록번호오류 FC 블록번호오류 FB 의미없음 BCD 전환오류읽기범위길이오류쓰기범위읽기오류읽기범위오류쓰기범위오류타이머번호오류카운터번호오류잘못된읽기정렬잘못된쓰기정렬 참고 : 출력파라미터 PRGFLT_MASKED 의해당비트는다음과같이설정됩니다. 값 = "1": 오류가마스크됨값 = "0": 오류가마스크되지않음해당비트가값 1 을가지지않음 File: PRO2_08e.10 Information and 프로그래밍오류필터를이용해동기오류처리를위한시스템함수를제어합니다. 오류필터프로그래밍오류필터에는일어날수있는모든프로그래밍오류에대한비트가있습니다. 오류필터를지정할때마스크, 마스크해제, 또는검사하고싶은동기오류비트를설정합니다. Page 10
액세스오류필터의구조 31 30 29... 7 6 5 4 3 2 1 0... 읽기에서 I/O 액세스오류 쓰기에서 I/O 액세스오류 의미없음 S7-400 전용 : 존재하지않는모듈의읽기또는반복된액세스에서의 I/O 액세스오류 참고 : 출력파라미터 ACCFLT_MASKED 의해당비트는다음과같이설정됩니다. 값 = "1": 오류가마스크됨값 = "0": 오류가마스크되지않음해당비트가값 1 을가지지않음 S7-400 전용 : 존재하지않는모듈에쓰기또는반복된액세스에서의 I/O 액세스오류 File: PRO2_08e.11 Information and 액세스오류필터 S7-400 CPU 는 2 가지종류의 I/O 액세스오류, 즉존재하지않는모듈에대한액세스와존재하는것으로입력된모듈에대한잘못된액세스를구분합니다. 모듈이작동중에실패하면프로그램이모듈에액세스할때타임아웃 (QVZ) 이발생합니다. 동시에모듈은 존재하지않는 것으로입력되어이후에액세스가일어날때마다 I/O 액세스오류 (PZF) 가표시됩니다. CPU 는또한 I/O 영역을통해직접적으로또는프로세스이미지를통해간접적으로존재하지않는모듈이액세스될때 I/O 액세스오류를표시합니다. Page 11
동기오류의마스크를해제하기위한 SFC 37 EN "DMSK_FLT" ENO??.? PRGFLT_RESET_MASK RET_VAL??.???.? ACCFLT_RESET_MASK PRGFLT_MASKED??.? ACCFLT_MASKED??.? 파라미터 선언 데이터형 메모리영역 설명 PRGFLT_RESET_MASK INPUT DWORD I, Q, M, D, L, Const. 리셋을위한프로그래밍오류필터 ACCFLT_RESET_MASK INPUT BYTE I, Q, M, D, L, Const. 리셋을위한액세스오류필터 RET_VAL OUTPUT INT I, Q, M, D, L SFC 반환값, W#16#0001: 새필터는저장된필터에서설정되지않은비트를포함 PRGFLT_MASKED OUTPUT DWORD I, Q, M, D, L 남은프로그래밍오류필터 ACCFLT_MASKED OUTPUT DWORD I, Q, M, D, L 남은액세스오류필터 File: PRO2_08e.12 Information and 동기오류마스크해제 오류필터를통해 SFC37 DMSK_FLT 시스템함수는동기오류 OB의호출을다시허용합니다. 신호상태 1 을이용해오류필터에서 OB가다시호출되는동기오류종류를구분합니다 ( 동기오류의 마스크가해제 됨 ). 오류레지스터에있는지정된마스크해제의해당항목은삭제됩니다. 반환값을이용해 SFC37 은입력파라미터에서지정된마스크해제의경우 1 비트이상에대해 ( 저장된 ) 마스크가존재하지않을때 W#16#0001 을표시합니다. SFC37 은출력파라미터를이용해신호상태가 1 인현재마스크된모든이벤트를전달합니다. 마스크가해제된동기오류가발생하면해당 OB 가다시호출되고이벤트가오류레지스터에입력됩니다. 현재우선순위클래스에대해해당 OB 를다시호출할수있습니다. Page 12
오류레지스터를읽기위한 SFC 38 EN "READ_ERR" ENO??.???.? PRGFLT_QUERRY ACCFLT_QUERRY RET_VAL??.? PRGFLT_CLR??.? ACCFLT_CLR??.? 파라미터 선언 데이터형 메모리영역 설명 PRGFLT_QUERRY INPUT DWORD I, Q, M, D, L, Const. 검사를위한프로그래밍오류필터 ACCFLT_QUERRY INPUT BYTE I, Q, M, D, L, Const. 검사를위한액세스오류필터 RET_VAL OUTPUT INT I, Q, M, D, L SFC 반환값, W#16#0001: 검사필터는 ( 저장된필터에서 ) 설정되지않는비트포함 PRGFLT_CLR OUTPUT DWORD I, Q, M, D, L 오류메시지를가지는프로그래밍오류필터 ACCFLT_CLR OUTPUT DWORD I, Q, M, D, L 오류메시지를가지는액세스오류필터 File: PRO2_08e.13 Information and 오류레지스터읽기 SFC38 READ_ERR 시스템함수는오류레지스터를읽습니다. 신호상태 1 을이용해오류필터에서항목을읽고싶은동기오류종류를구분합니다. 반환값을이용해 SFC38 은입력파라미터에서지정된선택의경우 1 비트이상에대해 ( 저장된 ) 마스크가존재하지않을때 W#16#0001 를표시합니다. SFC38 은이벤트가발생하고오류레지스터에서이들이벤트를검사하여삭제할때출력파라미터에신호상태가 1 인선택된이벤트를반환합니다. 세트비트는마스크된관련동기오류가한번이상발생했음을의미합니다. 현재우선순위클래스에서발생한동기오류가표시됩니다. Page 13
보기 : 데이터블록테스트 네트워크 1: 마스크, 테스트, 마스크해제 // "DB does not exist" 마스크 CALL SFC 36( PRGFLT_SET_MASK := DW#16#4000000, // 식별자 : DB does not exist ACCFLT_SET_MASK := DW#16#0, // 액세스오류에대해마스크하지않음 RET_VAL := SFC36Error, PRGFLT_MASKED := Prog36Mask, ACCFLT_MASKED := Zugr36Mask); // 호출테스트 OPN DB[DB_NO]; // 프로그램오류검사 CALL SFC 38( PRGFLT_QUERRY := DW#16#4000000, // 식별자 : DB does not exist ACCFLT_QUERRY := DW#16#0, // 액세스오류에대해마스크하지않음 RET_VAL := SFC38Error, PRGFLT_MASKED := Prog38Mask, ACCFLT_MASKED := Zugr38Mask); // 결과평과 L Prog38Mask L DW#16#4000000 ==D = DB_NOT_THERE // 보조변수 DB not there 설정 // "DB does not exist 마스크해제 CALL SFC 37( PRGFLT_RESET_MASK := DW#16#4000000, // 식별자 : DB does not exist ACCFLT_RESET_MASK := DW#16#0, // 액세스오류에대해마스크하지않음 RET_VAL := SFC37ERROR, PRGFLT_MASKED := Prog37Mask, ACCFLT_MASKED := Zugr37Mask); File: PRO2_08e.14 Information and 오류레지스터읽기 SFC38 READ_ERR 시스템함수는오류레지스터를읽습니다. 신호상태 1 을이용해오류필터에서항목을읽고싶은동기오류종류를구분합니다. 반환값을이용해 SFC38 은입력파라미터에서지정된선택의경우 1 비트이상에대해 ( 저장된 ) 마스크가존재하지않을때 W#16#0001 을표시합니다. SFC38 은이벤트가발생하고오류레지스터에서이들이벤트를검사하여삭제할때출력파라미터에신호상태가 1 인선택된이벤트를반환합니다. 세트비트는마스크된관련동기오류가한번이상발생했음을의미합니다. 현재우선순위에서발생한동기오류가표시됩니다. Page 14
연습 8.1: FC43 에서오류처리 Decl. Name Type in Measured values ANY out RET_VAL INT out Sum REAL out Mean value REAL EN FC 43 ENO Cause Error Code Everything O. K. 0 Data type<>real -1 DB does not exist -2 Range length errror -4 Measured values RET_VAL Sum Error Code Mean value File: PRO2_08e.15 Information and 개요 연습 4.3 에서 REAL 숫자의 ARRAY 에서합계와중간값을결정하는 FC43 을만듭니다. 지금까지기본오류처리 ( 데이터형검사 ) 만이이 FC 에서수행되었습니다. 오류처리는 FC43 이 충돌이전혀없게, 즉파라미터할당이잘못되었을때도동기오류가발생하지않는방식으로확장됩니다. 더욱이추가출력파라미터 RET_VAL 을이용해 FC43 은오류종류에대한정보를제공합니다. 목적 FC43 에서다음오류처리를통합합니다. REAL 이아닌데이터형이전달되면 FC43 은오류코드 1 로종료됩니다. 잘못된 DB 번호가전달되면 ( 예 : 허용범위밖의숫자또는 DB 가존재하지않음 ) FC43 은오류코드 2 로종료됩니다. 루프안에서존재하지않는어드레스에대한액세스가있으면 ( 범위또는범위길이오류 ) FC43 은오류코드 4 로종료됩니다. 모든오류에서 FC43 은 BR- 비트를 0 으로설정하고출력파라미터 Sum 과 Mean Value 에잘못된 REAL 숫자를반환합니다. 절차 1. FC43 에출력파라미터 RET_VAL ( 오류코드 ) 을추가합니다. 2. FC43 에서해당오류처리를수행합니다. 3. OB1 에서 FC43 호출을프로그램합니다. 4. 참여블록을 CPU 에다운로드하고결과를테스트합니다. 질문? 일어날수있는동기오류중어떤것이고려되지않았습니까? Page 15