在工程的主对话框头文件中,格式如下:
afx_msg LONG OnComm(WPARAM ch,LPARAM port);
在工程的主对话框的CPP文件中,格式如下:
BEGIN_MESSAGE_MAP(CMy20040889SerialPortTestDlg, CDialog)
//{{AFX_MSG_MAP(CMy20040889SerialPortTestDlg)
ON_MESSAGE(WM_COMM_RXCHAR,OnComm) ...
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后在CPP中添加消息处理函数,本例中为OnComm。 例如:
LONG CTestDlg::OnComm(WPARAM ch, LPARAM port) {
m_strEditReceiveMsg += ch;
UpdateData(FALSE); return 0; }
//m_strEditReceiveMsg 为EDIT控件(接收框)的变量。
//下面的m_strEditSendMsg同样处理。
3.实现串口的初始化,打开/关闭串口按钮的响应函数,最后是发送信息按钮的函数实现。
void CTestDlg::OnButtonOpen() { int nPort=m_ctrlComboComPort.GetCurSel()+1;
if(m_SerialPort.InitPort(this, nPort, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512)) {
m_SerialPort.StartMonitoring();
m_bSerialPortOpened=TRUE; } else {
AfxMessageBox(\没有发现此串口或被占用\
m_bSerialPortOpened=FALSE; }
GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened); }
void CTestDlg::OnButtonClose() {
m_SerialPort.ClosePort();
m_bSerialPortOpened=FALSE;
GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened); }
void CTestDlg::OnButtonSend() {
if(!m_bSerialPortOpened) return; UpdateData(TRUE); //读入编辑框中的数据
m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);//发送数据 }
传感器(c#2.0)serialPort串口通讯 2007年10月12日 星期五 15:44 using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data;
using System.Data.SqlClient; using System.Drawing; using System.Text;
using System.Windows.Forms; using System.Configuration; using System.IO;
using System.IO.Ports;
namespace WindowsApplication2 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent(); }
int iCount; int numbers; byte rlenth; bool bRLenth; int bRStart; bool bRParam; byte Rchk; int LParam; byte[] RParam; bool brcmd; byte RCmd; bool bRchk; bool bfinish;
private void Form1_Load(object sender, EventArgs e) {
//Form1 Form1 = new Form1(); try {
if (this.serialPort1.IsOpen) {
serialPort1.Close(); } else {
serialPort1.PortName = \//选择串口COM1
serialPort1.BaudRate = 9600; //设置通信口参数
serialPort1.DataBits = 8; //数据位
serialPort1.Parity = System.IO.Ports.Parity.None;//校验位 无校验
serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位1位
serialPort1.ReadBufferSize = 1024; //接收缓冲区大小
serialPort1.WriteBufferSize = 1024; //发送缓冲区大小 serialPort1.Open();
serialPort1.ReadExisting(); //设置Input从接收缓冲读取全部数据
serialPort1.ReceivedBytesThreshold = 1; //设置引发OnComm事件的字节长度
serialPort1.DiscardInBuffer() ; //清除接收缓冲区
serialPort1.DiscardOutBuffer() ; //清除发送缓冲区
}
string connstr =
System.Configuration.ConfigurationManager.AppSettings[\ring\
SqlConnection conn = new SqlConnection(connstr);
时间,price,card from test01\ SqlDataAdapter(sql, conn);
conn.Open();
string sql = \ name as SqlDataAdapter da = new DataSet ds = new DataSet(); da.Fill(ds, \
ultraChart1.DataSource = ds.Tables[0].DefaultView;
dataGridView1.DataSource = ds.Tables[0].DefaultView;
ultraChart1.Axis.Y.LogBase = 1000; ultraChart1.Axis.Y.RangeMax = 30000; ultraChart1.Axis.Y.RangeMin = 0; Application.EnableVisualStyles(); Application.DoEvents(); }
catch (Exception ex) {
MessageBox.Show(\ageBoxButtons.OK,MessageBoxIcon.Error); }
//ultraChart1.
}
///
/// 取前后存储器两个值对比,应付电脑异常退出 ///
/// ///
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { try {
//Byte[] dataread = new Byte[8] ;
//serialPort1.Read(dataread, 0, dataread.Length);
//int productline=dataread[0]; //接口号