.NET Logo
Welcome Guest Search | Active Topics | Members | Log In | Register

Serial Port Exception ตัวนี้เกิดจากอะไรคะ Options · View
C#
Posted: Friday, October 24, 2008 11:11:47 PM
Rank: มือฝึกหัด
Groups: Member

Joined: 10/24/2008
Posts: 6
Location: BKK


พอดีเพิ่งหัดเขียนการ Connection ส่งผ่านข้อมูลทาง Serial Port อะคะ เป็นการ connect ตัว Application บน PC กับ Barcode Printer (Intermec PM4i)

ค่า Parameter ที่ใช้ในการ set ค่าให้กับ Printer ใน Software จะเป็นค่าเดียวกับที่ Set กับตัว Printer ตอนที่ทำการ Print Test คะ

แต่เมื่อ สั่งเปิด Port แล้ว Program จะ throw exception ออกมาดังนี้คะ

"The given port name does not start with COM/com or does not resolve to a valid serial port.   Parameter name: PortName "

COM1 คือ Port name ที่ใช้ Connect และเมื่อลองเปลี่ยนเป็น Port อื่น ก้อยังคงเป็น Error เดิม คะ  ไม่ทราบว่าเกิดจากสาเหตุอะไร

ช่วยแนะนำด้วยนะคะ ว่ามีวิธีแก้อย่างไร  ช่วยหน่อยนะค๊า

 

ขอบคุณล่วงหน้าคะ

 

mrxc
Posted: Saturday, October 25, 2008 9:45:58 AM
Rank: มือเทพ
Groups: Member

Joined: 3/6/2008
Posts: 196
Location: TH

serialPortX.PortName = "COM1";

C#
Posted: Saturday, October 25, 2008 11:48:55 AM
Rank: มือฝึกหัด
Groups: Member

Joined: 10/24/2008
Posts: 6
Location: BKK

 

คือ ตอน Set ค่า Parameter ใช้แบบ นี้คะ

SerialPort Inport = new SerialPort("COM1",
      9600, Parity.None, 8, StopBits.One);

มันต่างกับ 

serialPortX.PortName = "COM1";   หรอคะ  ถ้าไม่ต่างกัน แล้ว exception ที่เกิดนี้น่าจะเกิดจากอะไรหรอคะ

 

mrxc
Posted: Saturday, October 25, 2008 2:25:20 PM
Rank: มือเทพ
Groups: Member

Joined: 3/6/2008
Posts: 196
Location: TH

แล้ว Error ตอนไหนครับ แน่ใจนะคัรบว่าอุปกรณ์ต่อที่ COM1 จริงๆ

 

-----------Edit

ลองแล้วครับ บนวิสต้าไช่ไหมครับ ลองบน XP ไม่มีปัญหาอะไร บน vista 64bit ไม่ได้คัรบ และคิดว่า 32bit ก็คงด้วยแต่ไม่มีลองครับ

C#
Posted: Sunday, October 26, 2008 10:42:55 AM
Rank: มือฝึกหัด
Groups: Member

Joined: 10/24/2008
Posts: 6
Location: BKK

1.  แล้ว Error ตอนไหนครับ?

-   พอโปรแกรมรันไปถึงตรงส่วนของ .Open();

แล้วจะวิ่งเข้า Catch Exception:   "The given port name does not start with COM/com or does not resolve to a valid serial port.   Parameter name: PortName "

2.  แน่ใจนะคัรบว่าอุปกรณ์ต่อที่ COM1 จริงๆ

-  คะ ดูที่ Device  Manager แล้ว บนเครื่อง PC  ที่ใช้ COM PORT คือ COM1 คะ

3. PC ที่ลองรันโปรแกรม เป็น Windows 2000 และ   . NET Frame work  2.0  คะ

และที่ลองรันบน  Notebook  ซึ่งเป็น Windows XP  และ   . NET Frame work  2.0  คะ

รบกวนด้วยคะ

ซึ่งได้ผลออกมาเหมือนกันคะ

เลยไม่ทราบจิงๆ ว่าเกิดจากอะไร T_T

mrxc
Posted: Sunday, October 26, 2008 1:44:59 PM
Rank: มือเทพ
Groups: Member

Joined: 3/6/2008
Posts: 196
Location: TH

ขอ code ทั้งหมดได้ไหมครับในส่วนของ serial port ซึ่งอาจจะเจอก็ได้

 

แต่จริงๆแล้วผมคิดว่าน่าจะติดที่ security ของ windows มากกว่าคัรบเพราะว่าโปรแกรมเดียวกันรันบน vista ไม่ได้แต่บน xp ได้ครับ และบน vista ขึ้นแบบที่คุณบอกมาเลยครับ

C#
Posted: Sunday, October 26, 2008 6:44:48 PM
Rank: มือฝึกหัด
Groups: Member

Joined: 10/24/2008
Posts: 6
Location: BKK

 

ข้างล่างนี้คือ คลาส ในส่วนของ Serial Port คะ

ปล. ไม่ได้รันโปรมแกรมบน Vista คะ แต่ลองรันบน XP และ Windows 2000 ซึ่งเกิดเป็น Error อย่างที่บอกไปอะคะ

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsApplication1
{
class Prints
{
//private string SetPort = "COM1";

/* public string SetPort1
{
get { return SetPort; }
set { SetPort = value; }
}*/

public bool PrintCustomer(string Codes, string CustodianNo, string CustodianName, string UserName)
{
bool isComplet;
try
{
//config port "COM1"
System.IO.Ports.SerialPort inPort = new System.IO.Ports.SerialPort("COM1", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);



if (!inPort.IsOpen)
{
inPort.Open();
}

inPort.WriteLine("<STX><ESC>C1<ETX>");
inPort.WriteLine("<STX><ESC>k<ETX>");
inPort.WriteLine("<STX><SI>L630<ETX>");
inPort.WriteLine("<STX><SI>S30<ETX>");
inPort.WriteLine("<STX><SI>d2<ETX>");
inPort.WriteLine("<STX><SI>h0,0;<ETX>");
inPort.WriteLine("<STX><SI>l8<ETX>");
inPort.WriteLine("<STX><SI>I3<ETX>");
inPort.WriteLine("<STX><SI>F0<ETX>");
inPort.WriteLine("<STX><SI>D0<ETX>");
inPort.WriteLine("<STX><SI>t0<ETX>");
inPort.WriteLine("<STX><SI>W835<ETX>");
inPort.WriteLine("<STX><SI>g1,567<ETX>");
inPort.WriteLine("<STX><ESC>P<ETX>");
inPort.WriteLine("<STX>E*;F*;<ETX>");
inPort.WriteLine("<STX>L1;<ETX>");
inPort.WriteLine("<STX>D0;<ETX>");
inPort.WriteLine("<STX>B0;o1116,113;f3;c6,0;h124;w5;r0;i0;d3," + Codes + ";<ETX>"); // Barcode
inPort.WriteLine("<STX>D1;<ETX>");
inPort.WriteLine("<STX>H1;o960,95;f3;c25;k6;d3," + CustodianNo + ";<ETX>"); // Head No. Text
inPort.WriteLine("<STX>H2;o958,400;f3;c25;k6;d3," + Codes + ";<ETX>"); // Barcode value Text
inPort.WriteLine("<STX>H3;o903,96;f3;c25;k6;d3," + CustodianName + ";<ETX>"); // Head Name
inPort.WriteLine("<STX>H4;o901,398;f3;c25;k6;d3," + UserName + ";<ETX>"); // Name
inPort.WriteLine("<STX>R<ETX>");
inPort.WriteLine("<STX><ESC>E*<CAN><ETX>");
inPort.WriteLine("<STX><RS>1<US>1<ETB><ETX>");

inPort.Close();
isComplet = true;

}
catch (Exception ex)
{
isComplet = false;
System.Windows.Forms.MessageBox.Show("Error :" + ex.Message, "Warning");
}

return isComplet;
}

public bool PrintInform(string Codes, string Company,string invDate, string CodeType, string CodeDetail)
{
bool isComplet;
try
{
//config port "COM1"
System.IO.Ports.SerialPort inPort = new System.IO.Ports.SerialPort("COM1", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);

if (!inPort.IsOpen)
{
inPort.Open();
}

inPort.WriteLine("<STX><ESC>C1<ETX>");
inPort.WriteLine("<STX><ESC>k<ETX>");
inPort.WriteLine("<STX><SI>L630<ETX>");
inPort.WriteLine("<STX><SI>S30<ETX>");
inPort.WriteLine("<STX><SI>d2<ETX>");
inPort.WriteLine("<STX><SI>h0,0;<ETX>");
inPort.WriteLine("<STX><SI>l8<ETX>");
inPort.WriteLine("<STX><SI>I3<ETX>");
inPort.WriteLine("<STX><SI>F0<ETX>");
inPort.WriteLine("<STX><SI>D0<ETX>");
inPort.WriteLine("<STX><SI>t0<ETX>");
inPort.WriteLine("<STX><SI>W835<ETX>");
inPort.WriteLine("<STX><SI>g1,567<ETX>");
inPort.WriteLine("<STX><ESC>P<ETX>");
inPort.WriteLine("<STX>E*;F*;<ETX>");
inPort.WriteLine("<STX>L1;<ETX>");
inPort.WriteLine("<STX>D0;<ETX>");
inPort.WriteLine("<STX>B4;o1028,96;f3;c6,0;h124;w5;r0;i0;d3," + Codes + ";<ETX>"); // Asset No.BarCode
inPort.WriteLine("<STX>D1;<ETX>");
inPort.WriteLine("<STX>H0;o1187,95;f3;c25;k6;d3," + Company + ";<ETX>"); // Bu
inPort.WriteLine("<STX>H1;o1190,238;f3;c25;k6;d3," + invDate + ";<ETX>"); // Invoice Date
inPort.WriteLine("<STX>H3;o1140,96;f3;c25;k6;d3," + CodeType + ";<ETX>"); // Barcode Value
inPort.WriteLine("<STX>H2;o1092,96;f3;c25;k6;d3," + CodeDetail + ";<ETX>"); // Asset Name
inPort.WriteLine("<STX>R<ETX>");
inPort.WriteLine("<STX><ESC>E*<CAN><ETX>");
inPort.WriteLine("<STX><RS>1<US>1<ETB><ETX>");

inPort.Close();
isComplet = true;

}
catch (Exception ex)
{
isComplet = false;
System.Windows.Forms.MessageBox.Show("Error :"+ex.Message, "Warning");
}

return isComplet;
}

}
}

//////////////////////////////////////////////////////////////////////////

 

mrxc
Posted: Monday, October 27, 2008 8:51:25 AM
Rank: มือเทพ
Groups: Member

Joined: 3/6/2008
Posts: 196
Location: TH

นี้คือ code บางส่วนที่ผมตัดออกมาลองดูครับ ยืนยันว่าผ่านบน XP .Net Framework 2 SP2, 3 SP2, 3.5 SP1, Mono 2.0.1 Windows XP

 

        private void button1_Click(object sender, EventArgs e)
        {
            System.IO.Ports.SerialPort inPort = new System.IO.Ports.SerialPort("COM1", 9600, System.IO.Ports.Parity.None,
                8, System.IO.Ports.StopBits.One);

            if (!inPort.IsOpen)
                inPort.Open();

            MessageBox.Show("Port is Open " + inPort.IsOpen.ToString());
            if (inPort.IsOpen)
                inPort.Close();

            inPort.Dispose();
        }

 

 

ลองตามนี้นะครับ อับเดท Framework หรือลองรันบน Mono ดูครับ

MS .Net Framework 3.5 SP1 http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe

Mono 2.0.1 ftp://ftp.novell.com/pub/mono/archive/2.0.1/windows-installer/1/mono-2.0.1-gtksharp-2.10.4-win32-1.exe

 

C#
Posted: Monday, October 27, 2008 8:37:46 PM
Rank: มือฝึกหัด
Groups: Member

Joined: 10/24/2008
Posts: 6
Location: BKK

ต้องขอบคุณ mrxc มากๆ เลยนะคะ ที่ช่วยดูให้

ตอนนี้เลี่ยงการใช้ Serial Port เป็น การ ส่ง raw data ไปที่ printer  แทนคะ (WritePrinter) เพื่อจะได้ไม่ต้องกังวลในเรื่องของ Port

ขอบคุณมากคะสำหรับทุกๆคำแนะนำ

mrxc
Posted: Tuesday, October 28, 2008 8:38:42 AM
Rank: มือเทพ
Groups: Member

Joined: 3/6/2008
Posts: 196
Location: TH

อ้าว ถอยแล้วเหรอครับ ผมว่าน่าจะลองหลายๆวิธีนะครับ อย่างน้อยเราก็จะได้รู้ว่าปัญหาเองนั้นมาจากจุดไหนแน่

C#
Posted: Tuesday, October 28, 2008 5:53:37 PM
Rank: มือฝึกหัด
Groups: Member

Joined: 10/24/2008
Posts: 6
Location: BKK

อยากทราบอยู่เหมือนกันคะ ว่าสาเหตุของปัญหานี้คืออะไร

แต่พอดีงานเร่งต้องส่งนะคะ เลยต้องหาวิธีอื่นๆ ที่ทำให้ โปรแกรม work ได้และดีกว่าวิธีที่เป็นอยู่

ขอบคุณ คุณ mrxc อีกครั้งค๊า

Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

YAFVision Theme Created by Jaben Cargman (Tiny Gecko)
Powered by Yet Another Forum.net version 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.


Sponsored by