안녕하세요 시리얼통신 두번째 소스입니다.
TKMain 클래스가 TSerialPort 클래스를 상속받아 TSerialPort 의 메소드들을 오버라이딩 하고 있는 부분입니다.
이전 글에서 말씀드렸지만 OnDataReceived 메서드는 응답받기 위한 필수적인 이벤트인 DataReceivedEvent...
를 사용하고 있습니다.
serialport.BytesToRead 는 데이터를 받고 ReadData 변수에 넣은 부분입니다.
seriaport.Basestream.Read(R_buff, ReadData2, ReadData); 역할은
R_buff 에 ReadData2(저장할 시작번지) 부터 ReadData 개수만큼 저장한다 입니다.
또한 R_buff 를 cR_buff 에 126개만큼 복사하여 cR_buff 에 헤더값과 CRC를 제외한 측정치 값을 가질 수 있도록
하였습니다.
Send 부분은 부모클래스의 fn_Send 메서드를 사용하였습니다.
저 같은 경우 queue 버퍼 클래스와 쓰레드 타이머 클래스를 사용하기에 두 클래스를 이용여 Send 메서드를 사용하였습니다.
queue 클래스 역할은 순차적으로 들어온 데이터를 순차적으로 빠져나가게끔 정의한 클래스입니다
쓰레드 타이머 부분은 Tcp/IP Client 부분에 정의되어 있을거에요!
설명이 조금 부족한데.. 궁금하신부분은 쪽지나 댓글로 말씀해주세요!ㅠㅠ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
class TKMain : TSerialPort
{
public int ReadData2 = 0;
//============================================//
//ClientOpen 메서드
//============================================//
public int Kopen()
{
fn_Open(KOnDataReceived);
int iret = 1;
return iret;
}
//==================================================//
//ClientClose 메서드
//==================================================//
public void KClose()
{
{
fn_Close(KOnDataReceived);
serialport.DataReceived -= KOnDataReceived;
}
}
//======================================================//
//데이터 리시브 함수
//=====================================================//
{
int ReadData;
//읽은 데이터를 ReadData 변수에 넣음
ReadData = serialport.BytesToRead;
if (ReadData > 200 || ReadData2 > 200)
{
ReadData2 = 0;
}
ReadData2 += ReadData;
//측정치 데이터 요구했을 때
//01, 04, 7E(126) (번호, 시작주소, 개수)
if (ReadData2 == 133 && TData.R_buff[1] == 0x04)
{
TData.ReadCnt++;
ReadData2 = 0;
}
//===================================================//
//쓰레드 타이머 - 콜백함수(요청)
//==================================================//
public void KCallback(object o)
{
byte[] SetBuff = new byte[256];
{
{
//W_buff 버퍼 값을 0번쨰부터 8개 전송
fn_Send(TData.W_buff, 0, 8);
}
else
{
byte[] sbuf = new byte[10];
}
TData.SendCnt++;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
방문자 분들 모두 즐거운 하루, 행복한 하루 보내세요!
[C#] - C# 모드버스 RTU 시리얼통신 구현 폼 (주석 추가, 소스 공개)
[C#] - C# 모드버스 RTU 시리얼통신 구현하기 (주석 추가, 소스 공개)
[C#] - C# 모드버스 RTU 시리얼통신 구현하기2 (주석 추가, 소스 공개)
'C#' 카테고리의 다른 글
C# DNS 로 서버 접속하기 (0) | 2019.08.30 |
---|---|
C# 날짜 Log 파일 만들기 (0) | 2019.08.21 |
C# 모드버스 RTU 시리얼통신 구현하기 (59) | 2019.08.05 |
C# Modbus RTU CRC 구하기 (0) | 2019.07.29 |
C# ini 파일 이용하기 (0) | 2019.07.19 |