KR20010036574A - 컴퓨터를 이용한 데이터 통신의 에러방지방법 - Google Patents

컴퓨터를 이용한 데이터 통신의 에러방지방법 Download PDF

Info

Publication number
KR20010036574A
KR20010036574A KR1019990043645A KR19990043645A KR20010036574A KR 20010036574 A KR20010036574 A KR 20010036574A KR 1019990043645 A KR1019990043645 A KR 1019990043645A KR 19990043645 A KR19990043645 A KR 19990043645A KR 20010036574 A KR20010036574 A KR 20010036574A
Authority
KR
South Korea
Prior art keywords
data
byte
string
code
communication
Prior art date
Application number
KR1019990043645A
Other languages
English (en)
Other versions
KR100313963B1 (ko
Inventor
홍권환
Original Assignee
이종수
엘지산전 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 이종수, 엘지산전 주식회사 filed Critical 이종수
Priority to KR1019990043645A priority Critical patent/KR100313963B1/ko
Publication of KR20010036574A publication Critical patent/KR20010036574A/ko
Application granted granted Critical
Publication of KR100313963B1 publication Critical patent/KR100313963B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/004Error avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • G06F13/4286Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using a handshaking protocol, e.g. RS232C link
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0002Serial port, e.g. RS232C

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer And Data Communications (AREA)

Abstract

컴퓨터를 이용하여 외부의 기기와 데이터를 송수신할 때에 데이터의 에러를 방지하는 방법에 관한 것으로, 아스키 코드번호 129 번 이상의 코드 데이터가 송수신될 때의 에러를 방지하여 256 가지 아스키 코드를 모두 사용하고, 2 바이트 문자권의 윈도우에서 실행되는 데이터 통신 소프트웨어를 용이하게 개발하는 데에 그 목적이 있으며, 외부장치로부터 직렬포트를 통해 수신된 데이터를 임시기억장소에 저장하는 단계와, 임시기억장소에 저장된 데이터를 1 바이트 분량씩 추출하여 아스키의 16진 코드(HEX code)로 변환하는 단계와, 16진 코드의 문자열 개수를 산출하는 단계와, 문자열 개수가 1 개이면 데이터를 ″0″으로 이루어진 첫번째 바이트와 문자열로 이루어진 두번째 바이트로 구성된 2 바이트 문자로 처리하는 단계와, 문자열 개수가 2 개이면 데이터를 문자열의 첫번째 숫자로 이루어진 첫번째 바이트와 문자열의 두번째 숫자로 이루어진 두번째 바이트로 구성된 2 바이트 문자로 처리하는 단계, 그리고 문자열 개수가 4 개이면 데이터를 두 개의 2 바이트 문자가 입력된 것으로 판단하여 처리하는 단계를 포함하여 구성되어 한글윈도우 시스템에서 RC-232C 직렬포트에 의해 송수신된 파일과 데이터의 에러를 방지할 수 있다.

Description

컴퓨터를 이용한 데이터 통신의 에러방지방법{Method for preventing error of data communication using Computer}
본 발명은 마이크로 소프트 윈도우, 특히 한글윈도우와 같이 2 바이트 문자권 언어를 사용하는 윈도우 환경 하에서 개인용컴퓨터를 이용하는 설비 및 기기와의 RS-232C 직렬 데이터 통신의 에러방지방법에 관한 것이다.
일반적으로 SCADA 시스템이나, 원격검침, 그리고 모니터링 시스템과 같은 사용자의 요구사항에 따른 특수한 제어시스템은 항상 주제어장치인 컴퓨터, 특히 개인용컴퓨터(PC : Persnal Computer)나, 워크스테이션(Work station) 등과 데이터 통신을 하면서 데이터를 송수신한다. 그리고, 동시에 그러한 통신을 통하여 제어명령을 수신받고 응답신호를 송신한다. 이들 제어시스템은 오류가 발생했을 때에 해당 현장의 생산 및 관리 측면에 치명적일 수 있는 대단위 주거단지나 대규모 발전소, 공장 등에 설치되어 사용되고 있으므로, 통신 데이터에 대한 신뢰성이 절대적으로 확보되어야 한다.
그리고, 개인용컴퓨터의 급속한 발전으로 인하여 개인용컴퓨터를 이용한 프로그래밍 환경도 크게 변화하고 있다. 그에 따라 도스(DOS) 환경에서 프로그램을 제작하던 방식은 점차 사장되고 있으며, 거의 모든 개인용컴퓨터 환경이 마이크로소프트 사(社)가 개발한 그래픽 유저 인터페이스(GUI : Graphic User Interface)방식의 마이크로 소프트 윈도우(MicroSoft Windows : 이하 윈도우로 약칭함) 시스템 내에서 이루어지고 있다. 특히, 대부분의 프로그램 개발자들은 마이크로 소프트 사가 개발한 비주얼 씨 플러스 플러스(Visual C++)나 비주얼 베이직(Visual Basic)과 같은 윈도우 환경에서 동작하는 소프트웨어 개발 툴(Tool)을 이용하여 시스템 프로그램을 개발하고 있고, 그에 따라 사용자들도 점차 윈도우 환경 하에서 실행되는 프로그램을 선호하고 있는 것이다. 결국, 소프트웨어 개발자들은 이러한 소프트웨어 환경의 흐름에 의해 대부분의 데이터 통신 소프트웨어를 윈도우 환경에서 실행되는 것으로 개발하고 있다.
컴퓨터를 이용하는 제어시스템은 일반적으로 전용선 혹은, 대부분의 개인용 컴퓨터에서 기본적으로 제공하고 있는 RS-232C 포트를 이용한 직렬(serial) 통신, 그리고 프린터 포트를 이용하는 병렬(parallel) 통신을 이용한다. 그런데, 이러한 통신들은 모두 8 비트 아스키 코드(ASCII code) 방식의 데이터를 송수신한다.
종래에는 아스키 코드 중에, 코드번호 48 내지 57 과 코드번호 65 내지 70 을 헥사 코드(HEX code)로 변환하여 전송했었다. 즉, 종래에는 숫자 0∼9 와 문자 A∼F를 이용한 16진수를 이용하여 전송할 데이터를 표현했었다.
그러나, 데이터가 복잡해지고 그 분량이 증가하면서 헥사 코드만으로는 데이터를 표현하기에 부족하여 현재에는 점차 256 가지의 모든 코드를 이용하고 있는 추세이다. 그 결과, 통신환경의 전송속도를 향상시킬 수 있게 되었고, 16진 코드에 비하여 더 많은 데이터 또는, 신호를 아스키 코드만으로 표현하고 판별할 수 있게 되었다.
컴퓨터와 제어시스템은 데이터 송수신 시, 소정의 확인신호를 교환한다. 그런데, 이 때 가장 중요한 것은 송수신 때 사용하는 프로토콜에 기설정된 데이터의 길이이다.
즉, 컴퓨터와 제어시스템은 프로토콜에 설정된 데이터의 길이에 의거하여 필요한 데이터를 추출 및 변환하고, 그 데이터를 필요로 하는 처리 루틴에 적용을 한다. 만약 전송되는 데이터의 길이가 비정상적으로 변화되면 예기치 못한 데이터 값으로 변환되어 시스템의 오류가 발생될 우려가 있다.
특히, 비영어권 국가에서 사용하는 윈도우, 특히 아시아 권의 2바이트(byte) 문자를 사용하는 윈도우는 영문 윈도우(English Windows)와 달리 아스키 코드(ASCII code)를 처리하고 있다. 특히, 한글윈도우와 일어윈도우 등, 아시아권의 윈도우는 키보드 자판에 정의된 문자 및, 제어용 특수문자를 제외한 코드번호 129번 이상의 아스키 코드를 2바이트 문자로 전용하여 사용한다. 즉, 코드번호 129 이상의 아스키 코드는 1 바이트 문자로서 가졌던 의미는 없어지고 반드시 다른 아스키 코드와 합쳐진 2 바이트 문자가 되어야 의미를 가지게 된 것이다.
다시 말해, 로마자를 사용하는 영어권 윈도우는 모든 문자를 1 바이트(byte), 즉 8 비트(bit)로 표현하지만, 아시아권 윈도우는 아스키 코드번호 128 번 이하의 문자는 8 비트로 표현하고, 그 외의 문자 특히, 각 국가별 고유문자(한국의 경우 한글)는 2 바이트(byte), 즉 16 비트(bit)로 표현한다는 것이다. 그로 인하여 송수신된 2 바이트 문자의 데이터는 1 바이트 문자 데이터보다 더 변형될 가능성이 높다.
일반적으로 RS-232C 및 기타 통신 포트에는 수신 버퍼(buffer)가 있다. 이러한 수신버퍼는 외부 시스템에서 전송된 데이터를 임시로 저장했다가 응용 소프트웨어의 필요에 따라 컴퓨터 혹은, 외부 다른 시스템으로 그 데이터를 출력한다. 이러한 데이터들은 응용 소프트웨어의 변수처리 루틴에 의해 문자열 변수, 혹은 기타 형식의 변수로 저장되고, 제어시스템에서 필요한 분량만큼 버퍼로부터 추출된다. 그리고, 추출된 데이터들은 제어시스템에서 사용되는 프로토콜에 적합한 코드로 변환된다. 이 때, 변환된 데이터를 컴파일하여 실행하는 과정 중에 원인을 알 수 없는 데이터 오류가 종종 발생하는 경우가 있다. 그 이유는 프로토콜에 적합한 코드로 변환될 때에 데이터의 길이가 줄어들기 때문이다. 그 결과, 수신된 데이터의 비트값이 쉬프트(shift)되므로, 변환된 데이터는 변환되기 전의 데이터와 전혀 다른 비트값을 가지게 되기 때문이다.
비주얼 베이직으로 코딩된 데이터 송신 프로그램의 일례는 다음과 같다.
Private Sub cmdCommOn_Click()
Dim ii As integer
Dim Temp_String As String
If MSComm1.PortOpen = False Then
MSComm1.CommPort = 1
MSComm1.Settings = ″9600,N,8,1″
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End If
Comm_Finished = False
Do
DoEvents
txtReceive.Text = MSComm1.InBufferCount
If MSComm1.InBufferCount 〉= txtToReceive.Text Then
Comm_Finished = True
End If
Loop Until Comm_Finished = True
Temp_String = MSComm1.Input
End Sub
상술한 프로그램은 Temp_String 이라는 문자열 변수에 수신 데이터를 저장할 수 있다.
그런데, 상술한 일반적인 데이터 수신방법에 의해서는 2 바이트 문자권의 윈도우가 데이터를 처리할 때에 문제가 발생할 수 있다. 특히, 직렬포트를 통해 홀수개의 데이터를 요구할 경우, 마지막 1 바이트의 데이터가 코드번호 129 번 이상의 아스키 코드이면, 윈도우의 특성 상 2 바이트 문자로 인식을 하게 된다.
따라서, 마지막 1 바이트 문자는 널(Null)문자로 처리되거나, 아니면 수신 버퍼에 대기중인 첫번째 1 바이트 문자를 현재 처리 중인 마지막 1 바이트와 합쳐 처리될 수도 있다. 그 결과, 데이터의 내용이 송신측과 달라지는 문제점이 발생한다. 이것을 방지하려면 256 가지의 아스키 코드를 사용하지 않고 128 가지의 아스키 코드를 사용하면 되지만, 그러한 방법은 통신효율을 저하시키는 문제점을 초래한다.
뿐만 아니라, 데이터를 수신 포트로부터 추출하는 과정에서 마지막 1 바이트가 널(Null)문자로 판명될 경우, 프로그램은 문자열 데이터를 모두 수신받은 것으로 판단하여 특별한 명령이 수행되지 않는 한, 그 다음에 수신된 모든 데이터를 무시하게 된다. 따라서, 데이터의 구조가 송신측에 비해 완전히 다르게 변환된다. 즉, 수신버퍼에 100 바이트가 수신되었다고 하더라도 50 번째 바이트의 데이터가 코드번호 129 이상의 아스키 코드라면, 이 50 번째 바이트의 데이터를 널(Null)문자로 판명하고 이 후 51 번째 바이트 데이터 내지 100 번째 바이트 데이터를 모두 무시한 값만이 버퍼에 저장되는 문제점이 발생한다.
본 발명은 이러한 문제점을 해결하기 위한 것으로, 아스키 코드번호 129 번 이상의 코드 데이터가 송수신될 때의 에러를 방지하여 256 가지 아스키 코드를 모두 사용할 수 있고, 통신 데이터의 신뢰성을 향상시킴으로써, 2 바이트 문자권의 윈도우에서 실행되는 데이터 통신 소프트웨어를 용이하게 개발하는 데에 그 목적이 있다.
도 1은 본 발명의 에러방지방법을 도시한 흐름도
본 발명은 통신포트를 통해 입력되는 데이터를 임시버퍼에 저장하고, 임시버퍼에 저장된 데이터의 아스키 코드를 16진 코드(HEX code)로 변환하여 그 변환된 16진 코드의 길이에 따라 데이터 값을 결정하는 것이 특징이다.
본 발명에 의한 데이터 통신의 에러방지 방법은 통신용 포트를 통해 수신된 데이터를 임시기억장치에 저장하는 단계와(S100), 그 저장된 데이터를 1 바이트 분량씩 추출하여 아스키코드의 16진 코드로 변환하는 단계와(S200), 변환된 16진 코드의 문자열 개수를 산출하는 단계와(S300), 문자열 개수가 1 개이면 데이터를 ″0″으로 이루어진 첫번째 바이트와 상기 문자열로 이루어진 두번째 바이트로 구성된 2 바이트 문자로 처리하는 단계와(S400), 문자열 개수가 2 개이면 데이터를 문자열의 첫번째 숫자로 이루어진 첫번째 바이트와 문자열의 두번째 숫자로 이루어진 두번째 바이트로 구성된 2 바이트 문자로 처리하는 단계(S500), 그리고 문자열 개수가 4 개이면 데이터를 적어도 두 바이트 이상의 문자가 입력된 것으로 판단하여 처리하는 단계(S600)를 포함하여 구성되어 있다. 도 1은 이러한 본 발명의 에러방지 방법을 도시한 흐름도이다.
이하, 본 발명의 동작원리는 다음과 같다.
먼저, 컴퓨터에 연결된 외부기기로부터 통신용 직렬포트(serial port)를 통해 데이터가 컴퓨터로 수신된다(S100). 이 때, 사용하는 통신용 직렬포트로는 개인용 컴퓨터 혹은, 워크스테이션에 일반적으로 설치된 RS-232C 포트를 이용해도 무방하다.
통신용 직렬포트를 통해 수신된 데이터는 컴퓨터의 임시기억장소, 즉 버퍼(buffer)에 저장된다(S100). 버퍼는 데이터를 저장할 공간이 컴퓨터 프로그램, 또는 운영체제에 의해 한정되어 있다.
그 후, 임시기억장소에 저장된 데이터는 1 바이트 분량만큼 추출되고(S210), 추출된 데이터는 아스키 코드를 나타내는 16진 코드로 변환된다(S220).
그리고, 변환된 16진 코드의 문자열 길이를 검출한다(S300). 그래서, 임시기억장소에 저장된 데이터가 만약 문자 ″A″ 였다면, 문자 ″A″의 아스키 코드는 10진수로 65 번이므로, 그 데이터 ″A″는 16진수 41H 로 변환된다. 그런데, 16진수 41H은 '4'와 '1'의 두 개의 문자열로 이루어져 있으므로, 본 발명은 문자 ″A″를 ″4″와 ″1″, 즉 ″41″로 변환하여 출력한다(S510, S520).
또 다른 예로, 임시기억장소에 저장된 데이터가 만약 제어신호인 ″TAB″이었다면, 제어신호 ″TAB″의 아스키 코드는 10진수로 9 번이므로, 그 데이터 ″TAB″은 16진수 9H로 변환된다. 그런데, 16진수 9H는 '9', 즉 하나의 문자열로 이루어져 있으므로, 본 발명은 '9'의 앞자리에 '0'을 덧붙여 '09'로 출력한다. 따라서, 제어신호 ″TAB″은 ″09″로 변환되는 것이다(S410, S420).
만약, 임시기억장소에 저장된 데이터의 아스키 코드 값이 4자리의 16진수로 구성되어 있다면, 즉 아스키 코드가 4개의 문자열로 이루어져 있다면, 그 데이터는 1 바이트 분량이 아니라 적어도 2 바이트 이상의 분량의 데이터가 더 덧붙여져 전송된 것이다. 이 때, 본 발명은 그 데이터의 첫번째 바이트를 코드번호 129 번 이상의 아스키 코드의 제 1 데이터로 처리하고, 나머지 바이트를 별도의 제 2 데이터로 처리한다(S600).
특히, 본 발명은 4자리의 16진수에서 첫번째 자리의 문자열은 제 1 데이터의 첫번째 바이트에 대입하고(S610), 4자리의 16진수에서 두번째 자리의 문자열은 제 1 데이터의 두번째 바이트에 대입하며(S620), 4자리의 16진수에서 세번째 자리의 문자열은 제 2 데이터의 첫번째 바이트에 대입하고(S630), 4자리의 16진수에서 네번째 자리의 문자열은 제 2 데이터의 두번째 바이트에 대입한다(S640). 즉, 4자리의 16진수 데이터는 두자리씩 짝지워진 두 개의 2 바이트 데이터로 변환되는 것이다. 이 때, 본 발명은 임시기억장소에서 데이터를 추출하는 내부 카운터를 하나 증가시켜(S650) 데이터가 두 번 처리되었음을 내부적으로 표현한다.
그런데, 본 발명에서 데이터의 16진수 코드가 3자리로 되어 있는 경우는 별도의 처리를 하지 않아도 된다. 그 이유는 16진수 코드의 문자열이 3개이면, 수신된 데이터가 1바이트 분량이 아니라 2바이트 이상인 것인데, 데이터가 2바이트 수신되는 현상은 아스키 코드가 129 이상일 때에만 발생하기 때문이다. 따라서, 데이터의 16진수 코드가 3자리이면, 그 데이터를 아스키 코드번호 129 이상의 데이터로 인식하여 처리하면 된다. 그 후, 데이터를 추출하는 내부 카운터를 하나 증가시키고(S700), 데이터 처리완료여부를 판단한다(S800). 데이터의 처리가 완료되지 않으면 다시 상술한 과정을 반복하고, 데이터의 처리가 완료되었으면 프로그램의 동작을 종료한다.
이하, 상술한 본 발명의 데이터 오류방지 방법을 비주얼 베이직으로 구현한 프로그램 리스트는 다음과 같다.
Private Sub cmdCommOn_Click()
Dim ii As Integer
Dim Current_Time As Single
If MSComm1.PortOpen = False Then
MSComm1.CommPort = 1
MSComm1.Settings = ″9600,N,8,1″
MSComm1.InputLen = 1
MSComm1.PortOpen = True
End If
Comm_Finished = False
ReDim InString(txtToReceive.Text) As String
ReDim InStringHex(2, txtToReceive.Text *2+2) As String
Do
DoEvents
txtReceive.Text = MSComm1.InBufferCount
If MSComm1.InBufferCount 〉= txtToReceive.Text Then
Comm_Finished = True
End If
Loop Until Comm_Finished = True
txtReceive.Text = MSComm1.InbufferCount
Select Case Comm_Flag
Case 0
For ii=0 To (txtToReceive.Text - 1) Step 1
Temp_String = MSComm1.Input
InString(ii) = Hex(Asc(Temp_String))
Select Case Len(InString(ii))
Case 1
InStringHex(0, ii*2) = ″0″
InStringHex(0, ii*2+1) = InString(ii)
Case 2
InStringHex(0, ii*2) = Mid(InString(ii), 1, 1)
InStringHex(0, ii*2+1) = Mid(InString(ii), 2, 1)
Case 4
InStringHex(0, ii*2) = Mid(InString(ii), 1, 1)
InStringHex(0, ii*2+1) = Mid(InString(ii), 2, 1)
InStringHex(0, ii*2+2) = Mid(InString(ii), 3, 1)
InStringHex(0, ii*2+3) = Mid(InString(ii), 4, 1)
ii = ii+1
End Select
Next ii
Current_Time = Timer
Do While Timer 〈= Current_Time + 1
DoEvents
Loop
MSComm1.PortOpen = False
MsgBox ″첫번째 수신을 완료했습니다.″ vbInformation
Comm_Flag = 1
Case 1
For ii = 0 To (txtToReceive.Text-1) Step 1
Temp_String = MSComm1.Input
InString(ii) = Hex(Asc(Temp_String))
Select Case Len(InString(ii))
Case 1
InStringHex(1, ii*2) = ″0″
InStringHex(1, ii*2+1) = InString(ii)
Case 2
InStringHex(0, ii*2) = Mid(InString(ii), 1, 1)
InStringHex(0, ii*2+1) = Mid(InString(ii), 2, 1)
Case 4
InStringHex(0, ii*2) = Mid(InString(ii), 1, 1)
InStringHex(0, ii*2+1) = Mid(InString(ii), 2, 1)
InStringHex(0, ii*2+2) = Mid(InString(ii), 3, 1)
InStringHex(0, ii*2+3) = Mid(InString(ii), 4, 1)
ii = ii+1
End Select
Next ii
MSComm1.PortOpen = False
MsgBox ″두번째 수신을 완료했습니다.″ vbInformation
Comm_Flag = 0
End Select
End Sub
상기 서술된 프로그램 코드는 1 행부터 10 행까지는 기존 루틴과 동일하다. 11 행에서 변수크기를 재설정하는 이유는 수신된 데이터의 크기를 검사하여 그 크기만큼 문자열 변수의 배열을 재정의함으로써, 저장순서에 따른 처리를 가능케 하기 위함이다. 기존 루틴은 하나의 문자열 변수에 수신된 데이터를 모두 저장했었으므로, 데이터 크기를 고려하지 않았었다.
12 행에서 2차원 배열을 재설정한 이유는 수신된 아스키 코드가 모두 16진수 코드로 변환되려면, 기존보다 2 배의 저장영역이 필요하기 때문이다. 그리고, 2차원으로 구별해 놓은 이유는 수신된 데이터량이 수신된 버퍼보다 클 경우, 연속적으로 수신하기 위함이다.
13 행 내지 19 행은 프로토콜 상에 규약되어 있거나 프로그래머가 설정한 분량의 데이터가 수신될 때까지 반복적으로 데이터를 수신받는 루틴이고, 21 행 이하는 연속적인 데이터 수신에 따른 회수별 분기 루틴이다.
22 행 내지 47 행은 첫번째 통신에 대응하는 분기 루틴으로서, 수신된 데이터의 크기만큼 반복되는 루틴과 통신포트를 닫고 그 순간까지의 상황을 사용자에게 제공해주는 루틴으로 구성되어 있다.
7 행에서 수신단위를 1 바이트 단위로 설정했으므로, 24 행의 임시변수에는 1 바이트의 데이터가 저장된다. 그런데, 25 행의 구문에 의해 그 1 바이트의 데이터는 16진수 코드(HEX code)로 변환되고, 43 행의 구문은 그 변환된 문자열의 길이를 판별하여 그 길이에 따라 각각 다른 루틴이 실행된다. 만약, 그 문자열의 길이가 1일 경우, 즉 16진수 코드가 한 자리수였다면 27 행으로 분기한다. 그리고, 그 문자열의 길이가 2일 경우, 즉 16진수 코드가 두 자리였다면 30 행으로 분기한다. 또한, 그 문자열의 길이가 4일 경우, 즉 16진수 코드가 네 자리였다면 33 행으로 분기한다.
상기 프로그램의 38 행에서 반복구문의 반복변수(ii)의 값을 하나 증가시킨 이유는 수신된 데이터가 아스키 코드 129 번 이상이면, 반드시 데이터가 하나 더 수신되기 때문이다. 이것은 48 행 이하의 두번째 통신에 대응하는 분기루틴에도 동일하게 적용된다.
그런데, 본 프로그램이 ″Case 3″인 경우의 루틴이 없는 이유는 데이터가 2바이트 이상 수신되는 현상은 아스키 코드가 129 이상일 때에만 발생하기 때문이다. 따라서, 16진수 코드의 문자열 길이가 세자리인 경우는 고려하지 않아도 무방하다. 따라서, 한글 윈도우 시스템 하에서 동작하는 제어장치가 임시기억장소로부터 1 바이트의 데이터를 추출했을 때에 2 바이트가 연이어 덧붙여짐에 의해 데이터가 오해석되는 문제를 해결할 수 있게 된다.
본 발명의 데이터 통신 에러방지방법은 컴퓨터와 제어장치 사이의 데이터 통신 시, 복수 바이트의 데이터가 연이어 덧붙여 추출됨에 의해 데이터가 변형되거나 오해석되는 것을 방지할 수 있는 효과가 있다. 그에 따라 데이터 통신 시, 8 비트 아스키 코드를 모두 사용할 수 있게 되어 2 바이트 문자권에서 사용하는 운영체제, 특히 마이크로 소프트 사의 운영체제인 한글윈도우 시스템에서도 일반적으로 개인용 컴퓨터에 많이 설치되어 있는 RC-232C 직렬포트에 의해 파일과 데이터를 송수신할 수 있는 효과가 있다. 따라서, 컴퓨터와 제어장치를 간단한 직렬접속장치로 연결하여 제어장비를 구성할 수 있고, 데이터 통신의 신뢰도를 향상시킬 수 있는 효과가 있다.

Claims (4)

  1. 외부의 제어장치로부터 통신용 직렬포트를 통해 수신된 데이터를 임시기억장소에 저장하는 단계,
    상기 임시기억장소에 저장된 데이터를 1 바이트 분량씩 추출하여 상기 1 바이트 분량의 데이터를 아스키의 16진 코드(HEX code)로 변환하는 단계,
    상기 16진 코드의 문자열 개수를 산출하는 단계,
    상기 문자열 개수가 1 개이면 상기 데이터를 ″0″으로 이루어진 첫번째 바이트와 상기 문자열로 이루어진 두번째 바이트로 구성된 2 바이트 문자로 처리하는 단계,
    상기 문자열 개수가 2 개이면 상기 데이터를 상기 문자열의 첫번째 숫자로 이루어진 첫번째 바이트와 상기 문자열의 두번째 숫자로 이루어진 두번째 바이트로 구성된 2 바이트 문자로 처리하는 단계, 그리고
    상기 문자열 개수가 4 개이면 상기 데이터를 두 개의 2 바이트 문자가 입력된 것으로 판단하여 처리하는 단계를 포함하여 이루어진 것을 특징으로 하는 컴퓨터를 이용한 데이터 통신의 에러방지 방법.
  2. 제 1 항에 있어서, 상기 통신용 직렬포트는 RS-232C 직렬포트인 것을 특징으로 하는 컴퓨터를 이용한 데이터 통신의 에러방지 방법.
  3. 제 1 항에 있어서,
    상기 문자열 개수가 4 개이면, 상기 데이터를
    상기 문자열의 첫번째 숫자로 이루어진 첫번째 바이트와 상기 문자열의 두번째 숫자로 이루어진 두번째 바이트로 구성된 2 바이트 제 1 문자와,
    상기 문자열의 세번째 숫자로 이루어진 첫번째 바이트와 상기 문자열의 네번째 숫자로 이루어진 두번째 바이트로 구성된 2 바이트 제 2 문자로 처리하는 단계를 부가적으로 더 포함하여 구성된 것을 특징으로 하는 컴퓨터를 이용한 데이터 통신의 에러방지방법.
  4. 제 3 항에 있어서, 상기 임시기억장소에서 데이터를 추출하는 내부 카운터를 하나 증가시키는 단계를 부가적으로 더 포함하여 구성된 것을 특징으로 하는 컴퓨터를 이용한 데이터 통신의 에러방지 방법.
KR1019990043645A 1999-10-09 1999-10-09 컴퓨터를 이용한 데이터 통신의 에러방지방법 KR100313963B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019990043645A KR100313963B1 (ko) 1999-10-09 1999-10-09 컴퓨터를 이용한 데이터 통신의 에러방지방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019990043645A KR100313963B1 (ko) 1999-10-09 1999-10-09 컴퓨터를 이용한 데이터 통신의 에러방지방법

Publications (2)

Publication Number Publication Date
KR20010036574A true KR20010036574A (ko) 2001-05-07
KR100313963B1 KR100313963B1 (ko) 2001-11-15

Family

ID=19614655

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990043645A KR100313963B1 (ko) 1999-10-09 1999-10-09 컴퓨터를 이용한 데이터 통신의 에러방지방법

Country Status (1)

Country Link
KR (1) KR100313963B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101439149B1 (ko) * 2013-02-27 2014-09-12 주식회사 뉴티씨 (Newtc) 외부 전자 기기 제어 장치

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101439149B1 (ko) * 2013-02-27 2014-09-12 주식회사 뉴티씨 (Newtc) 외부 전자 기기 제어 장치

Also Published As

Publication number Publication date
KR100313963B1 (ko) 2001-11-15

Similar Documents

Publication Publication Date Title
US11307990B2 (en) Deploying a smart contract
KR970003322B1 (ko) 데이타의 다중-바이트 표현 변환 방법
US6400287B1 (en) Data structure for creating, scoping, and converting to unicode data from single byte character sets, double byte character sets, or mixed character sets comprising both single byte and double byte character sets
USRE39458E1 (en) Remote file transfer method and apparatus
US7278100B1 (en) Translating a non-unicode string stored in a constant into unicode, and storing the unicode into the constant
JP2000047964A (ja) ネットワ―ク上のデ―タ転送方法、ネットワ―ク上のデ―タ転送装置、ネットワ―ク上のデ―タ転送システム及びネットワ―ク上のデ―タ転送プログラムを記録した記録媒体
US6892377B1 (en) Method and system for platform-independent file system interaction
US6748423B1 (en) Remote control of a linked computer
US7051278B1 (en) Method of, system for, and computer program product for scoping the conversion of unicode data from single byte character sets, double byte character sets, or mixed character sets comprising both single byte and double byte character sets
EP0800142B1 (en) Method for path name format conversion
KR100313963B1 (ko) 컴퓨터를 이용한 데이터 통신의 에러방지방법
US5958028A (en) GPIB system and method which allows multiple thread access to global variables
CN113836580A (zh) 数据脱敏方法、系统、设备及存储介质
US8082528B2 (en) Process-independent schema library
CN115857910B (zh) 一种边缘计算采集器的编程方法、装置、服务器及介质
CA2413735A1 (en) Programme coupling method
US7207046B1 (en) Method and system for providing string-over-socket scripting language access to distributed object model interfaces
EP1298525A1 (en) Interaction between computers with different object-oriented run-time environments
JPH05197643A (ja) ファイル送受信装置
CN105335153A (zh) 一种自动生成动态脚本的方法
CN116910756B (zh) 一种恶意pe文件的检测方法
CN115080061B (zh) 反序列化攻击检测方法、装置、电子设备及介质
CN111796581B (zh) 盾构数据采集方法、装置及计算机存储介质
US6904516B2 (en) Mechanism for enabling efficient execution of an instruction
KR100586000B1 (ko) 크로스 플랫폼 구성을 가능하게 하는 방법 및 장치

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20070920

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee