Generic serial and TCP
계량 지시계나 바코드 리더처럼 고유한 텍스트나 바이트 프로토콜을 쓰는 장비를 시리얼 회선, TCP, UDP로 다룹니다. 메시지가 끝나고 검사되는 방식과, 각 태그가 거기서 값을 꺼내는 방식입니다.
Generic serial and TCP 드라이버는 표준 프로토콜이 맞지 않고 텍스트나 단순한 바이트로 된 고유한 프로토콜을 쓰는 장비를 읽고 씁니다. 계량 지시계, 바코드나 RFID 리더, 오래된 계기, 라벨 프린터 같은 장비입니다. 이런 장비에는 무엇인지 물어볼 수 없으므로 아무것도 검색하지 않습니다. 장치에는 장비가 보내는 메시지가 어떻게 끝나고 그 체크섬을 어떻게 검사하는지 알려 주고, 각 태그에는 값을 어떻게 얻는지, 어떤 메시지가 자기 것인지, 메시지의 어느 문자가 값인지 알려 줍니다.
장치는 만들 때 고르는 세 가지 방법 가운데 하나로 장비에 닿습니다.
| 전송 방식 | 장치에 닿는 방법 | 태그가 할 수 있는 일 |
|---|---|---|
| 시리얼 회선 위 | 이 드라이버의 시리얼 회선으로, 회선의 다른 장치와 함께 쓰며 요청은 한 번에 하나씩입니다. | 요청과 응답, 수신 대기, 쓰기. |
| TCP 클라이언트 | 장비의 호스트와 포트로 가는 자기만의 연결입니다. | 요청과 응답, 수신 대기, 쓰기. |
| UDP 수신 | 장비가 데이터그램을 보내는 이 스테이션의 포트입니다. 스테이션은 아무것도 보내지 않습니다. | 수신 대기만, 읽기 전용. |
시리얼 회선 위의 장치는 회선 아래에 놓이므로, 트리의 그 부분은 Modbus RTU처럼 드라이버 → 회선 → 장치 → 태그로 읽힙니다. 네트워크 장치는 드라이버 아래에 놓이고, 다른 어느 드라이버의 장치와도 마찬가지로 폴더에 넣을 수 있어 드라이버 → 폴더 → 장치 → 태그가 됩니다. 장치는 만들어진 쪽에 머뭅니다. TCP와 UDP는 서로 바꿀 수 있지만, 회선과 네트워크 사이를 옮겨 가지는 않습니다.
드라이버 페이지
머리글 아래 줄은 "시리얼 회선에는 버스 하나를 함께 쓰는 계기가 놓이고, 네트워크 장치는 드라이버 바로 아래에 놓입니다. 회선이나 장치를 추가한 다음 열어서 메시지 형식을 설정하십시오."라고 말하고, 페이지에는 표 두 개가 위아래로 있습니다.
| 표 | 늘리는 동사 | 나열하는 것 |
|---|---|---|
| 시리얼 회선 | 제목 오른쪽의 회선 추가. | 드라이버의 회선입니다. 회선, 물리 조합(포트 · 보 레이트 · 형식. 이 드라이버의 회선에는 제한 시간이 없으므로 넣지 않습니다), 장치, 상태, 그리고 열기, 사용, 사용 안 함, 삭제 동작입니다. 비어 있으면 "아직 시리얼 회선이 없습니다."라고 표시합니다. |
| 장치 | 제목 오른쪽의 장치 추가. 네트워크 장치, 곧 TCP 클라이언트를 만듭니다. | 회선 위의 장치를 포함한 드라이버의 모든 장치이며, 열은 어느 드라이버의 장치 표와도 같습니다. 비어 있으면 "아직 장치가 없습니다."라고 표시합니다. |
머리글은 괄호 안에 장치 수를 보여 주고, 트리의 드라이버 행은 회선이 하나라도 있으면 두 단계를 모두 셉니다("회선 1개 · 장치 2개"). 드라이버의 모음에는 검색이 없습니다. 드라이버 행을 오른쪽 단추로 누르면 장치 추가, 회선 추가, 새 폴더, 새로 고침이 나오고, 구분선 뒤에 드라이버 제거가 나옵니다. 열의 새로 만들기… 메뉴에서는 이 드라이버의 항목에 새 장치, 새 시리얼 회선, 새 폴더가 있고, 그 뒤에 회선, 폴더, 장치가 나옵니다. 추가한 드라이버는 회선이나 장치가 있든 없든 트리의 드라이버 폴더 아래에 놓입니다.
시리얼 회선
이 드라이버의 회선은 시리얼 회선에서 설명하는 회선에서 칸을 줄인 것입니다. 그 페이지는 "물리 시리얼 버스 하나입니다. 연결된 계기가 함께 쓰는 포트 설정이며, 요청은 한 번에 하나씩 보냅니다."라고 말하고, 물리 회선 카드에는 다음 칸이 있습니다.
| 칸 | 의미 | 기본값 |
|---|---|---|
| 이름 | 버스의 알아보기 쉬운 이름으로, 트리와 회선 위의 모든 장치에 표시됩니다. | "새 회선" |
| 시리얼 포트 | Windows의 COM 포트로, 물리, 가상, 리디렉션 어느 것이든 됩니다. 입력하거나 Windows가 알려 준 포트에서 고릅니다(새로 고침으로 다시 읽습니다). 포트 하나는 회선의 드라이버와 상관없이 회선 하나에 속합니다. | 첫 빈 포트 |
| 보 레이트 | 버스의 속도로, 회선의 모든 장치가 함께 씁니다. | 9600 |
| 시리얼 형식 | 데이터 비트, 패리티, 정지 비트입니다. 8N1, 8N2, 8E1, 8E2, 8O1, 8O2, 7N2, 7E1, 7E2, 7O1 가운데 하나입니다. 이 드라이버는 데이터 비트 8개가 필요하지 않으므로 열 가지를 모두 고를 수 있습니다. |
8E1 |
여기서 만든 회선은 사용 안 함 상태로 시작하므로, 포트가 열리기 전에 포트 설정을 입력할 수 있습니다. 포트, 보 레이트, 형식은 회선이 사용 안 함일 때만 바뀌고, 이름은 언제든 바뀝니다. 이 드라이버의 회선에는 전송 모드, 응답 제한 시간, 최소 트랜잭션 간격, 자동 무신호 시간이 없습니다. 회선의 각 장치가 메시지가 끝나는 방식과 응답을 기다리는 시간을 자기 패널에서 정합니다. 회선 아래의 장치 카드도 그렇게 말합니다. "이 회선의 모든 장치는 회선의 포트 설정을 함께 씁니다. 메시지가 끝나는 방식과 응답을 기다리는 시간은 장치마다 자기 패널에서 정합니다." 슬레이브 검색 카드는 없고, 장치 표에 유닛 ID 열도 없습니다. 계기는 주소가 아니라 요청이 말하는 내용으로 구분하기 때문입니다.
회선 위나 그 오른쪽 단추 메뉴의 장치 추가는 그 회선에 이 드라이버의 장치를 만듭니다. 회선은 만들어진 드라이버에 계속 속합니다. Modbus RTU 장치와 이 드라이버의 장치가 회선 하나를 함께 쓰는 일은 없고, 다른 드라이버의 회선에 장치를 붙이려는 에이전트는 거부됩니다. 회선의 상태(꺼짐, 대기, 연결하는 중…, 온라인, 포트 오류)는 모든 시리얼 회선과 같으며, 사용 설정과 상태 건전성에 있습니다.
회선에서 드라이버는 회선의 모든 장치를 위해 포트를 한 번만 열고, 요청을 한 번에 하나씩 보내며 다음 요청 전에 그 응답을 기다립니다. 요청 사이에 들어온 것은 회선의 모든 장치에 건네지고, 각 장치가 자기 규칙으로 메시지를 잘라 냅니다. 포트가 고장 나면 회선이 모든 장치를 위해 포트를 다시 열고, 고장이 이어지는 동안에는 시도 간격을 점점 늘립니다.
장치
연결
| 칸 | 의미 | 기본값 |
|---|---|---|
| 전송 방식 | 네트워크 장치에만 있습니다. TCP 클라이언트: "스테이션이 장치의 호스트와 포트에 연결합니다." UDP 수신: "장치가 보내는 것을 스테이션이 로컬 포트에서 받습니다. 스테이션은 아무것도 보내지 않습니다." 둘은 서로 바꿀 수 있습니다. 회선 위의 장치는 대신 회선을 보여 줍니다. | TCP 클라이언트 |
| 호스트 | TCP: 장비의 호스트 이름이나 IP 주소입니다. 앞에 tcp://, 호스트 뒤에 포트를 붙인 주소 전체를 붙여 넣을 수도 있습니다. |
비어 있음 |
| 포트 | TCP: 장비가 응답하는 포트로, 1에서 65535까지입니다. 이런 장비에는 표준 포트가 없으므로 새 장치에는 포트가 없습니다. | 비어 있음 |
| 받을 송신처 | UDP에서 호스트 대신 나옵니다. "이 주소에서 온 데이터그램만 읽습니다. 비워 두면 어느 송신처든 받습니다." | 비어 있음 |
| 로컬 포트 | UDP에서 포트 대신 나옵니다. "장치가 보내는 이 스테이션의 포트입니다. Windows 방화벽에서 허용해야 합니다." | 비어 있음 |
| 시리얼 회선 · 고정 | 회선 위의 장치입니다. 회선 이름과 그 아래 포트, 보 레이트, 형식을 읽기 전용으로 보여 줍니다. | 추가한 회선 |
새 TCP 장치는 "호스트를 아직 입력하지 않음"으로 표시되고, 호스트와 포트가 모두 있을 때까지 연결하지 않습니다. 호스트는 있고 포트가 없는 장치와, 로컬 포트가 없는 UDP 장치는 저장할 수 없습니다. "포트를 넣으십시오. TCP에서는 장치의 포트, UDP에서는 받을 로컬 포트입니다." 회선 위의 장치에는 호스트, 포트, 폴더, 유닛 ID가 없습니다.
머리글에 나오는 Base URI는 실행 시 주소입니다. generic://tcp/<host>:<port>, generic://udp/<local port>(받을 송신처가 채워져 있으면 from=<sender>가 붙음), 또는 generic://serial/<line id>/<port>/<baud>/<format> 뒤에 메시지가 끝나고 검사되는 방식(end, start, terminator, length, gap, timeout, checksum 등)이 이어집니다. 그 안에 든 것은 바이트 자체이며, 장치의 입력 표기가 아닙니다. 회선 위 장치의 복제는 그 회선에 남고, 네트워크 장치의 복제는 드라이버 바로 아래에 놓입니다.
메시지 카드
연결 카드 아래의 메시지 카드는 바이트를 입력하는 방식과 메시지가 끝나는 방식을 정합니다.
| 칸 | 의미 | 기본값 |
|---|---|---|
| 입력 표기 | 시작 표지, 종료 문자, 그리고 각 태그의 요청, 필터, 구분 문자, 쓰기 메시지, 기대하는 회신을 쓰는 방식입니다. 이스케이프가 있는 텍스트: 인쇄할 수 있는 문자는 그대로, 다른 바이트는 \r, \n, \t, \\, \xNN으로 씁니다. 16진수 바이트: 바이트마다 두 자리로, 예를 들면 02 30 31 0D입니다. 바꾸면 장치와 그 태그의 바이트 칸을 모두 다시 써서 저마다 같은 바이트를 계속 보내게 합니다. 그 가운데 하나라도 올바른 바이트가 아니면 바꾸기가 거부됩니다. "표기를 바꾸지 않았습니다. 이 장치나 그 태그의 바이트 칸 중 지금 표기로 올바르지 않은 것이 있습니다. 먼저 고치십시오." |
이스케이프가 있는 텍스트 |
| 메시지 끝 판단 | 종료 문자, 고정 길이, 무신호 간격 가운데 하나입니다. UDP에서는 여기서 무엇을 고르든 데이터그램 하나가 메시지 하나입니다. | 종료 문자 |
| 종료 문자 | 종료 문자일 때: 모든 메시지를 닫는 바이트입니다. 태그가 읽는 것에는 들어가지 않습니다. | \r\n |
| 메시지 길이 (바이트) | 고정 길이일 때, 1에서 1024까지: "모든 메시지가 이 바이트 수입니다. 시작 표지와 체크섬을 포함합니다." | |
| 무신호 간격 (ms) | 무신호 간격일 때, 5에서 10000까지: "이 시간 동안 아무것도 오지 않으면 메시지가 끝난 것으로 봅니다." | 50 |
| 시작 표지 | 선택 사항입니다. 모든 메시지가 시작하는 바이트로, 예를 들면 \x02입니다. 그 앞의 바이트는 버리므로, 메시지 중간부터 받기 시작한 흐름도 다시 맞춰집니다. 표지는 메시지의 첫 문자로 셉니다. |
비어 있음 |
| 응답 제한 시간 (ms) | 50에서 60000까지: "요청이 응답을, 쓰기가 기대하는 회신을 기다리는 시간입니다." | 1000 |
| 메시지 없이 지날 수 있는 최대 시간 (s) | 0에서 86400까지이며 0은 기한 없음입니다. "이 시간 동안 아무것도 오지 않으면 수신 대기 태그를 읽은 값으로 치지 않습니다. 0은 기한 없음으로, 바코드 리더처럼 가끔만 보내는 장치에 씁니다. 저울처럼 계속 보내는 장치에는 값을 넣으십시오." | 0 |
고른 끝 판단이 쓰지 않는 칸은 표시되지 않고, 그 방식으로 돌아올 때를 위해 값을 간직합니다. 장치가 다룰 수 없는 값은 저장되지 않고, 작업 기록 줄이 이유를 알립니다. 예를 들면 "메시지가 끝나는 종료 문자를 넣으십시오. 예: \r\n" 또는 "메시지 길이는 1에서 1024바이트 사이여야 합니다."입니다.
체크섬 카드
| 칸 | 의미 | 기본값 |
|---|---|---|
| 계산 방식 | 모든 메시지에 붙는 체크섬입니다. 없음, 합계 (8비트), 합계의 2의 보수 (LRC), 7비트 합계의 2의 보수 (Toledo), XOR (8비트), CRC-16/MODBUS, CRC-16/CCITT 가운데 하나입니다. "체크섬이 맞지 않는 메시지는 버리고 진단 로그에서 세며, 값으로 읽지 않습니다." | 없음 |
| 쓰는 방식 | 16진수 텍스트는 체크섬을 16진수 숫자로 쓴 것, 원시 바이트는 체크섬의 바이트 그대로입니다. | 16진수 텍스트 |
| 위치 | 끝 바로 앞: 종료 문자 앞의 마지막 바이트, 또는 메시지의 마지막 바이트입니다. 종료 문자 뒤: 종료 문자 바로 뒤이며, 이때는 종료 문자도 체크섬에 들어갑니다. 메시지가 종료 문자로 끝날 때만 고를 수 있습니다. | 끝 바로 앞 |
| 앞에서 빼는 바이트 수 | 0에서 255까지: "메시지 앞부분에서 체크섬이 덮지 않는 바이트입니다. 예를 들어 STX나 $입니다." | 0 |
| 바로 앞에서 빼는 바이트 수 | 0에서 255까지: "체크섬 바로 앞에 있으면서 체크섬이 덮지 않는 바이트입니다. 예를 들어 NMEA 문장의 *입니다. 태그도 이것을 읽지 않습니다." | 0 |
계산 방식 말고 다른 칸은 체크섬을 골랐을 때만 표시됩니다. 체크섬은 빼는 바이트를 제외하고 메시지의 첫 바이트부터 체크섬 바로 앞 바이트까지를 덮습니다. 체크섬이 맞지 않는 메시지는 값으로 읽히지 않고 버려지며, 진단 로그에는 장치 아래에 많아야 1분에 한 번 기록됩니다. 체크섬은 검사만 합니다. 요청과 쓰기는 입력한 그대로 보내므로, 체크섬이 필요한 요청은 자기 바이트 안에 그것을 담습니다.
| 계산 방식 | 흔한 용도 |
|---|---|
| 합계 (8비트) | 지시계. |
| 합계의 2의 보수 (LRC) | 지시계, Modbus ASCII 방식의 프레임. |
| 7비트 합계의 2의 보수 (Toledo) | Toledo 지시계의 연속 출력으로, CR 뒤의 원시 바이트입니다. |
| XOR (8비트) | NMEA 0183 문장($…*hh), 지시계, RFID 리더. |
| CRC-16/MODBUS | 바이너리 프레임입니다. 원시 바이트에서는 하위 바이트가 먼저입니다. |
| CRC-16/CCITT | 바이너리 프레임(CCITT-FALSE 변형)입니다. 원시 바이트에서는 상위 바이트가 먼저입니다. |
태그 주소 지정
이 드라이버의 태그에는 입력할 주소가 없습니다. 신호원 카드가 아래 칸으로 값을 얻는 방법을 묻습니다. 바이트는 장치의 표기로 입력합니다.
| 칸 | 의미 | 기본값 |
|---|---|---|
| 읽기 방식 | 요청과 응답: "스테이션이 태그의 읽기 주기마다 요청을 보내고 응답에서 값을 읽습니다." 수신 대기: "장치가 스스로 보내고, 태그는 필터가 받아들인 마지막 메시지를 간직합니다." UDP 장치에서는 수신 대기만 있습니다. "이 장치는 UDP로 받기만 하고 아무것도 보내지 않습니다. 태그는 수신 대기만 하며 읽기 전용입니다." | 요청과 응답 |
| 요청 | 요청과 응답일 때만: "태그의 읽기 주기마다 스테이션이 보내는 것으로, 장치의 표기로 입력합니다. 응답 제한 시간 안에 필터가 받아들인 첫 메시지가 응답입니다." | 필수 |
| 메시지 필터 | 태그의 것이 되는 메시지입니다. 모든 메시지, 시작 문자열(시작하는 바이트를 지정), 정규식과 일치(정규식으로 지정) 가운데 하나입니다. 요청에서는 "요청에 대한 응답이 되는 메시지입니다. 나머지는 수신 대기 태그로 넘어갑니다." | 모든 메시지 |
| 값을 꺼내는 방식 | 메시지에서 값을 잘라 내는 방법입니다. 메시지 전체, 고정 위치(첫 문자와 길이), 구분 문자 사이의 필드(구분 문자와 필드 번호), 패턴의 캡처 그룹(패턴) 가운데 하나입니다. "위치와 필드는 1부터 셉니다. 패턴에는 값이 되는 캡처 그룹이 정확히 하나 있어야 합니다. 숫자는 소수점을 마침표로 읽습니다." | 메시지 전체 |
| 장치가 소수점으로 쉼표를 씀 | Float와 Double 태그에만 있습니다. 읽을 때와 쓸 때 모두 쉼표를 소수점으로 다룹니다. | 꺼짐 |
| 쓰기 메시지 | 쓰는 태그에 있고, UDP에서는 없습니다. "쓰기 때 보내는 것으로, 값이 들어갈 자리에 를 둡니다. 예: SP \r. 서식을 붙이려면 처럼 씁니다. Boolean 태그에서는 가 없는 쓰기 메시지가 명령이 되어, true를 쓸 때 보내집니다." | 비어 있음 |
| 기대하는 회신 | "선택 사항입니다. 쓰기에 대한 장치 회신의 시작 문자열입니다. 응답 제한 시간 안에 그 회신이 와야만 쓰기가 성공합니다." | 비어 있음 |
문자는 시작 표지를 포함해 메시지의 처음부터 셉니다. 종료 문자, 체크섬, 체크섬이 바로 앞에서 빼는 바이트는 태그가 읽는 것에 들어가지 않습니다. 패턴은 .NET 정규식이며, 읽는 데 250 ms를 넘는 메시지는 읽지 않습니다. 쓰기 전용 태그에는 요청, 필터, 값 칸이 없고, 쓰기 메시지가 없는 태그는 읽기 전용입니다.
데이터 형식은 Boolean, Int32, Int64, Float, Double, String입니다. 잘라 낸 텍스트는 모든 드라이버와 마찬가지로 태그 자신의 단계가 변환하기 전에 태그의 형식으로 읽힙니다(값 변환 경로 참고). Boolean은 1, true, on, yes와 0, false, off, no를 읽고, 정수는 정수를 읽으며(12.0은 12로 읽고 12.5는 거부합니다), Float와 Double은 소수를 읽고, String은 문자를 그대로 받습니다. 지시계는 숫자를 공백으로 채우므로, 숫자 앞뒤의 공백과 부호와 숫자 사이의 공백은 무시합니다. 칸이 성립하지 않는 태그는 저장되지 않고, 태그 페이지가 빠진 것을 알려 줍니다. 예를 들면 "이 태그가 보낼 요청을 넣으십시오." 또는 "패턴에는 값을 감싸는 캡처 그룹이 정확히 하나 있어야 합니다."입니다.
읽기 전용 와이어 주소 미리 보기는 ask나 listen 뒤에 해당하는 것을 이어 보여 줍니다. 예를 들면 listen?extract=position&start=5&length=6이고, 01RD와 CR을 보내고 응답의 쉼표로 나뉜 세 번째 필드를 읽는 태그라면 ask?send=01RD%0D&extract=field&separator=,&field=3입니다.
읽기
| 상황 | 요청과 응답 태그 | 수신 대기 태그 |
|---|---|---|
| 값 | 요청 뒤 응답 제한 시간 안에 필터가 받아들인, 검사를 통과한 첫 메시지에서 가져옵니다. | 필터가 받아들인, 검사를 통과한 마지막 메시지에서 가져오고, 도착 시각을 붙입니다. |
| 읽는 때 | 태그의 읽기 주기마다. | 장비가 보낼 때마다입니다. 태그는 읽기 주기마다 마지막 메시지를 보여 줍니다. |
| 첫 메시지 전 | 해당 없음. | 태그는 기다립니다. 어느 태그든 첫 응답 전과 마찬가지로 값도 오류도 없습니다. |
| 응답 없음, 또는 조용한 장비 | 응답 제한 시간 안에 응답이 없으면 읽기 실패이며, 응답하지 않은 장치에 대한 태그의 정책이 표시를 정합니다. | 장치의 메시지 없이 지날 수 있는 최대 시간 (s)이 지나면 모든 수신 대기 태그가 읽기에 실패하고, 각 정책이 표시를 정합니다. TCP 연결이 끊어지면 그 시간과 상관없이 실패합니다. |
| 태그가 읽을 수 없는 메시지 | 이유가 붙은 읽기 실패입니다. 빠진 칸, 메시지 끝을 넘는 값, 형식에 담을 수 없는 텍스트 같은 이유입니다. | 같습니다. |
어느 요청의 응답도 아닌 메시지는 같은 장치의 수신 대기 태그로 넘어가므로, 장치 하나가 두 종류의 태그를 모두 가질 수 있습니다. 필터가 같은 수신 대기 태그는 받은 것을 함께 쓰고, 같은 메시지에서 서로 다른 필드를 꺼낼 수 있습니다.
쓰기
쓰기는 다른 어느 드라이버와도 같은 경로를 지납니다. 쓰기 칸은 공학 값을 받고, 변환 단계를 거꾸로 거친 뒤 원시 값을 보냅니다(Connector 참고).
| 쓰기 메시지 | 보내는 것 | 쓰기가 알리는 결과 |
|---|---|---|
{value} 있음 |
입력한 바이트이며, {value} 자리에 값이 들어갑니다. 숫자는 고정 문화권으로(태그가 그렇게 정하면 소수점은 쉼표), 또는 {value:FORMAT}의 .NET 숫자 서식으로 씁니다(W{value:000.0}\r은 12.5를 W012.5와 CR로 보냅니다). Boolean은 1이나 0, 텍스트는 그대로입니다. |
보내면 완료입니다. 기대하는 회신이 있으면, 그것으로 시작하는 회신이 응답 제한 시간 안에 왔을 때만 완료입니다. 다른 회신이 오면 그 회신을 이유로 쓰기가 거부되고, 아무것도 오지 않으면 응답 없음입니다. |
{value} 없음, Boolean 태그 |
용기 무게 빼기나 인쇄 같은 명령입니다. true를 쓰면 보내고, false 쓰기는 거부합니다. | 같습니다. |
| 없음 | 아무것도 보내지 않습니다. 태그는 읽기 전용입니다. |
쓰기는 모든 드라이버와 마찬가지로 장치의 대기열에서 차례를 기다립니다. 회선에서는 회선의 한 번에 하나씩 보내는 요청을 나누어 쓰고, TCP에서는 장치 자신의 연결을 씁니다. UDP 장치는 아무것도 보내지 않으므로 그 태그에는 쓸 수 없습니다.
예: RS-232의 계량 지시계
Toledo의 연속 출력 방식으로 보내는 지시계는 1초에 여러 번 STX, 상태 바이트 3개, 무게 숫자 6자리, 용기 무게 숫자 6자리, CR, 체크섬 바이트를 보냅니다. 스테이션에서는 다음과 같이 합니다.
- 드라이버 페이지에서 회선 추가를 누르고 이름을
Scale line으로 하고COM3을 고른 뒤, 보 레이트는 9600 그대로 두고 시리얼 형식으로7E1을 고른 다음 회선을 사용으로 바꿉니다. - 회선에서 장치 추가를 누르고 이름을
Scale로 합니다. 메시지 카드에서는 이스케이프가 있는 텍스트와 종료 문자를 그대로 두고, 종료 문자를\r, 시작 표지를\x02, 메시지 없이 지날 수 있는 최대 시간 (s)을 10으로 합니다. 케이블이 빠지면 통신이 끊긴 것으로 보이게 하기 위해서입니다. - 체크섬 카드에서 7비트 합계의 2의 보수 (Toledo), 원시 바이트, 종료 문자 뒤를 고르고, 빼는 바이트 수는 둘 다 0으로 둡니다.
- 태그 추가를 누르고 이름을
Weight, Double, 읽기 전용으로 합니다. 신호원 카드에서 수신 대기, 모든 메시지, 고정 위치를 고르고 첫 문자를 5, 길이를 6으로 합니다. STX가 1번째 문자, 상태 바이트 3개가 2에서 4, 무게가 5에서 10입니다. - 숫자에는 소수점이 없으므로 태그의 스케일링 단계가 소수점을 놓습니다. 예를 들어 소수 두 자리로 설정한 지시계라면 계수 0.01입니다.
에이전트는 도구를 세 번 불러 같은 일을 합니다.
serial_line_upsert driver=GenericSerialTcp name="Scale line" serialPort=COM3 baudRate=9600 serialFormat=7E1
device_upsert driver=GenericSerialTcp name=Scale transport=SerialLine serialLineId=<id> messageEnd=Terminator terminator=\r startMarker=\x02 checksum=SumTwosComplement7Bit checksumFormat=Raw checksumPlacement=AfterEnd silenceTimeoutSeconds=10
tag_upsert device=Scale name=Weight opcUaType=Double tagMode=Listen valueExtraction=FixedPosition valueStart=5 valueLength=6
예: TCP의 바코드 리더
Ethernet 포트가 있는 바코드 리더는 코드를 읽을 때만, 한 줄에 코드 하나를 보냅니다.
- 드라이버 페이지에서 장치 추가를 누르고 이름을
Reader로 한 뒤 TCP 클라이언트를 그대로 두고, 호스트에 192.168.0.40, 포트에 2001을 넣습니다. - 메시지 카드에서는 이스케이프가 있는 텍스트, 종료 문자
\r\n, 메시지 없이 지날 수 있는 최대 시간 (s) 0을 그대로 둡니다. 한 시간 동안 아무것도 보내지 않는 리더는 고장이 아니기 때문입니다. 체크섬 카드는 없음으로 둡니다. - 태그 추가를 누르고 이름을
Code, String, 읽기 전용으로 합니다. 신호원 카드에서 수신 대기, 모든 메시지, 메시지 전체를 고릅니다.
에이전트의 도구로는 다음과 같습니다.
device_upsert driver=GenericSerialTcp name=Reader transport=TcpClient host=192.168.0.40 port=2001 messageEnd=Terminator terminator=\r\n
tag_upsert device=Reader name=Code opcUaType=String tagMode=Listen valueExtraction=WholeMessage
driver_capabilities는 이 드라이버를 genericSerialTcp 아래에서 이 두 예와 함께 설명하고, serial_line_upsert는 driver=GenericSerialTcp로 이 드라이버의 회선을 만듭니다. 다른 도구는 도구를 범위별로에 있습니다.
알아 둘 한계
- 아무것도 검색하지 않습니다. 이런 장비에 무엇인지, 무엇을 가졌는지 물어볼 프로토콜이 없기 때문입니다.
- 머리말에서 자기 길이를 알리는 바이너리 프레임은 읽지 않습니다. 메시지는 종료 문자, 고정 길이, 무신호 간격, 데이터그램 가운데 하나로 끝납니다.
- 체크섬은 검사만 하며, 스테이션이 보내는 것에 체크섬을 덧붙이지 않습니다.
- 태그는 메시지에서 값 하나를, 형식으로 읽는 텍스트로 꺼냅니다. 메시지 안에 바이너리 정수나 부동 소수점으로 묶인 숫자는 해독하지 않습니다.
- UDP 장치는 받기만 하며, 요청을 보내지 않고 쓰기도 받지 않습니다.
- 장치를 시리얼 회선과 네트워크 사이로, 또는 다른 회선으로 옮길 수 없습니다. 있어야 할 곳에 새로 만들고 예전 장치를 삭제하십시오.