Posts

Showing posts from August, 2022

S7-1500 TIA PORTAL에서 PLC TAG의 WORD 주소값 겹쳤을 때 발생하는 현상

Image
  원래 목적은 아래와 같이 입력 INT를 6으로 나눠 출력을 내고 이 출력을 BCD로 표시하는 것이다. 아래 그림은 목적대로 작동할 때이다. 문제는 아래와 같이 나오는 현상이 있을 때가 있는데 이에 대한 조치 방안을 올린다. 원인은 아래 그림 처럼 WORD의 주소값을 중첩되게 적었기 때문이다. 워드는 2바이트로 항상 짝수 단위로 주소를 적는게 관습인데 이를 무시하고 1바이트 단위로 주소를 배정하니 값을 입력해도 0에서 변화하지 못한다. 따라서, 아래와 같이 PLC TAG의 주소를 수정하면 정상적으로 결과가 나온다.

The instructions "OPN" and "OPNDI" are only allowed in blocks with standard access. 발생 시 조치 방안

Image
  STL로 DB를 OPN시 아래와 같이 에러가 뜨는 것은 Optimized block access가 체크되어 있어서 그렇다. 이를 체크 해제하면 에러가 사라진다. 하지만, 인스턴스DB의 경우 처음부터 체크를 해제할 수 없으니 참고해야한다. 인스턴스 DB는 체크박스가 비활성화 되어 있다. 일단 DB의 경우 체크 해제할 수 있으니 OPN으로 DB를 열때는 글로벌DB를 사용하자. 글로벌 DB를 만들어 Optimized block access를 해제하고 OB1에 넣으니 잘 작동한다.

지멘스 S7-1500 컴파일 시 "ACCU2" is not initialized 에러 조치 예시

Image
컴파일 중 아래와 같은 에러가 발생할 경우 조치 방안을 확인한다.  Network 1,"ACCU2" is not initialized. Access is invalid. 원인은 STL 명령 중 RLD에 인자가 없기 때문이다. 아래와 같이 수정하면 에러가 사라진다. (RLD 4)

지멘스 PLC의 누산기 (ACCU) 설명 및 부호 있는 오른쪽 정수 시프트 예제

Image
  지멘스 PLC는 STL이라는 언어를 지원하는데 이 언어를 사용할 때 중요한 개념 중 하나가 Accumulators이다. Accumulator는 프로세서가 빠른 연산을 하기 위한 데이터 저장 레지스터 중 하나이다. 지멘스 PLC에는 ACCU1,2 2개가 존재하며 각각 32bit의 레지스터이다. STL을 사용하는데는 여러 이유가 있는데 그중 하나가 이 ACCU를 직접 핸들링 가능하다는 것이다. STL을 이용하여 부호가 있는 오른쪽 정수를 시프트 하는 예제를 참고로 추가한다.

지멘스 FB 제작 시 CLOCK MEMORY BIT를 FC의 출력으로 중첩 사용하면 ALWAY TRUE가 비활성화 되는 현상

Image
CLOCK MEMORY BIT 를 ENABLE 시키면 ALWAY TRUE, ALWAYS FALSE, CLOCK 1HZ 등을 사용할 수 있다. - Clock Memory Bit 설정 예시 - 다만, 이 경우 유저가 생성한 FC 등에 출력으로 해당 SYSTEM MEMORY 영역을 중첩해서 사용하면 컴파일 및 DOWNLOAD는 가능하지만 실제로 로직 상 작동이 안되는 현상이 생긴다. FC20의 이전 네트워크에 있는 FC19의 내부 로직을 보면 BI 출력을 %MW0으로 사용하여 Clock Memory Bit와 중첩된다. 이로 인해 FC20의 %M0.2가 비활성화 된다. 그 이유는 이전의 Clock Memory Bit가 아닌 새로 정의된 FC19의 %MW0이 비활성화 되어 있기 때문이다. 새로 설정된 로직이 우선하기 때문에 그렇다. 아래와 같이 BI 출력 어드레스를 변경한다. 아래와 같이 Network 7의 %FC20의 %M1.2가 ON됨을 알 수 있다.

IO LINK 센서 추가 시 TIA PORTAL에 설정 방법

Image
 ifm 사 IF6123 근접 센서의 설정 예시 ifm사 사이트에서 설정하려는 센서 정보를 찾은 뒤 프로세스 데이터의 총 비트 길이를 확인한다.  아래의 경우 16비트이므로 TIA PORTAL에서 IO-Link In 2Bytes + PQI를 해당 포트에 설정해준다. LR Device를 실행하여 IO LINK MASTER를 찾아서 아래와 연결 되었음을 확인할 수 있다. 만약 PLC에 사전 설정 없이 LR Device에서 연결하려 시도하면 아래와 같이 PLC Error이 뜬다. 내 경우는 프로피넷 연결을 통하는 구조여서 그럴 수 있으니 Ethernet/IP나 IoT 포트를 통하는 경우는 다를 수 있다.

RLO EDGE 탐지 학습

Image
RLO 에지 탐지 로직에 대해 학습한다. 상세 설명은 생략하고 내가 배운 점이 있는 부분만 요약한다. S7-300의 -(P)-, -(N)-과 S7-1500의 -(P)-,-(N)-은 차이점이 생겼다. 중요한 것은 Tag_M이 과거에는 한 렁 안에 들어있지 않았는데 지금은 한 렁 내의 아래에 넣을 수 있다. S7-300  S-1500 S7-1500 테스트 사례 초기 상태 input0이 1이되면 상승 엣지 펄스 생성되어 tag_4가 1->0이 되고 mem0가 1이 된다. input0이 off되면 tag_4는 1펄스만 on되었지만 그 아래에서 자기 유지를 통해 output0의 출력이 활성화된다. 이때는 input0이 0이 되면서 RLO가 1->0이 되므로 mem0도 false가 된다. 이후 리셋 버튼을 누르면 output0도 off된다. (자기 유지 해제) 리셋버튼 누른 것을 떼면 초기 상태로 돌아간다. 위 테스트 예시와 같이 RLO가 0->1이 되면 (P)는 1스캔 동안 ON되고 OFF되지만 Memory Bit는 RLO가 1로 유지되는 동안 ON 되었던 결과를 남길 수 있다. 다만, RLO가 0 이 되면 메모리 비트 역시 해제된다. (N)는 위와 반대로 RLO(논리연산결과)가 1->0이 되면 1스캔 동안 ON되고 OFF되며 Memory Bit도 동일하게 작동한다.

Openness를 활용하여 TIA PORTAL의 DB, UDT, TAG를 읽어오는 프로그램

 TIA PORTAL의 DB나 UDT, TAG 등을 저장하려 할때 TAG는 손쉽게 저장이 가능하지만 DB나 UDT는 별도 저장이 어려운 구조이다. 이를 극복하기 위해 Openness API를 활용하여 프로젝트에서 자동으로 해당 내용 들을 백업받는 프로그램을 사용해본다. 기존에 깃헙에 올라온 소스코드를 가져다가 조금 보완했다. 보완점 1. 그룹 하위에 그룹을 만들어 저장한 경우 원 프로그램은 1번째 레이어의 DB만 저장하였으나 내가 만든건 최대 7번째 레이어까지 저장 가능하다.  2. exec.bat 배치 파일을 만들어서 별도 폴더 지정 없이 실행 프로그램이 있는 폴더 내 output 폴더에 저장 가능하도록 했다. 3. 가끔 DB명에 특수기호 (예. '/')가 들어간 경우 예외처리 오류가 발생하여 이런 부분이 안생기도록 0-9, A-z, . , _ 만 허용하도록 함수를 추가했다. 프로그램 공유는 깃헙 주소로 대체한다. - 원 프로그램 : https://github.com/cezar1/TiaExportBlocks - 보완 프로그램 : https://github.com/KDW79/TiaExportBlocks.git