범위 바이너리 옵션 타입

마지막 업데이트: 2022년 1월 24일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
Methods Blob 객체에서 사용할 수 있는 slice 메소드는 지정된 바이트 범위의 데이터를 포함하는 새로운 Blob 객체를 만드는데 사용된다. 10MB 이상 사이즈가 큰 Blob 객체를 작게 조각내어 사용할 때 유용하다. ​ const blob = new Blob(); blob.slice(start, end, type); ​ start : 시작 범위(Byte, Number) end : 종료 범위(Byte, Number) type : 범위 바이너리 옵션 타입 새로운 Blob 객체의 MIME 타입을 지정

둥이들일상 둥이들일상

단일 정밀도를 가진 부동 소수점을 나타낸다. 언제나 부호 있는 수이고, -3.402823466E+38부터 3.402823466E+38까지의 수를 표현할 수 있다.

※ mysql,에서의 float는 실수를 저장하는 데이타형입니다.

하지만 1.11이나 1.23은 잘들어가지는데 1.00이나 1.10 같은 마지막 0은 들어가지지 않습니다.

왜냐하면 자동으로 0은 절삭됩니다. 하지만 table생성시 float가 아닌 float(5,2)로 주면 소수점2자리까지만 입력이 되며 빈공간은 0으로 채워집니다.

앞에것은 잘 모르겠지만 뒤에꺼는 필수 소수점자리입니다. 빈공간은 0으로 자동으로 채워집니다.

2배 정밀도를 가진 부동 소수점 수이다. 언제나 부호있는 수이고, -1.79769313486231517E+308부터 1.7976931348623157E+308까지의

날짜를 표현하는 타입으로 '1000-01-01'부터 '9999-12-31'까지를 나타낼 수 있다. 3 바이트

날짜와 시간을 같이 나타내는 타입이다. '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지 나타낼 수 있다. 8 바이트

'1970-01-01 00:00:00'부터 2037년까지 나타낼 수 있다. 4 바이트

시간을 나타낸다. '-839:59:59'부터 '838:59:59'까지 나타낼 수 있다.

년도를 나타낸다. 1901년부터 2155년, 0000년을 나타낼 수 있다.

고정 길이를 갖는 문자열을 저장할 수 있다. M은 1부터255까지이다.M이 20이면 20개의

※ binary옵션을 붙일시 대소문자를 구분합니다.

CHAR는 고정길이인 반면 VARCHAR는 가변 길이이다. 예를 들어 VARCHAR(20)인 컬럼에

10자만 저장을 하면, 실제로도 10자 만큼을 기억장소를 차지한다. 하지만, CHAR는 나머지

10자를 범위 바이너리 옵션 타입 공백으로 매꾼다.최대 255자까지 저장가능

※ binary옵션을 붙일시 대소문자를 구분합니다.

255개의 문자를 저장할 수 있다.

65,535개의 문자를 선택하여 대입할수있다. value에서 지정하지 않은 값은 에러는 안나나 공백으로 들어가진다.

※ binary옵션을 붙일시 대소문자를 구분합니다.

65,535개의 문자를 저장할 수 있다.

※ binary 옵션을 기재하면 검색시 소문자를 구분합니다.

※ TEXT데이타형은 default 예약어 사용 못함

MEDIUMTEXT (텍스트 파일)

16,777,215개의 문자를 저장할수 있다.

4,294,967,295개의 문자를 저장할수 있다.

65535개의 문자를 저장할 수 있다. BLOB은 BINARY LARGE OBJECT의 약자이다.

일반문자열이 아닌 멀티미디어파일(이미지,영상등)을 넣을때 사용하는 컬럼입니다.

ex : 많이 사용하지 않는다.

(TEXT : blob의 차이) blob : binary large object

0.text나 blob는 둘다 default를 사용못한다.

1.TEXT는 대소문자 안가린다. BLOB는 대소문자 가린다.

2.제한크기보다 작은 크기를 입력해도 둘다 공백이 제거되지 않고 공백도 다같이 저장된다. varchar개념이 아닌 char개념이다.

범위 바이너리 옵션 타입

이 옵션을 바로 따르는 옵션들에 있는 텍스트를 FileMaker의 내부 문자 인코딩에서 지정된 인코딩으로 변환합니다. TextEncode 함수 함수의 encoding 매개 변수에 대해 정의된 이름 중 하나를 사용합니다.

모든 지원되는 옵션이 직접적인 접근을 허용하지 않거나 파일 시스템에서 파일 생성을 허용하지 않더라도 FileMaker 변수를 옵션이 필요한 데이터의 원본 또는 대상으로 지정할 수 있습니다. 파일을 생성하거나 접근하려면 컨테이너 필드에 변수를 설정할 수 있습니다.

• cURL 라이브러리에서 반환한 오류가 FileMaker 클라이언트에서 Get(마지막 오류) 함수 를 통해서 오류 코드 1631을 반환하도록 하여 지정되지 않은 연결이 실패하는 것을 나타내는 경우 Get(마지막 외부 오류 세부 정보) 함수 는 cURL 명령 행 도구가 반환하는 것과 동일한 텍스트를 반환합니다.

• 작업이 성공했지만 서버가 응답 코드 400 또는 그 이상을 데이터와 함께 반환하는 경우 FileMaker 클라이언트는 적절한 범위 바이너리 옵션 타입 오류 코드를 반환합니다. 적절한 FileMaker 오류 코드가 없는 경우 Get(마지막 오류) 함수는 1631을 반환하고 Get(마지막 외부 오류 세부 정보) 함수는 응답 코드를 "응답 코드: nnn"범위 바이너리 옵션 타입 의 형태로 반환합니다.

--show-error 옵션을 사용하지 않는 경우 서버 응답 코드 401은 Get(마지막 오류) 함수가 FileMaker 오류 코드 1627("인증에 실패했습니다")를 반환하도록 합니다. 모든 기타 응답 범위 바이너리 옵션 타입 코드는 FileMaker 오류 코드 0("오류 없음")을 반환합니다.

HTTPS POST 데이터를 myusername 및 mypassword 인증서를 사용하여 두 개의 키 값 쌍( fname=Bob 및 lname=Smith )으로 www.filemaker.com에 보내고, $$results 변수에 요청된 데이터를 저장합니다.

변수 설정 [ $post_data ; 테이블::post_data ]
URL에서 삽입 [SSL 인증서 확인; 대화상자 사용: 끔 ; $$results ;
"http://www.filemaker.com/kr" ;
"--user myusername:mypassword -d @$post_data" ]

• cURL 옵션 내에서 각 따옴표와 백슬래시가 앞에 나옵니다. 예를 들어 Content-type: application/json 에 대해 HTTP 헤더를 지정하려면 cURL 옵션 지정 에 대한 텍스트 표현식은 다음과 같습니다.

범위 바이너리 옵션 타입

Blob(Binary Large Object)

JavaScrpt에서 Blob(Binary Large Object)은 이미지, 사운드, 비디오와 같은 멀티미디어 데이터를 다룰 때 사용한다.

보통 데이터의 크기(Byte) 및 MIME 타입을 알아내거나, 데이터 송수신을 위한 작은 Blob 객체로 나누는 등의 작업에 사용한다.

Blob 생성

const newBlob = new Blob(array, options);

* array

Blob 생성자의 첫번째 인수로 ArrayBuffer, ArrayBufferView, Blob(file), DomString 객체 또는 이러한 객체가 혼합된 Array를 사용할 수 있습니다.

* options

옵션으로는 type 과 endings 를 설정할 수 있다.

type : 데이터의 MIME 타입을 설정하며, 기본값은 "" 입니다.

endings : \n 을 포함하는 문자열 처리를 "transparent" 와 "native" 로 지정할 수 있으며,

기본값은 "transparent" 입니다.

Methods

Blob 객체에서 사용할 수 있는 slice 메소드는 지정된 바이트 범위의 데이터를 포함하는 새로운 Blob 객체를 만드는데 사용된다.

10MB 이상 사이즈가 큰 Blob 객체를 작게 조각내어 사용할 때 유용하다.

const blob = new Blob();범위 바이너리 옵션 타입

blob.slice(start, end, type);

start : 시작 범위(Byte, Number)

end : 종료 범위(Byte, Number)

type : 새로운 Blob 객체의 MIME 타입을 지정

블루프린트 변수

Variable (변수)는 월드에 있는 Object 나 Actor 에 대한 값이나 주소(reference)를 담는 프로퍼티입니다. 이 프로퍼티는 내부적으로는 그를 담고있는 Blueprint 에서 접근 가능하며, 외부적으로 접근 가능하게 하여 레벨에 놓은 Blueprint 인스턴스 작업을 하는 디자이너가 그 값을 변경하도록 할 수도 있습니다.

Variable (변수)는 변수 이름이 들어간 둥근 박스로 표시됩니다:

Variable Nodes

마티네를 사용해서 특정 유형 변수값을 변경하는 법에 대한 정보는, 마티네로 블루프린트 프로퍼티 변경하기 문서를 참고하세요.

변수 유형

변수는 다양한 유형으로 생성 가능한데, Boolean (True / False), Integer (정수), Float (실수) 와 같은 데이터 형은 물론이고 Object, Actor, 특정 Class 와 같은 것을 담는 레퍼런스 형도 생성 가능합니다. 각 변수형을 배열 로도 만들 수 있으며, 각 유형은 색을 통해 쉽게 알아볼 수 있습니다:

Boolean

RedWire.png

빨강 변수는 부울 (True / False) 데이터를 나타냅니다.

Integer

CyanWire.png

청록 변수는 0, 152, -226 와 같은 정수 데이터, 또는 소수점이 없는 숫자를 나타냅니다.

Float

GreenWire.png

초록 변수는 0.0553, 101.2887, -78.322 와 같은 실수 데이터, 또는 소수점이 있는 숫자를 나타냅니다.

String

MagentaWire.png

자홍 변수는 Hello World 와 같은 문자열 데이터, 또는 알파벳과 숫자로 된 글자 그룹을 나타냅니다.

Text

PinkWire.png

분홍 변수는 표시되는 텍스트, 특히나 현지화가 가능한 텍스트를 나타냅니다.

Vector

GoldWire.png

금색 변수는 벡터 데이터, 또는 XYZ 나 RGB 처럼 세 개의 실수로 구성되는 요소나 축 정보를 나타냅니다.

Rotator

PurpleWire.png

보라 변수는 3D 공간에서의 회전을 수치로 정의하는 그룹인 로테이터 데이터를 나타냅니다.

Transform

OrangeWire.png

주황 변수는 트랜슬레이션 (3D 범위 바이너리 옵션 타입 위치), 로테이션, 스케일로 구성되는 트랜스폼 데이터를 나타냅니다.

Object

BlueWire.png

파랑 변수는 오브젝트, 즉 라이트, 액터, 스태틱 메시, 카메라, 사운드 큐 등을 나타냅니다.

내 블루프린트 탭의 변수

내 블루프린트 탭을 통해 커스텀 변수를 블루프린트 에 추가할 수도 있고, 컴포넌트 리스트 에 추가된 컴포넌트 인스턴스 변수라던가 그래프에서 값을 변수로 승격시켜 만든 변수를 포함해서 기존 변수를 나열할 수도 있습니다.

My BLueprint Pane

변수 만들기

블루프린트 안에 변수를 만드는 방법은 다음과 같습니다.

블루프린트를 생성 한 뒤 그래프 탭에서 엽니다.

내 블루프린트 창에서

myblueprint_variable.png

추가 버튼 을 클릭하여 새 변수를 생성합니다.

MyBlueprintPane_createVar.png

새 변수가 생성되어, 이름을 입력할 수 있습니다.

HT5.png

블루프린트에 이름을 입력한 다음, 디테일 패널로 넘어가 변수의 프로퍼티를 조절합니다.

디테일 패널에 보면 변수의 사용 및 접근법을 정의하는 데 범위 바이너리 옵션 타입 사용되는 여러가지 세팅이 있습니다.

HT6.png

변수의 Default Value (기본값) 설정을 위해서는 먼저 블루프린트를 컴파일 해야 합니다.

Variable Name

변수 이름 - 변수의 이름입니다.

Variable Type

변수 유형 - 드롭다운 메뉴를 통해 변수 유형 을 설정하고, 변수가 배열 인지를 알아냅니다.

Editable

편집가능 - 블루프린트 인스턴스에서 변수를 공개적으로 편집할 수 있는지 입니다.

Tooltip

툴팁 - 이 변수에 대한 추가 정보로, 변수 위에 커서가 있을 때 표시됩니다.

Expose on Spawn

스폰시 노출 - 블루프린트 스폰시 변수를 핀으로 노출시킬지 입니다.

Private

프라이빗 - 변수를 프라이빗 (파생 변수에서 변경할 수 없도록) 설정할지 입니다.

Expose to Matinee

마티네에 노출 - 변수를 마티네 에 노출시켜 변경하도록 할지 입니다.

Config Variable

환경설정 변수 - 컨픽 파일에서 변수 설정을 가능하도록 합니다.

Category

카테고리 - 변수를 주어진 라벨별로 카테고리를 분류시킬 수 있습니다. 변수는 라벨별로 정렬됩니다.

Replication

리플리케이션 - 이 변수의 네트워크를 통한 리플리케이트 여부입니다.

디테일 패널을 확장시키면 추가적인 serialization 옵션도 정의할 수 있습니다.

HT37.png

여기서는 변수를 serialize 시킬지, Transient (휘발성) 옵션으로 로드시 0 으로 채울지를 설정할 수 있습니다. SaveGame 옵션으로 변수를 게임 저장을 위해 serialize 시킬지를 설정할 수도 있습니다.

편집가능 변수

변수가 Editable, 편집가능으로 설정되면, 변수가 들어있는 블루프린트 외부에서 그 변수를 수정할 수 있게 됩니다.

HT21.png

변수에 편집가능 설정은 디테일 패널에서 편집가능 옵션을 체크하거나, 내 블루프린트 창 안의 변수 옆 감긴 눈 모양 아이콘을 클릭하면 됩니다. 눈 아이콘이 감겨 있으면, 변수는 현재 편집 가능한 상태가 아닙니다 (기본). 눈 아이콘이 열려 있으면, 변수가 퍼블릭 (또는 아래와 같이 편집가능) 설정되어 있는 것입니다.

변수가 편집가능 설정되면, 메인 에디터 창의 디테일 패널에서 변수의 값을 설정할 수 있습니다.

HT23.png

위에서, LightColor 변수가 편집가능 설정되어 이 값을 레벨 에디터의 디테일 패널에서 설정할 수 있습니다.

변수 툴팁

에디터에서 변수에 마우스 커서를 올렸을 때 나타나는 변수에 대한 Tooltip, 툴팁을 추가할 수도 있습니다.

HT25.png

변수의 디테일 패널에서 툴팁 을 추가하면 됩니다. 그 때 범위 바이너리 옵션 타입 변수가 퍼블릭 으로 설정된 경우, 눈 아이콘의 색이 노랑에서 초록으로 바뀌어 변수에 툴팁이 작성되었음을 나타냅니다.

HT24.png

스폰시 노출

Expose on Spawn, 스폰시 노출 옵션은 변수가 들어있는 블루프린트 스폰 시점에서 그 변수를 접근 가능하도록 할 것인지 설정할 수 있습니다.

HT26.png

위에서 LightColor 라는 변수가 있는데, 스폰시 노출 설정되어 있는 Linear Color 프로퍼티입니다. 이 변수는 포인트 라이트에 대한 블루프린트에 구현되어 있으며, Set Light Color 노드와 LightColor 변수를 사용하여 라이트의 색을 결정하고 있습니다.

아래 다른 블루프린트 내에서, 스크립트를 사용하여 포인트 라이트 블루프린트를 스폰하고 LightColor 변수가 스폰시 노출 설정되어 있기 때문에, Spawn Actor from Class 노드에 값 설정을 위한 옵션이 사용가능해져, 게임 월드에 라이트가 스폰되면 그 색을 설정할 수 있게 됩니다.

HT27.png

프라이빗 변수

변수에 범위 바이너리 옵션 타입 Private, 프라이빗 옵션이 체크되면, 외부 블루프린트에서 변수를 수정하는 것이 금지됩니다.

예를 들어 아래 프라이빗으로 설정되지 않은 변수가 있습니다:

HT42.png

다른 변수에서, 그 변수가 들어있는 블루프린트를 스폰한 다음, Return Value 를 통해 변수에 접근할 수 있습니다.

HT43.png

하지만 프라이빗으로 설정하고:

HT41.png

블루프린트를 다시 스폰한 뒤 그 변수 접근을 시도해 보면, 안됩니다.

HT44.png

마티네에 노출

변수가 마티네 에 범위 바이너리 옵션 타입 영향받을 수 있도록 하려면, Expose to Matinee, 마티네에 노출 옵션을 체크해야 합니다.

아래에서, 마티네를 만들어 블루프린트가 들어있는 트랙을 추가했습니다. 그런 다음 마티네를 통해 그 블루프린트의 Linear Color 변수를 변경하려면, LinearColor Property Track 을 추가합니다.

그러면 Linear Color 변수 선택을 위한 창이 뜨는데, 블루프린트에서 변경할 (LightColor) 프로퍼티를 선택합니다.

그 이후 트랙에 키를 추가하여 변수 값을 시간에 따라 변경할 수 있습니다.

마티네 작업 관련 상세 정보는 마티네 & 시네마틱 문서를 참고하세요.

변수로 승격

Promote to Variable, 변수로 승격 옵션을 사용해서도 변수를 만들 수 있습니다.

블루프린트 노드의 아무 입력 또는 출력 데이터 핀에 우클릭 한 다음 변수로 승격 옵션을 선택하면 됩니다.

HT38.png

New Light Color 핀에 우클릭 한 다음 변수로 승격 을 선택하는 것으로, 변수에 New Light Color 값을 할당할 수 있습니다.

HT40.png

다른 방법으로는, 입력 또는 출력 핀을 끌어놓은 다음 변수로 승격 옵션을 선택합니다.

HT39.png

블루프린트의 변수 접근하기

블루프린트의 변수 작업을 할 때, 보통 두 가지 방법 중 하나로 접근하게 됩니다. 변수 값을 구해오는 Get 노드 또는 변수 값을 설정하는 Set 노드입니다.

HT45.png

변수에 대한 Set (위에서 1) 또는 Get (위에서 2) 노드 생성은 그래프에 우클릭 한 다음 Set (변수 이름) 또는 Get (변수 이름) 을 선택하면 됩니다. 또다른 방법은, Ctrl 키를 누른 채 내 블루프린트 창에서 변수를 끌어 놓으면 Get 노드가 생성되고, Alt 키를 누른 채 끌어 놓으면 Set 노드가 생성됩니다.

변수 편집하기

변수 값의 설정은 블루프린트 노드 네트워크의 일부에서도 실행 전 기본값으로도 가능합니다. 변수 기본값을 설정하려면:

블루프린트 툴바에 있는 클래스 디폴트 버튼을 클릭하여 디테일 패널에 디폴트를 엽니다.

디테일 패널에서 변수 이름 오른쪽에 원하는 기본값을 입력합니다.

blueprint_details_variable_callout.png

위에서 Color 변수를 선택하여 기본 색을 설정할 수 있습니다.

디폴트 창에 변수가 보이지 않는 경우, 컴파일 버튼을 클릭하세요.

변수 이름변경

내 블루프린트 탭에서 변수 이름에 우클릭하면 뜨는 메뉴에서 이름변경 을 선택합니다.

rename_variable_menu.png

글상자에 새로운 변수 이름을 입력한 다음 Enter 키를 눌러 저장합니다.

rename_variable.png

변수 프로퍼티

디테일 패널에서 변수에 대한 모든 프로퍼티를 설정할 수 있습니다. 몇몇 변수는 여기 보이는 것보다 많은 프로퍼티가 있습니다. 이를테면 벡터의 경우 Expose to Matinee (마티네에 노출)이라던가, 정수와 실수와 같은 숫자값의 경우 Slider Range (슬라이더 범위) 라던가요.

변수 유형 - 드롭다운 메뉴에서 변수 유형을 설정한 다음 변수가 배열인지 아닌지를 결정합니다.

편집가능 - 클래스 디폴트블루프린트디테일 탭에서 변수 값을 편집할 수 있을지 없을지를 설정합니다.

툴팁 - 변수에 대한 툴팁을 설정합니다.

프라이빗 - 이 변수를 프라이빗으로 설정하여 파생된 블루프린트 에서 변경하지 못하도록 할것인지 설정합니다.

카테고리 - 기존 카테고리에서 선택하거나 새 카테고리 이름을 입력합니다. 카테고리를 범위 바이너리 옵션 타입 설정하면 클래스 디폴트, 내 블루프린트 탭, 블루프린트디테일 탭 어디에 변수가 나타나는지가 결정됩니다.

리플리케이션 - 변수값을 클라이언트에게 리플리케이트시킬지 말지를 선택합니다. 변수가 리플리케이트되면 콜백 함수와 같은 방법으로 알림이 있어야 할 것입니다.

변수 값 구하고 설정하기

변수의 편집은 블루프린트 네트워크에서 Get / Set 노드를 통한 방법으로도 가능합니다. 가장 쉬운 방법은 변수 탭에서 Event Graph 에 바로 변수를 끌어 놓는 것입니다. Get / Set 어느 노드를 만들 것인지 묻는 작은 창이 뜹니다.

톡상담

검색

본 자료는 개발하시는데 참고자료 용도로 사용하실 수 있으며 저작권 표시 없이 복사,게재, 출판 하실 수 없습니다. 외부 게재 사용 시 반드시 출처 항목에 회사명과 사이트 주소를 반드시 명시해 주시기 바랍니다.
[표기 예] 출처 : ㈜에이치앤에스(www.hnsts.co.kr) 또는 ㈜HNS(www.hnsts.co.kr)

2. 제품 개발 시 내용과 예제 코드는 수정 및 검증작업을 직접 하셔야 하며 문제 발생에 대한 책임은 ㈜HNS사와 무관합니다.

본사는 자료를 최신내용으로 유지하기 위해 노력하고 있으며 제공되는 정보의 오류 및 내용이 정확하지 않을 경우 사전 공지 없이 업데이트 될 수 있습니다. 자료의 문제점 발견 시 본사로 문의주시면 검토하여 자료를 수정하도록 하겠습니다.

본 문서는
1. 바이너리(Binary) 데이터 타입과 텍스트(Text) 데이터 타입의 차이
2. 데이터 전송을 위한 변환 과정
3. 485통신 모드버스 예제 소스 코드
4. Encoding과 Decoding 구현 예제(SmartSerialPort 사용)
순서로 진행합니다.

다양한 통신 환경에서 데이터 송신 시 데이터를 전송하기 전에 데이터의 인코딩(원데이터→바이트 배열)이 필요하며 데이터 수신 시 수신한 데이터를 원본 데이터로 되돌리는 처리인 디코딩(바이트 배열→원데이터)이 필요합니다. 데이터 인코딩/디코딩 방식에 따라 데이터 타입이 Binary 데이터 타입 또는 Text 데이터 타입으로 나뉩니다.

바이너리(Binary) 데이터 타입 텍스트(Text) 데이터 타입
Binary 데이터 타입은 데이터를 이진화하여 전송하며 Text 타입에 비해 훨씬 적은 공간을 차지하고, 인코딩/디코딩 속도가 빠릅니다. 하지만 이진 데이터이므로 가독성이 떨어지고 관리 및 디버깅이 어렵습니다. Text 데이터 타입은 데이터를 ASCII, Unicode 등의 Text로 처리하여 전송하는 방식으로 인간이 이해할 수 있는 언어를 사용하기 때문에 가독성이 높고 관리 및 디버깅이 쉽습니다. 하지만 Binary 타입에 비해 많은 공간을 요구하고 인코딩/디코딩 속도가 느립니다.

예를 들어 32비트 부동 소수점값 IEEE754 형식의 데이터 0x40490FDB를 전송하려면, Binary 데이터 타입의 경우 4바이트의 크기지만 Text 데이터 타입의 경우 3.1415927를 전송해야 하므로 ASCII의 경우 9바이트 크기가 됩니다.(Unicode의 경우 18Byte)

일반적으로 데이터를 전송하기 위해 Binary화하여 처리하게 됩니다. 아래는 Binary Data의 인코딩 및 디코딩 처리에 관한 설명입니다.

private void Form1_Load( object sender, EventArgs e)

StructureData sd1 = new StructureData ();
sd1.iA = 50;
sd1.fB = 77.77777f;
sd1.sC = "ABCDE" ;

// Unicode라서 *2해줌
sd1.byLength = ( byte )( sd1.sC.Length * 2);

// 전송 데이터(구조체 타입)
// "ABCDE"가 Unicode라서 10 더해줌
byte [] byteRAW = new byte [4 + 4 + 1 + 10];

// 디코딩(BYTE[] → 원데이터 변환)
// Buffer.BlockCopy는 특정 오프셋에서 시작하는 소스 배열에서 특정 오프셋에서 시작하는 대상 배열로 지정된 바이트 수를 복사
System.Buffer.BlockCopy( BitConverter .GetBytes(te.iA), 0, byteRAW, 0, sizeof( int ));
System.Buffer.BlockCopy( BitConverter .GetBytes(te.fB), 0, byteRAW, sizeof ( int ), sizeof ( float ));

// C나 C++의 경우 문자열의 끝을 NULL문자를 확인하여 구분하지만 C#의 경우 문자열의 앞부분에 문자열의 길이를 명시해야 함

// Unicode라서 *2해줌
System.Buffer.BlockCopy( Encoding .Unicode.GetBytes(sd1.sC),
0, byteRAW, sizeof ( int ) + sizeof ( float ) + sizeof ( byte ),
(sd1.sC.Length * 2));

// 인코딩(원데이터 → 바이트 배열 변환). 리턴 타입이 TEST
static StructureData ByteToStructure ( byte [] data)

StructureData BinaryReader1 = new StructureData ();
// 기본 데이터 형식을 특정 인코딩의 이진값으로 읽음
using (BinaryReader reader = new BinaryReader
( new MemoryStream(data, false ), Encoding .Unicode))

BinaryReader1.iA = reader.ReadInt32();
// 현재 스트림에서 부호있는 4바이트 정수를 읽기
BinaryReader1.fB = reader.ReadSingle();
// 현재 스트림에서 4바이트 부동 소수점값을 읽기
BinaryReader1.sC = reader.ReadString();

※ 일반 데이터(수치, 문자)와 구조체 데이터는 코딩은 달라도 바이너리 데이터는 동일합니다.

private void ReadData()
<

// 아래에서 입력이 정상적으로 완료됐는지 확인하기 위해 선언과 동시에 Error 코드를 저장
SmartX. SmartModbus.EXCEPTIONCODE retStatus = SmartX. SmartModbus.EXCEPTIONCODE .
SLAVEADDRESS_ERROR;

// 값을 읽어서 저장할 바이트 배열
byte [] ReadData = new byte [4];
// IEEE754로 변환하여 저장할 변수
float retData1= new float ();

// SlaveAddress : 01, FunctionCode : 03, StartAddress : 00 2A, DataLength : 00 02
retStatus = smartModbus1.ReadHoldingRegister(100, 2, ref ReadData);

// 정상 수신 할때만 변환 실행
if (retStatus == SmartX. SmartModbus.EXCEPTIONCODE .SUCCESS)

[STEP-1] IEC-Series내의 사용할 포트의 TX와 RX를 결선합니다.
[STEP-2] PortNo(포트 넘버)와 BaudRate(통신 속도), ReadTimeOut과 BufferSize를 지정합니다.
[STEP-3] Open 버튼을 클릭하여 통신 포트를 오픈합니다.
[STEP-4] 전송 데이터를 일반 데이터의 조합 또는 구조체 데이터로 보낼지를 지정합니다.
[STEP-5] 송신 데이터의 수정을 위해 각 Value값을 클릭하면 SmartKeyboard가 Open되고 데이터를 수정 범위 바이너리 옵션 타입 후 X버튼을 클릭합니다.
[STEP-6] Send 버튼을 클릭하여 STEP-5에서 입력한 데이터가 수신 측(하단 SmartListBox)에 정상 표시되는지 확인합니다.
※ 연속으로 10개의 데이터를 전송하려는 경우 Send(Auto)버튼을 클릭합니다.


0 개 댓글

답장을 남겨주세요