박력돌이

wooristar.egloos.com

포토로그


애드센스와이드


[COM] 문자열 -> 아스키 코드로 변환 에러 발생 Vector(CANoe)

원했던 것:
닷넷에서 입력한 글자가 캐널라이져 메세지 시그널로 송출될 때는 아스키로 변하는 것

해결책:
            iACU_CODE1 = Asc(txtACUEOLcode1.Text)
            iACU_CODE2 = Asc(txtACUEOLcode2.Text)
            iACU_CODE3 = Asc(txtACUEOLcode3.Text)
            iACU_CODE4 = Asc(txtACUEOLcode4.Text)

            sv_txtACUEOLcode1.Value = Convert.ToInt16(iACU_CODE1) '패널의 코딩값을 시스템 변수로 넣어준다.
            sv_txtACUEOLcode2.Value = Convert.ToInt16(iACU_CODE2) '패널의 코딩값을 시스템 변수로 넣어준다.
            sv_txtACUEOLcode3.Value = Convert.ToInt16(iACU_CODE3) '패널의 코딩값을 시스템 변수로 넣어준다.
            sv_txtACUEOLcode4.Value = Convert.ToInt16(iACU_CODE4) '패널의 코딩값을 시스템 변수로 넣어준다.

위와 같이 변환하면 예를 들어 1234라고 닷넷에서 입력하면 캐널라이져 메세지 시그널에는 31 32 33 34로 표시된다.

------------------------------------------------------------------------------------------------------------------

현상:
COM기능으로 만든 닷넷 패널을 캐널라이져에 추가하여 실행 중 특정 기능의 버튼을 누르면 아래와 같이 에러가 뜬다.

원인:
B2010에서 만든 텍스트 박스의 값을 시스템변수로 옮긴 뒤 다시 그 값을 캐널라이져 내부 DIAG BROUSER로 옮겨서
진단 CAN 메세지의 파라메터로 활용하는 과정에서 VB2010의 텍스트 박스 값이 텍스트로만 인식되고 이 값이 INT로 변환이
안되는 현상이다.

Cint함수도 써보고 Convert의 ToInt32메서드도 사용해봤는데 아직까진 효과가 없다.

대책:
http://msdn.microsoft.com/ko-kr/library/f1cbtwff.aspx

sv_txtACUEOLcode1.Value = Convert.ToInt16(txtACUEOLcode1.Text) '패널의 코딩값을 시스템 변수로 넣어준다.
sv_txtACUEOLcode2.Value = Convert.ToInt16(txtACUEOLcode2.Text) '패널의 코딩값을 시스템 변수로 넣어준다.
sv_txtACUEOLcode3.Value = Convert.ToInt16(txtACUEOLcode3.Text) '패널의 코딩값을 시스템 변수로 넣어준다.
sv_txtACUEOLcode4.Value = Convert.ToInt16(txtACUEOLcode4.Text) '패널의 코딩값을 시스템 변수로 넣어준다.

아래와 같이 적어주면 에러없이 변환 됨

과제:
위와 같은 방식으로 틀림없이 닷넷 패널의 텍스트박스 입력 값을 캐널라이져로 표출시킬수는 있으나 입력은 10진수고
출력은 16진수로 표기된다. 그리고, 아스키 코드 형태로 입력하려면 별도의 함수를 구현해야할 것 같다.

-캐널라이져 에러 로그-
CANalyzer 8.1.92: An error occured.
Please note TYPE and METHOD and call Vector Support Team to report the error.
Tel. +49 711 80670-200  ;  Fax +49 711 80670-555  or

Reason for the failure was an uncaught InvalidCastException.
Error message:  문자열에서 'Integer' 형식으로 변환할 수 없습니다.
Type: Microsoft.VisualBasic.CompilerServices.Conversions
Method: Int32 ToInteger(System.String)
 at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)

 at ACU_CONN_INFO_PNL.ACU_CONN_INFO_PNL.btnACUEOL2E_Click(Object sender, EventArgs e) in D:\4.VECTOR 자료\☆☆CANoe,CANalyzer 프로그램 모음\20140508_ACU 전용진단프로그램\Programmed_Panel\ACU_CONN_INFO_PNL\ACU_CONN_INFO_PNL\ACU_CONN_INFO_PNL.vb:line 2228

 at System.Windows.Forms.Control.OnClick(EventArgs e)

 at System.Windows.Forms.Button.OnClick(EventArgs e)

 at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

 at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)

 at System.Windows.Forms.Control.WndProc(Message& m)

 at System.Windows.Forms.ButtonBase.WndProc(Message& m)

 at System.Windows.Forms.Button.WndProc(Message& m)

 at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

 at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

 at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

 at ManagedRunApplication(INativeApplication* app).
CANalyzer8.1.92
System Information:
 Operating system: Windows 7 Service Pack 1 (64 bit)
 Processor: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz
 Logical Processors: 4
 Processor Cores: 4
Resource Information:
 Handles: 709
 GDI Objects: 805
 USER Objects: 604
 PrivateUsage: 332 MB
 TotalPhys: 8175 MB
 AvailPhys: 4106 MB
 TotalPageFile: 16348 MB
 AvailPageFile: 10160 MB
 TotalVirtual: 4095 MB
 AvailVirtual: 3263 MB
 PageFaultCount: 638277
 PeakWorkingSetSize: 195 MB
 WorkingSetSize: 187 MB
 PeakPagefileUsage: 350 MB
 PagefileUsage: 332 MB

 
        If Measurement.Running = True Then

            iACU_CODE1 = CInt(txtACUEOLcode1.Text) '패널의 코딩값을 시스템 변수로 넣어준다.
            iACU_CODE2 = CInt(txtACUEOLcode2.Text) '패널의 코딩값을 시스템 변수로 넣어준다.
            iACU_CODE3 = CInt(txtACUEOLcode3.Text) '패널의 코딩값을 시스템 변수로 넣어준다.
            iACU_CODE4 = CInt(txtACUEOLcode4.Text) '패널의 코딩값을 시스템 변수로 넣어준다.


            sv_txtACUEOLcode1.Value = 1 'iACU_CODE1 '패널의 코딩값을 시스템 변수로 넣어준다.
            sv_txtACUEOLcode2.Value = 2 'iACU_CODE2 '패널의 코딩값을 시스템 변수로 넣어준다.
            sv_txtACUEOLcode3.Value = 3 'iACU_CODE3 '패널의 코딩값을 시스템 변수로 넣어준다.
에러부분sv_txtACUEOLcode4.Value = Convert.ToInt32(iACU_CODE4) '패널의 코딩값을 시스템 변수로 넣어준다.