[제품종류] IEC667
[개발환경] Visual Studio 2008 VB
=============== 질 문 ===============수고많으십니다.
IEC-667 모델로 86byte 정도의 패킷을 수신하고 있습니다.
정상적으로 수신하다 가끔 첨부파일에 있는 것처럼
"'System.OverFlowException' 형식의 첫째 예외가 SmartNX_IEC667.dll에서 발생했습니다." 에러가 나옵니다.
어떨때 이런 에러가 나올까요??
설정은 아래와 같습니다.
Public Shared Sub OpenPort()
Try
With SmartSerialPort1
' SmartSerialPort1이 내부적으로 포트 설정을 지원하는 경우
.PortNo = SmartX.SmartSerialPort.COMPORTNO.COM4
.Baud_Rate = SmartX.SmartSerialPort.BAUDRATE._115200bps ' 또는 적절한 방식으로 변환
.ErrorCheckCodeType = SmartX.SmartSerialPort.ERRORCHECKCODETYPES.BINARY
.ErrorCheckMode = SmartX.SmartSerialPort.ERRORCHECK.NONE
.ErrorCode_Location = SmartX.SmartSerialPort.ERRORCODELOCATION.HEADER
.ReceiveFrameDebugMode = False
.RS485SoftwareDetection = False
.FrameBufferSize = 50000
.ReadTimeout = 800
.FrameSeparationType = SmartX.SmartSerialPort.FRAMESEPARATIONTYPES.STXANDETX_READTIMEOUT
.ReceiveDetect = SmartX.SmartSerialPort.RECEIVEDETECTTYPE.EVENT_QUEUE
.STXCode = &H4B
.ETXCode = &H4D
End With
If (SmartSerialPort1.IsOpen = False) Then
SmartSerialPort1.Open()
End If
SmartCPU.StartCPUUsage()
Catch ex As Exception
Debug.WriteLine(">>[SerialPortModule] Serial Open Error: " & ex.Message)
End Try
End Sub
=============== 답 변 ===============
안녕하세요, HNS입니다.
아래 내용을 STEP 순서대로 확인 하시기 바랍니다.
SETP-1. HNS 홈페이지(www.hnsts.co.kr) > 자료실 > Tech Note > No.11 SmartSerialPort로 통신 시 Buffer Overrun Error의 발생 여부 확인 방법 및 결과 내용 참고 하시기 바랍니다.
지금 데이터 크기가 레지스터 크기 보다 커서 Buffer Overrun Error 이 발생 하는 걸로 보입니다.
Tech Note 내용의 5.Buffer Overrun Error 발생 여부 확인 방법 의 코드를 넣고 OnPortError 이벤트를 반드시 연결하시어 테스트 해보시기 바랍니다.
(코드만 넣으면 확인 불가능 합니다. 반드시 이벤트와 연결해주셔야 합니다.)
private void smartSerialPort1_OnPortError(System.IO.Ports.SerialError eErrorState)
{
smartListBox2.AddItem(eErrorState.ToString());
}
SETP-2. STX와 ETX 조합의 데이터 프레임이 항상 올바르게 유지되는지, 데이터 사이에 STX 또는 ETX가 포함되어 전달되는 경우가 있는지 확인해 주시기 바랍니다.
SETP-3. 현재 EventQueue 코드가 없어 데이터를 계속 쌓아두고 있는 건지, 아니면 이벤트 큐 작업으로 데이터를 정상적으로 처리하고 있는지 확인할 필요가 있습니다.
여려움이 있으시면 원격 지원 요청 주시면 함께 디버깅을 통해 점검해 볼 수 있습니다.
감사합니다.