【发布时间】:2014-08-28 18:55:29
【问题描述】:
我正在尝试通过 RS-232 电缆(串行)将 ASCII 字符发送到 VideoJet Excel 170i 打印机
当我使用测试程序时,我没有问题得到打印机的响应,我可以改变打印机的状态。
这是我制作的代码
public partial class Form1 : Form
{
private SerialPort port = new SerialPort("COM1");
private delegate void SetTextDeleg(string data);
public Form1()
{
InitializeComponent();
}
private void addtoText(string text)
{
this.richTextBox1.Text = this.richTextBox1.Text + "\n" + text;
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
port.BaudRate = 9600;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.DataBits = 8;
port.Handshake = Handshake.None;
port.ReadTimeout = 2000;
port.WriteTimeout = 500;
port.DtrEnable = true;
port.RtsEnable = true;
port.Open();
port.DataReceived += DataReceivedHandler;
addtoText("Port is ready");
}
catch (Exception ex)
{
//Console.WriteLine("Error opening my port: {0}", ex.Message);
addtoText("Error opening my port: {0}" + ex.Message);
}
}
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
System.Threading.Thread.Sleep(500);
string indata = sp.ReadExisting();
this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata });
}
private void DisplayToUI(string displayData)
{
addtoText(displayData);
}
private void button1_Click(object sender, EventArgs e)
{
port.Write(tbxAscii.Text);
}
private void Form1_Leave(object sender, EventArgs e)
{
port.Close();
}
}
我需要将 ASCII 字符发送到打印机,例如
[1B][01][09]
将打印机设置为打印模式。
打印机应该响应,我没有得到响应,并且打印机没有改变它的状态。
我编写了一个程序来测试打印机的串行连接,我可以看到所有设置都正常(波特率、奇偶校验...端口),并且确实在端口 COM1 上。
所以我认为我的 port.write 没有向打印机发送任何信息......或者我正在发送损坏信息并且我没有读取打印机的响应。
【问题讨论】:
标签: c# io serial-port