안녕하십니까? 하나 문의 좀 드릴까 합니다.
TMS Async32 의 VaComm 를 가지고 시리얼 통신으로 open과 close를 빠르게 반복하다보면
메모리 에러가 발생합니다. 아래와 같은 내용인데요. open하고 난 후 데이타 처리하고 close할때까지 시간의 여유가 있으면
에러가 발생하지않는데요.
위의 것을 가지고 comport 를 자동확인하려고 하는데 총 컴퓨터에서 생성될 수 있는 comport 는 256개이기때문에..
256번을 open, close하면서 해당 comport의 상태를 확인합니다. 오픈될 경우 정상사용가능 comport로 보이고
오픈이 되지않을 경우는 표시를 해주지 않고 사용중인 경우는 사용중이라고 표시합니다.
256개를 체크를 하다보니 딜레이타임이 짧아야하는데요. open close를 0.5초 정도 딜레이를 줄 경우 128초가 걸립니다.
체크 하는것만 그렇게 걸리는것도 문제긴하지만.. 0.5초를 주던 길게 주던.. 간간히 메모리 에러가 발생한다는것입니다.
다른 시리얼통신 component(TApdComPort)를 사용하면 open close를 반복해도 발생하지않으나 시리얼케이블로
연결했을 경우는 정상적으로 되나 가끔 UsbToSerial로 연결했을 경우 데이타 처리가 되지않아 위의 VaComm으로 변경하니
시리얼케이블이든 UsbToSerial이든 모두 정상적으로 처리됩니다.
한데 위의 open, close시 에러가 발생해서요. 아마도 open과 close시 내부적으로 처리를 뭔가 하고 있는데
메모리 반납전에 다른처리가 들어오니 다 못처리해서 메모리 에러가 발생하는듯하는데요.
아래의 리플내용처럼.. 의 내용은 처리되어있습니다.
if not VaComm.Active then
begin
1. TApdComPort component 로 시리얼통신시 시리얼케이블로 처리시는 모두 정상적으로 되나 UsbToSerial케이블 사용시
정상적으로 데이타가 못넘어가는 현상이 가~~ 아끔 나타남(정상적으로 사용하다가 어쩌다가 발생)
2. TMS Async32 의 VaComm component 사용시 open, close를 빠른속도로 반복시 메모리 에러 발생.
일단 현재는 2번째 방법으로 처리하였으나 (comport 자동확인 기능 주석으로 빼버리고) open 후 close를 많이 반복하지않음
으로 하지만 사용하고 난후 프로그램을 종료때나 가끔 메모리 에러가 발생합니다.
고수분들의 주옥같은 말씀 부탁드립니다.
혹 위의 내용으로 문제를 겪어보시고 처리하신 분들의 조언 좀 부탁드리겠습니다.
아래는 다른분의 같은 내용이라 적어봅니다.
링크) http://www.delmadang.com/community/bbs_view.asp?bbsNo=17&indx=407323
델파이7, VaComm 컴퍼넌트를 이용해서
시리얼(RS232)통신 테스를 하고 있는데요,
OPEN과 CLOSE를 빠른 속도로 반복하다 보면,
System Error. Code: 5. <----- 이런 에러가 납니다. ( 그리고 일정하지 않고 랜덤하게 발생 합니다. )
아래는 해당 자동 comport 확인 부분
===============================================================================
//자동 Comport 확인
VaComm.Baudrate := br9600;
tmpString := ComboBox3.Text;
ComboBox3.Clear;
ComboBox1.Clear;
ComboBox3.Text := tmpString;
ComboBox1.Text := tmpString;
for i:=1 to 256 do begin
try
VaComm.PortNum := i;
VaComm.Open;
ComboBox3.Items.Add('COM' + IntToStr(i));
ComboBox1.Items.Add('COM' + IntToStr(i));
except
on E:Exception do
begin
//if copy(E.Message,0,7) = 'ie_Open' then
if copy(E.Message,0,10) = 'Can''t open' then
begin
ComboBox3.Items.Add('COM' + IntToStr(i));
ComboBox1.Items.Add('COM' + IntToStr(i) + ' 사용중');
end;
end;
end;
VaComm.Close;
end;
제가 기억하고 있는 MS-Dos System Error Code는
2 = File Not Found.
3 = Path Not Found.
4 = Too many open files.
5 = File access denied.
6 = Invalid file handle.
등의 의미인데 윈도에서도 같은의미가 아닐런지요.