특수프로그램 등록 및 편집
프로그램에서 새 프로그램 (N)을 선택합니다.
새 프로그램 추가/작성을 하면 아래와 같은 프로그램 블록이 나타납니다.
프로그램 이름 : 이름을 정해줍니다. 최대 12자까지 입력할 수 있습니다.
프로그램 ID : 프로그램 마다 각각의 ID를 정해줍니다.
프로그램 여유공간 : CPU 상태가 RUN중일 경우 특수 프로그램에서 프로토콜을 편집하고자 할 때 편집 가능한 최대 사이즈를 나타냅니다.
프로그램 종류 : 현재 등록하고자 하는 프로그램 종류를 정해줍니다. 특수프로그램 선택
파라미터 등록이 끝났으면 [확인] 버튼을 클릭합니다.
3, [확인]을 하면 프로토콜을 등록할 수 있는 대화상자가 활성화합니다.
프로토콜을 등록할 수 있는 PROT.SPC 파일이 생성됩니다.
베이스 : 통신 카드(CM1-SC0XX)가 장착되어 있는 베이스를 선택합니다.
슬롯 : 통신 카드(CM1-SC0XX)가 장착되어 있는 슬롯을 선택합니다. 슬롯은 CPU모듈이 장착된 다음 슬롯부터 슬롯번호가 정해 집니다.
채널 : 마스터 슬레이브 간의 통신 포트를 선택합니다.
통신결과
송신 : SEND 명령없이 자동 송신 주기를 설정하여 데이터를 송신하는 경우 해당 번호의 비트에 송신 성공 / 실패를 나타냅니다. (통신 결과 : M0000)
송신 성공 : M0000의 프레임 번호에 해당되는 비트를 1 Scan On 합니다.
송신 실패 : M0020의 프레임 번호에 해당되는 비트를 1 Scan On 합니다.
수신 : 자동 송신 프레임에 대해 수신프레임이 송신에 대한 수신 프레임에 정의 되어 있으면 정의된 수신 프레임을 정상적으로 수신하였는지를 나타냅니다. (통신결과 메모리 영역 : M0000)
수신 성공: M0000의 프레임 번호에 해당되는 비트를 1 Scan On 합니다.
수신 실패: M0020의 프레임 번호에 해당되는 비트를 1 Scan On 합니다.
번호 | 프레임 | 주기 | 송신에 대한 수신프레임 | 수신에 대한 송신프레임 | 통신결과(M0000) | |
성공시 | 실패시 | |||||
3 | 송신프레임 | 50ms | 번호 ‘4’ | - | - | - |
4 | 수신프레임 | - | - | - | M0004 | M0024 |
7 | 송신프레임 | 100ms | - | - | M0007 | M0027 |
프레임 추가 버튼을 선택하면 프레임 편집을 할 수 있습니다.
프레임 이름 : 프레임 이름을 등록합니다. (최대 20자)
통신방향 : 현재 등록하는 프레임이 송신 프레임인지 수신 프레임인지 선택합니다.
통신주기 : PLC 프로그램에 송신 명령(SEND)없이 설정된 통신 주기가 되면 자동으로 프레임이 송신됩니다. 통신 주기가 ‘0’이면 SEND명령이 있어야만 프레임이 송신됩니다. 통신 주기를 사용하여 프레임을 송수신 하면 PLC 프로그램이 필요없게 되므로 PLC 프로그램을 작성하여야 하는 번거로움이 없어집니다.
송신에 대한 수신 프레임 : 통신방향이 송신프레임인 경우만 해당됩니다. 해당 프레임이 송신되고 송신에 대한 수신 프레임에 프레임이 등록되어 있다면 PLC 프로그램에 수신 명령(RECV) 없이 등록된 프레임을 수신 대기 합니다.
수신후 자동 송신 프레임 : 통신방향이 수신프레임인 경우만 해당되는데, 해당 프레임이 수신되면 PLC프로그램에 송신 명령 없이 등록된 송신프레임이 자동으로 송신됩니다.
특수데이터 식별코드 사용 : 송/수신 되는 프레임의 데이터 중에서 특수 데이터를 식별해 내는 기능입니다. 송수신되는 프레임 데이터중에 해당 식별자와 같은 문자가 있는 경우 특수데이터에 등록된 데이터가 식별문자 다음에 붙어 송수신 됩니다. 예를 들어, 식별자를 16진수 FDh로 등록하고, 특수데이터에 FFh를 등록한 경우 특수데이터는 최대 4개까지 등록할 수 있습니다. 만약 특수데이터 4개가 등록 되어있다면 식별문자 다음에 4개가 붙어 연속으로 송/수신됩니다.
Header | Length | Cmd | MSG | Checksum |
FEh | 03h | 3Ch | 3Fh | FD |
Header | Length | Cmd | MSG | Checksum | 특수데이터 |
FEh | 03h | 3Ch | 3Fh | FDh | FFh |
세그먼트 추가 : 세그먼트를 추가함으로 해서 프레임이 작성됩니다. 최대 10 개의 세그먼트를 등록할 수 있습니다.
세그먼트 편집 : 작성된 프레임의 세그먼트들을 편집합니다.
세그먼트 삭제 : 작성된 프레임의 세그먼트를 삭제합니다.
위로 이동 : 작성된 프레임의 세그먼트들의 위치를 바꾸고자 할 때 사용합니다. 선택되어진 세그먼트를 한칸씩 위로 이동합니다.
아래로 이동 : 작성된 프레임의 세그먼트들의 위치를 바꾸고자 할 때 사용합 니다. 선택되어진 세그먼트를 한칸씩 아래로 이동합니다.
프레임을 작성하기 위해 세그먼트 추가를 합니다.
SEGMENT0 | SEGMENT1 | ..... | SEGMENT8 | SEGMENT9 |
세그먼트 유형
고정값
작성하고자 하는 프레임중 데이터의 변화가 없는 고정된 데이터를 의미합니다. ASCII또는 Binary형태로 값을 지정합니다. 데이터가 Binary형태인 경우에는 16진 숫자로 지정하며, 한 Byte의 데이터를 2자리 16진수로 지정하고, 아스키 형태인 경우에는 한 문자가 한 Byte의 데이터로 취급됩니다.
[고정값 데이터 송신]
PLC | 12345678 | 12345678 |
데이터 변환 | 바이너리 | 아스키 |
상대 기기 | 12345678 | 31 32 33 34 35 36 37 38 |
[고정값 데이터 수신]
상대 기기 | 12345678 | 31 32 33 34 35 36 37 38 |
데이터 변환 | 바이너리 | 아스키 |
PLC | 12345678 | 31 32 33 34 35 36 37 38 |
무 시
수신되는 데이터의 값에 관계없이 지정된 길이만큼의 데이터를 수신 후 폐기하는 세그먼트입니다. 수신프레임에서만 설정 가능합니다. 특수데이터 식별코드 적용을 하게 되면 특수데이터의 식별자와 같은 문자가 연속해서 수신되는 것을 식별하여 식별자 다음에 오는 데이터를 무시해 버립니다.
길이가 255(bytes)로 지정이 되면 뒤 따르는 세그먼트가 수신될 때 까지 길이와 관계없이 무시 처리됩니다. 따라서, 뒤 따르는 세그먼트는 반드시 고정값 형태의 세그먼트로 정의되어야 합니다.
메모리 링크
CPU의 메모리에 저장되어 있는 데이터를 지정된 길이만큼 송신하거나, 수신된 데이터를 지정된 길이만큼 CPU메모리 영역에 저장하는 세그먼트입니다. 최대 데이터 사이즈는 250Byte 입니다.
길이가 255(bytes)로 지정이 되면 가변길이형 세그먼트로 동작됩니다. 이 형태의 세그먼트는 프레임의 종류(송/수신)와 ASCII 변환 방식에 따라 다소의 동작 차이가 있습니다. 아래의 ASCII 데이터변환과 관련된 내용을 참조 바랍니다. 이때는 BCC 체크 즉, 오류검사 방식이 동작을 하지 않습니다.
특수데이터 식별코드 적용을 하게 되면 특수데이터의 식별자와 같은 문자가 연속해서 수신되는 것을 식별하여 식별자 다음에 오는 데이터를 무시해 버립니다. 어드레스에는 송/수신할 데이터의 CPU메모리 영역을 지정합니다. 특수데이터 식별코드 적용됩니다.
아스키(ASCII) 데이터변환
무변환(바이너리) | CPU메모리 영역에 있는 데이터를 변환없이 그대로 송/수신합니다.
가변길이형 수신 세그먼트인 경우 뒤 따르는 세그먼트가 수신될 때 까지 수신되는 모든 데이터가 지정된 메모리 영역에 아래의 그림과 같은 포멧으로 저장됩니다. (뒤 따르는 세그먼트는 반드시 고정값 형태의 세그먼트로 정의되어야 합니다.) 메모리의 첫 번째 워드에 수신된 세그먼트 데이터의 길이(byte 수)가 기록되고, 그 길이 만큼의 실제 수신데이터가 연속되어 저장됩니다. 홀수 byte 길이로 수신되면 가장 마지막 데이터는 워드메모리의 상위 값으로 위치됨을 유념하십시오.
송신프레임에 정의되는 가변길이형 세그먼트인 경우 송신 데이터가 저장된 메모리는 아래와 같은 포멧으로 준비되어야 합니다. 지정된 메모리의 첫 워드에 송신할 세그먼트 데이터의 길이(byte 수)가 기록되어 있어야 하고, 연속하여 송신 데이터가 그 길이만큼 저장되어 있어야 합니다. 송신프레임의 경우에는 뒤 따르는 세그먼트의 종류에 대한 제약은 없습니다. 다만, 송신 데이터의 길이가 홀수로 지정되어 최종 워드 데이터의 일부만 전송되어야 하는 경우, 해당 워드값의 상위 바이트가 송신됨을 유의하십시오.
|
16진 정수 | 송신시 CPU메모리 영역의 데이터를 16진 ASCII데이터로 변환하여 송신하고, 수신시 16진 ASCII데이터를 바이너리 데이터로 변환하여 CPU 메모리에 저장합니다.
가변길이형 세그먼트인 경우 메모리 영역을 운용하는 포멧은 앞서 설명된 무변환 방식의 경우와 동일합니다. 송신 세그먼트인 경우 실제 제작되는 송신프레임의 길이는 메모리의 선두에 기록된 데이터 길이(byte 길이)의 두 배로 계산될 수 있습니다. 1 byte의 데이터를 16진수 ASCII 값으로 표현하기 위해서 2 byte의 공간이 필요하기 때문입니다. 또한, 예에 보인 바와 같이, 송신 데이터의 길이가 홀수로 지정되어 최종 워드 데이터의 일부만 전송되어야 하는 경우, 해당 워드값의 상위 바이트가 송신됨을 유의하십시오.
|
10진 정수 | 송신시 CPU메모리 영역의 데이터를 10진 ASCII데이터로 변환하여 송신하고, 수신시 10진 ASCII데이터를 바이너리 데이터로 변환하여 CPU메모리에 저장합니다.
가변길이형 세그먼트인 경우 메모리 영역을 운용하는 포멧은 앞서 설명된 무변환 방식의 경우와 동일합니다. 다만, 송신데이터의 길이가 4를 초과하지 않도록 하십시오. 4 byte 이상의 데이터는 10진 ASCII로 표현 가능한 범위를 초과합니다. 실제 제작되는 송신프레임의 최대 길이는 11 byte 입니다. 즉, 부호 포함 11자 이내의 길이로 10진 ASCII 문자열 세그먼트를 구성하여 송신 프레임을 제작합니다.
한편, 10진 정수형 가변길이 수신 세그먼트의 경우, 데이터 길이 정보는 항상 4 byte로 고정됩니다. 즉, 아래의 예와 같이 수신데이터를 DWORD 데이터로 변환하여 메모리에 저장합니다.
|
실수(Float) | 송신시 CPU메모리 영역의 데이터를 스케일링(배율.1-10000) 을 해서 송신하고, 수신시 수신되는 데이터를 스케일링(배율.1-10000)을 해서 CPU메모리에 저장합니다.
가변길이 형태의 송신 세그먼트로 지정된 경우 스케일링 설정값은 소수점 자리 이하 유효자리 수를 지정하는 용도로 사용됩니다. 예를 들어, 스케일링 값이 100으로 지정되면 소수점 이하 두 자리, 10000으로 지정되면 소수점 이하 네자리 까지를 의미합니다. 송신데이터 포멧은 선두에 데이터 길이 정보 1 워드를 위치시켜야 하고, 이어서 부동소수점 포멧의 데이터 1개(4 bytes)를 기록되어야 합니다. 이 때의 길이 정보는 의미 없습니다. (무조건 4 byte로 처리 됩니다)
가변길이 형태의 수신 세그먼트로 지정된 경우 스케일링 설정값은 의미를 갖지 않습니다. 수신된 10진 ASCII로 표현되어 있는 부동소수점 데이터를 지정된 메모리에 아래의 포멧으로 저장합니다. 이 때, 저장되는 길이 정보는 4 (bytes)로 항상 일정하며, 연속하여 저장된 데이터의 포멧은 부동소수점 데이터입니다. 이 데이터는 EMOV, EADD, FLT 등 각종 부동소수점 연산 명령어를 사용하여 처리할 수 있습니다.
|
아스키(ASCII) 데이터변환(F/W V1.62 이후)
무변환(바이너리) | CPU 메모리 영역에 있는 데이터를 변환없이 그대로 송/수신합니다.
고정길이형 세그먼트의 경우 다음 순서대로 데이터를 변환없이 처리합니다. 세그먼트의 길이는 11Byte로, 어드레스는 D0000으로 설정하였습니다.
[송신하는 CPU 모듈 측 D 디바이스 영역] [송신 프레임]
[수신하는 CPU 모듈 측 D 디바이스 영역] 가변길이형 세그먼트의 경우 다음 순서대로 데이터를 변환 없이 처리합니다. 반드시 고정값 형태의 세그먼트를 뒤에 추가해야 합니다. 세그먼트 길이는 255 Byte로, 어드레스는 D0000으로 설정하였습니다.
[송신하는 CPU 모듈 측 D 디바이스 영역]
[송신 프레임]
[수신하는 CPU 모듈 측 D디바이스 영역] |
16진 정수 | 송신 시, CPU메모리 영역의 데이터를 16진 ASCII 데이터로 변환하여 송신하고, 수신 시 16진 ASCII 데이터를 바이너리 데이터로 변환하여 CPU 메모리에 저장합니다.
고정 길이형 세그먼트의 경우 다음 순서대로 데이터를 변환하여 처리합니다. 세그먼트 길이는 11Byte 로, 어드레스는 D0000으로 설정하였습니다.
[송신하는 CPU 모듈 측 D 디바이스 영역]
데이터 변환 시, 다음 과정을 거쳐 처리됩니다. 3132h -> '3' '1' '3' '2' -> 33h 31h 33h 32h (4 Byte) 고정길이가 4의 배수로 지정되지 않은 경우, 마지막 WORD 데이터의 일부만 송신됩니다. 1WORD당 4Byte로 처리됩니다.
[송신 프레임] [수신하는 CPU 모둘 측 D디바이스 영역]
가변길이형 세그먼트의 경우 다음 순서대로 데이터를 변환하여 처리합니다. 반드시 고정값 형태의 세그먼트를 뒤에 추가해야합니다. 세그먼트 길이는 255Byte로, 어드레스는 D0000으로 설정하였습니다.
[송신하는 CPU 모듈 측 D 디바이스 영역] 첫번째 WORD 데이터가 가변길이로 처리됩니다. [송신 프레임] [수신하는 CPU 모듈 측 D디바이스 영역]
|
10진 정수 | 송신시 CPU메모리 영역의 데이터를 10진 ASCII데이터로 변환하여 송신하고, 수신시 10진 ASCII데이터를 바이너리 데이터로 변환하여 CPU메모리에 저장합니다. 고정길이형 세그먼트의 경우 다음 순서대로 데이터를 변환하여 처리합니다. 세그먼트 길이는 11 Byte로, 어드레스는 D0000으로 설정하였습니다.
[송신하는 CPU 모듈 측 D디바이스 영역] 어드레스 영역부터 입력된 1 WORD 데이터만 처리합니다. 데이터 변환 시, 다음 과정을 거쳐 처리됩니다. -12345 (INT형) -> 53191 (UINT형) -> '5' '3' '1' '9' '1' -> 35h 33h 31h 39h 31h (5 Byte) ->
[송신 프레임]
[수신하는 CPU 모듈 측 D 디바이스 영역]
가변길이형 세그먼트의 경우 다음 순서대로 데이터를 변환하여 처리합니다. 반드시 고정값 형태의 세그먼트를 뒤에 추가해야 합니다. 세그먼트 길이는 255Byte로, 어드레스는 D0000으로 설정하였습니다.
[송신하는 CPU 모듈 측 D디바이스 영역] 어드레스 영역부터 입력된 2 WORD 데이터만 처리합니다.
[송신 프레임] [수신하는 CPU 모듈 측 D디바이스 영역]
|
실수(Float) | 송신 시, CPU 메모리 영역의 데이터를 스케일링(배율 1-10000)을 해서 송신하고, 수신 시, 수신되는 데이터를 스케일링(배율 1-10000)을 해서 CPU 메모리에 저장합니다.
고정길이형 세그먼트의 경우 다음 순서대로 데이터를 변환하여 처리합니다. 세그먼트 길이는 11Byte 로, 어드레스는 D0000으로, 소수점 자리수(스케일링)은 2(x100)으로 설정하였습니다.
[송신하는 CPU 모듈 측 D 디바이스 영역] 어드레스 영역부터 입력된 2WORD 데이터만 처리합니다. 음수값의 경우(-) 부호까지 처리합니다. 데이터 변환 이후 남는 여유 공간은 선두부터 ‘sp’(20h)로 채워 송신합니다. 데이터 변환 시, 다음 과정을 거쳐 처리됩니다. -123.456 -> '-' '1' '2' '3' '.' '4' '5' -> 2Dh 31h 32h 33h 2Eh 34h 35h (7 Byte) ->
[송신 프레임]
[수신하는 CPU 모듈 측 D디바이스 영역] 가변길이형 세그먼트의 경우 다음 순서대로 데이터를 변환하여 처리합니다. 반드시 고정값 형태의 세그먼트를 뒤에 추가해야 합니다. 세그먼트 길이는 255Byte로, 어드레스는 D0000으로, 소수점 자리수(스케일링)은 2(x100)로 설정하였습니다.
[송신하는 CPU 모듈 측 D디바이스 영역] 어드레스 영역부터 입력된 3 WORD 데이터만 처리합니다. 음수값의 경우 -부호까지 처리합니다. 데이터 변환 이후 남는 여유 공간은 생략하여 송신합니다. 데이터 변환 시, 다음 과정을 거쳐 처리됩니다. -123.456 -> '-' '1' '2' '3' '.' '4' '5' -> 2Dh 31h 32h 33h 2Eh 34h 35h (7 Byte)
[송신 프레임]
[수신하는 CPU 모듈 측 D디바이스 영역] 수신 시, 가변길이는 항상 4로 처리됩니다. |
워드 데이터 상/하위 교환을 선택하게 되면 송/수신 되는 데이터중 상위 1Byte 데이터와 하위 1Byte 데이터를 교환합니다. 예를 들어 송신시 CPU메모리 영역에 저장되어 있는 데이터가 h1234(ASC:1234)라 가정하고, 워드 데이터 상/하위 교환을 하면 실제 송신되는 데이터는 h3412(ASC:3421)가 되며, 수신시 수신되는 데이터가 h1234(ASC:1234)라 가정하고, 워드 데이터 상/하위 교환을 하면 실제 수신되는 데이터 h3412(ASC:3412)가 CPU메모리에 저장됩니다.
단, 워드 메모리 데이터 송신시 상위 바이트 저장된 데이터가 먼저 송신되며, 워드 메모리 데이터 수신시 수신된 데이터는 상위 바이트에 먼저 저장됩니다.
[메모리 링크 데이터 송신]
PLC | 1234h | 1234h | 1234h | 1234h |
데이터 변환 | 무변환(바이너리) | 16진 정수 | 10진 정수 | 실수(스케일링:10) |
상대기기 | 1234h | 31323334 | 34363630 | 01D2h |
[메모리 링크 데이터 수신]
상대기기 | 1234h | 31323334 | 34363630 | 1234h |
데이터 변환 | 무변환(바이너리) | 16진 정수 | 10진 정수 | 실수(스케일링:10) |
PLC | 1234h | 1234h | 1234h | B608h |
오류검사 방식
프레임의 데이터가 올바르게 송/수신되었는지 에러검출 코드 연산을 합니다. 다양한 방식의 에러검출 코드연산을 지원합니다. 특수 데이터 식별합니다.
한 프레임에서 메모리링크를 가변 길이형 세그먼트 사용시는 동작 하지 않습니다.
SUM : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary Sum을 해서 설정 한 길이 (Byte)만큼 데이터를 송/수신합니다. 영역은 오류검사 영역(세그먼트 범위)에서 설정합니다. 아스키 데이터 변환에 관한 내용은 메모리 링크 부분을 참고바랍니다.
SUM+MASK : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary Sum을 하고 마스킹값(FFh)으로 AND 마스킹한 데이터를 설정된 길이(Byte)만큼 송/수신합니다. 아스키 데이터 변환에 관한 내용은 메모리 링크 부분을 참고바랍니다.
XOR : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary OR을 해서 설정된 길이(Byte) 만큼 데이터를 송/수신합니다. 아스키 데이터 변환에 관한 내용은 메모리 링크 부분을 참조하십시오.
XOR+MASK : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary OR을 하고 마스킹값(FFFFh)으로 AND 마스킹한 데이터를 설정된 길이(Byte)만큼 송/수신합니다. 아스키 데이터 변환에 관한 내용은 메모리 링크 부분을 참조하십시오.
MUL : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary MUL을 하고, 설정된 데이터 길이만큼 송/수신합니다.
MUL+MASK : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary MUL을 하고 마스킹값(FFFFh)으로 AND 마스킹한 데이터를 설정된 길이(Byte)만큼 송/수신합니다.
CRC16 : 편집한 프레임을 선택된 영역 시작부터 끝까지 CRC16계산에 의해 나온 데이터를 설정된 길이만큼 송/수신 합니다.
CRC16(MODBUS) : 편집한 프레임을 선택된 영역 시작부터 끝까지 CRC16 (MODBUS) 을 합니다.
SUM의 1의 보수 : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary Sum을 하여 나온 값에 1의 보수를 취해 설정 한 길이 (Byte)만큼 데이터를 송/수신합니다.
SUM의 2의 보수 : 편집된 프레임을 선택된 영역 시작부터 끝까지 Binary Sum을 하여 나온 값에 2의 보수를 취해 설정 한 길이 (Byte)만큼 데이터를 송/수신합니다.