地磅参数:
波特率:300/600/900/1200/2400/4800可选
数据位:ASII码,第一位起始位,中间8位数据位,最后一位停止位。每组10位
串行通讯的连续发送:每帧数据共有8组组成。数据传送先低位后高位。每组数据间有分隔符=.如当前毛重是70.15连续发送51.0700=51.0700=.....
我用下面的代码操作,却读不到任何数据。
string returnStr = "";
SerialPort myComPort;
using (myComPort = new SerialPort("com1"))
{
myComPort.BaudRate = 4800;
myComPort.DataBits = 8;
myComPort.StopBits = StopBits.One;
myComPort.Parity = Parity.None;
myComPort.ReadTimeout = 1000;
myComPort.Open();
try
{
//数据读取
string str = myComPort.ReadLine();
//截取字符串
char[] arrayone = str.Trim().Substring(1, 5).ToCharArray();
//字符串反转
char[] array = new char[5];
for (int i = 0; i < 5; i++)
{
array[i] = array[4 - i];
}
returnStr = array.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
txtweight.Text = returnStr;
}
请各位大虾帮助。
波特率:300/600/900/1200/2400/4800可选
数据位:ASII码,第一位起始位,中间8位数据位,最后一位停止位。每组10位
串行通讯的连续发送:每帧数据共有8组组成。数据传送先低位后高位。每组数据间有分隔符=.如当前毛重是70.15连续发送51.0700=51.0700=.....
我用下面的代码操作,却读不到任何数据。
string returnStr = "";
SerialPort myComPort;
using (myComPort = new SerialPort("com1"))
{
myComPort.BaudRate = 4800;
myComPort.DataBits = 8;
myComPort.StopBits = StopBits.One;
myComPort.Parity = Parity.None;
myComPort.ReadTimeout = 1000;
myComPort.Open();
try
{
//数据读取
string str = myComPort.ReadLine();
//截取字符串
char[] arrayone = str.Trim().Substring(1, 5).ToCharArray();
//字符串反转
char[] array = new char[5];
for (int i = 0; i < 5; i++)
{
array[i] = array[4 - i];
}
returnStr = array.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
txtweight.Text = returnStr;
}
请各位大虾帮助。
解决方案 »
- 数组赋值问题,请高人指点
- 在winform程序中如何控制tabControl里的标签页是否让点击?
- 异形窗口拖动拖尾现象很严重!
- C# WINFORM 问题
- 安装项目类型(.vcproj)的应用程序,提示程序为安装
- 怎样输入main(string[] args)中的参数
- 关于字符串比较的问题
- c#怎样监控控件的动作
- 怎么把.TXT文件里的数据导入到ORACLE数据库里啊,各位老大,急啊!
- c#中怎么将图标导入到项目中?
- 请问下C#如何实现ADSL重拨?网上有个代码我试过好像不行,我的MODEM是开机自动拨号的,谢谢~
- C# 如何用鼠标拖出虚线框,释放鼠标虚框消失,就和在windows桌面上拖动鼠标一样
{
protected SerialPort commPort = new SerialPort();
private readonly int int_Loc = 0; private readonly StringBuilder strReceive = new StringBuilder(); // 接收到数据的缓冲区 #region CommPort 构造函数 /// <summary>
/// CommPort 构造函数
/// </summary>
public CommPort()
{
// 初始化串口
commPort.BaudRate = 1200;
commPort.Parity = Parity.Even;
commPort.Encoding = Encoding.UTF8; // 串口的数据接收事件
commPort.DataReceived += commPort_DataReceived;
} #endregion #region commPort_DataReceived 数据抵达 /// <summary>
/// commPort_DataReceived 数据抵达
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void commPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
Base.int_Cmd_States[int_Loc] = (Base.int_Cmd_States[int_Loc] / 20) * 20 + 1; #region 接收数据 // 接收缓冲区中数据的字节数
int int_Len = commPort.BytesToRead; // 接收数据
byte[] bytes = new byte[int_Len];
commPort.Read(bytes, 0, int_Len); #endregion #region 将数据存入缓冲 // 将数据存入字符串缓冲区中
for (int i = 0; i < bytes.Length; i++)
{
strReceive.Append(bytes[i] + " ");
} #endregion }
catch (Exception ex)
{
frmMain.WriteSysMsg(ex.StackTrace, "[CommPort] 数据接收不成功.", ex.Message);
}
} #endregion #region List 获取串口的列表 /// <summary>
/// List 获取串口的列表
/// </summary>
/// <returns></returns>
public static ArrayList List()
{
try
{
ArrayList al = new ArrayList(); ManagementClass mc = new ManagementClass("Win32_SerialPort");
ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc)
{
al.Add(mo["DeviceID"].ToString());
} return al;
}
catch (Exception ex)
{
MessageBox.Show("程序发生错误 \n\n错误描述: [严重错误]\n" +
"列出计算机上所有串口时出错. " + "\n\n 错误原因: \n" + ex.StackTrace + "\n\n错误反馈: \n" + ex.Message);
return null;
}
} #endregion #region IsOpen 测试串口是否已经打开 /// <summary>
/// 测试串口是否已经打开
/// </summary>
/// <returns></returns>
public bool IsOpen()
{
try
{
if (commPort == null) return false; return commPort.IsOpen;
}
catch (Exception ex)
{
} return false;
} #endregion #region Open 打开串口 /// <summary>
/// 打开串口
/// </summary>
/// <returns></returns>
public bool Open()
{
try
{
if (!commPort.IsOpen)
{
commPort.Open();
} return true;
}
catch (Exception ex)
{
return false;
}
} #endregion #region Close 关闭串口 /// <summary>
/// 关闭串口
/// </summary>
/// <returns></returns>
public bool Close()
{
try
{
if (commPort.IsOpen)
{
commPort.Close();
} return true;
}
catch (Exception ex)
{
return false;
}
} #endregion #region Write 往串口中写数据 /// <summary>
/// 往串口中写数据
/// </summary>
public void Write(byte[] bytes)
{
try
{
if (commPort.IsOpen)
{
commPort.Write(bytes, 0, bytes.Length);
}
else
{
Open();
commPort.Write(bytes, 0, bytes.Length);
}
}
catch (Exception ex)
{
}
} #endregion
}
还是用接收byte流吧,不要接收转化字符串
SerialPort myComPort;
using (myComPort = new SerialPort("com1"))
{
myComPort.BaudRate = 9600;
myComPort.DataBits = 8;
myComPort.StopBits = StopBits.One;
myComPort.Parity = Parity.None;
myComPort.ReadTimeout = 1000;
myComPort.Open();
try
{
// 接收缓冲区中数据的字节数
int int_Len = myComPort.BytesToRead;
MessageBox.Show(int_Len.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
第一次读出缓冲区中字节数为8,但是后面就每次都为0了,救命啊
using System.IO.Ports;
using System.Text;internal class CommPort
{
protected SerialPort commPort = new SerialPort(); private readonly StringBuilder strReceive = new StringBuilder(); // 接收到数据的缓冲区 #region CommPort 构造函数 /// <summary>
/// CommPort 构造函数
/// </summary>
public CommPort()
{
// 初始化串口
commPort.BaudRate = 1200;
commPort.Parity = Parity.Even;
commPort.Encoding = Encoding.UTF8; // 串口的数据接收事件
commPort.DataReceived += commPort_DataReceived;
} #endregion #region commPort_DataReceived 数据抵达 /// <summary>
/// commPort_DataReceived 数据抵达
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void commPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
#region 接收数据 // 接收缓冲区中数据的字节数
int int_Len = commPort.BytesToRead; // 接收数据
byte[] bytes = new byte[int_Len];
commPort.Read(bytes, 0, int_Len); #endregion #region 将数据存入缓冲 // 将数据存入字符串缓冲区中
for (int i = 0; i < bytes.Length; i++)
{
strReceive.Append(bytes[i] + " ");
} #endregion }
catch (Exception ex)
{
}
} #endregion #region IsOpen 测试串口是否已经打开 /// <summary>
/// 测试串口是否已经打开
/// </summary>
/// <returns></returns>
public bool IsOpen()
{
try
{
if (commPort == null) return false; return commPort.IsOpen;
}
catch (Exception ex)
{
} return false;
} #endregion #region Open 打开串口 /// <summary>
/// 打开串口
/// </summary>
/// <returns></returns>
public bool Open()
{
try
{
if (!commPort.IsOpen)
{
commPort.Open();
} return true;
}
catch (Exception ex)
{
return false;
}
} #endregion #region Close 关闭串口 /// <summary>
/// 关闭串口
/// </summary>
/// <returns></returns>
public bool Close()
{
try
{
if (commPort.IsOpen)
{
commPort.Close();
} return true;
}
catch (Exception ex)
{
return false;
}
} #endregion #region Write 往串口中写数据 /// <summary>
/// 往串口中写数据
/// </summary>
public void Write(byte[] bytes)
{
try
{
if (commPort.IsOpen)
{
commPort.Write(bytes, 0, bytes.Length);
}
else
{
Open();
commPort.Write(bytes, 0, bytes.Length);
}
}
catch (Exception ex)
{
}
} #endregion
}
void commPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{ }