读书人

急救!c#串口编程!解决方案

发布时间: 2012-04-08 14:38:30 作者: rapoo

急救!!!c#串口编程!!!!!!!!!!!!!!!!!!!!!!!!
我之前是做web开发的对这个一无所知.具体要求如下:
我们的客户是一家食品供应商,他的生产线上要装一个软件.软件用来放出号码(例如2009/04/22 001A),喷码机接收这组数字,然后喷码, 每12个喷好码产品装箱.然后通过传感器,打印机条码打印条码.

哪位大虾能给我点思路.还有最好给我程序与S8喷码机通讯的程序例子.(串口是RS232的,打印机都是RS23的NOVA的)


小弟刚刚接触这个一窍不通阿!!!分我可以加到1000!!!拜托了!!!!!!!

[解决办法]
顶下,不懂
[解决办法]
帮顶..
[解决办法]
预知答案请参考楼下
[解决办法]
同样不懂。
[解决办法]
串口编程用自带的“组件->SerialPort”,可直接读取串口。

每发出12个号码,就让打印机打印一次。
[解决办法]
只用过条码机,没用过喷码机,帮顶
[解决办法]
例子挺多的,原来用vs2003的时候关于串口编程用的是vb6中的MSActive控件,通过引用得到。现在方便多了。例子网上一打一打的,无非就是波特率、校验位、串口号什么的,用于和系统进行通讯。
[解决办法]

[code=C#]
VS.NET2005中SerialPort控件操作详解(C#)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO.Ports;

namespace SerialPorts

{

public partial class frm_Main : Form

{

#region Public Enumerations

public enum DataMode { Text, Hex }

public enum LogMsgType { Incoming, Outgoing, Normal, Warning, Error };

#endregion

private Color[] LogMsgTypeColor = { Color.Orange, Color.Green, Color.Black, Color.Blue, Color.Red };

//禁用和启用程序中各控件的状态

private void EnableControls()

{

// 基于串口的打开与否,设置控件状态

gbPortSettings.Enabled = !ComPort.IsOpen;

btns.Enabled = btnstop.Enabled = txtSendData.Enabled = btnSend.Enabled = ComPort.IsOpen;

if (ComPort.IsOpen) btnOpenPort.Text = "关闭串口";

else btnOpenPort.Text = "打开串口";

}

//初始化组件的数据,为串口提供相关参数

private void InitializeControlValues()

{

cmbParity.Items.Clear(); cmbParity.Items.AddRange(Enum.GetNames(typeof(Parity)));

cmbStopBits.Items.Clear(); cmbStopBits.Items.AddRange(Enum.GetNames(typeof(StopBits)));

cmbPortName.Items.Clear();

foreach (string s in SerialPort.GetPortNames())

cmbPortName.Items.Add(s);

cmbPortName.Text = cmbPortName.Items[0].ToString();

cmbParity.Text = cmbParity.Items[0].ToString();

cmbStopBits.Text = cmbStopBits.Items[0].ToString();

cmbDataBits.Text = cmbDataBits.Items[0].ToString();

cmbParity.Text = cmbParity.Items[0].ToString();

cmbBaudRate.Text = cmbBaudRate.Items[0].ToString();

EnableControls();

}

//十六进制转换字节数组

private byte[] HexStringToByteArray(string s)

{

s = s.Replace(" ", "");

byte[] buffer = new byte[s.Length / 2];

for (int i = 0; i < s.Length; i += 2)

buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);

return buffer;

}

//字节数组转换十六进制



private string ByteArrayToHexString(byte[] data)

{

StringBuilder sb = new StringBuilder(data.Length * 3);

foreach (byte b in data)

sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));

return sb.ToString().ToUpper();

}

//显示数据日志

private void Log(LogMsgType msgtype, string msg)

{

rtfTerminal.Invoke(new EventHandler(delegate

{

rtfTerminal.SelectedText = string.Empty;

rtfTerminal.SelectionFont = new Font(rtfTerminal.SelectionFont, FontStyle.Bold);

rtfTerminal.SelectionColor = LogMsgTypeColor[(int)msgtype];

rtfTerminal.AppendText(msg);

rtfTerminal.ScrollToCaret();

}));

}

//串口发送方式

#region Local Properties

private DataMode CurrentDataMode

{

get

{

if (rbHex.Checked) return DataMode.Hex;

else return DataMode.Text;

}

set

{

if (value == DataMode.Text) rbText.Checked = true;

else rbHex.Checked = true;

}

}

#endregion

[解决办法]
帮顶,收藏。
[解决办法]
串口的通讯速率有时候也有影响,综合各种延迟
[解决办法]
up
[解决办法]
up!
[解决办法]
up
[解决办法]
怎么最近两天没人回帖了呀?
是不是楼主有了答案了不需要了啊?
如果楼主有答案发出来共享咯!
小弟我也在关注中。。。。。

读书人网 >C#

热点推荐