C#读取电子称串口数据,及时显示在TextBox控件

QSR_Kimij 2016-09-15 10:47:28
公司要求将电子称串口数据与电脑串口相连接,实现数据的即时通讯,其主要用来称产品,然后计算出相应个数。以下是我写的代码,基本都是参照网上高人写的。
但是就是不能实现这个自动读取电脑称仪表数据的功能,总是显示串口数据读取为空。以下是代码。
哪位高人能指点一下,本人感激万分
private void Form2_Load(object sender, EventArgs e)
{
InitPort();
}
private void InitPort()
{
com.BaudRate = 9600;
com.PortName = "COM4";
com.DataBits = 8;
com.Parity = Parity.None;
com.StopBits = StopBits.One;
com.WriteTimeout = 3000;
com.ReadTimeout = 3000;
com.ReceivedBytesThreshold = 1;
com.DtrEnable = true;
com.RtsEnable = true;
com.DataReceived += new SerialDataReceivedEventHandler(com_DataReceived);
if (!com.IsOpen)
{
com.Open();
}
else
{
MessageBox.Show("Please open relative port");
return;
}
}

private void com_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

try
{
if (!com.IsOpen)
{
com.Open();
}
com.ReadTimeout = 500;
Thread.Sleep(500);
string res = "";
byte[] buffer = new byte[com.BytesToRead];
// MessageBox.Show(buffer.Length.ToString());
com.Read(buffer, 0, buffer.Length);
res = System.Text.Encoding.ASCII.GetString(buffer);
if (res == "")
{
MessageBox.Show("串口读取数据为空,参数设置是否正确!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void sendDataRequest()
{
byte[] arrByte = new byte[2];
//发送命令 1BH+70H 与电子称通讯,读取电子称数据,16进制
arrByte[0] = Convert.ToByte(0x1B);
arrByte[1] = 0x70;
com.Write(arrByte, 0, 2);
byte[] buffer = new byte[com.BytesToRead];
}
...全文
2030 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Benjay77 2017-08-07
  • 打赏
  • 举报
回复
一般电子秤都有数据交换的说明 照着做就好了
nry19871012 2017-08-06
  • 打赏
  • 举报
回复
百度一个串口调试助手 波特率,数据位,奇偶校验位,停止位看电子称文档一定要正确。
liu_huang_shu 2017-08-06
  • 打赏
  • 举报
回复
电子秤是不会接收数据的,只会发送
QSR_Kimij 2016-09-26
  • 打赏
  • 举报
回复
我提交了,数据交换的格式,但是我写的代码总是显示'写入超时'',下面贴出代码,望高手指点迷津.谢谢 private void writeCommandToScale() { string cmd = "S"+""+"\r\n"; if (sp.IsOpen) { //try //{ byte[] byteData = System.Text.Encoding.ASCII.GetBytes(cmd); sp.Write(byteData, 0, byteData.Length); //报错,写入超时 //} //catch //{ // MessageBox.Show("串口数据发送失败!"); //} } }
QSR_Kimij 2016-09-26
  • 打赏
  • 举报
回复
QSR_Kimij 2016-09-26
  • 打赏
  • 举报
回复
多谢各位提醒.电子称的数据已经可以获取,但这些数据都不是稳定数据.之前的问题就是称有问题,换了称就OK了.
现在的问题是,我想向电子称发送一条指令,然后电子称发送数据给到指定的文本框中.
泡泡龙 2016-09-22
  • 打赏
  • 举报
回复
先检查串口有没有数据,再检查串口波特率之类的参数是否正确。 剩下的就是串口控件对不对了
兵工厂三剑客 2016-09-18
  • 打赏
  • 举报
回复
首先你的代码写得就很有问题。 9600,N,8,1只是串口默认的,你能保证电子称的串口速率是9600倒可以。 你的这个地方 if (res == "") { MessageBox.Show("串口读取数据为空,参数设置是否正确!"); } 如果一直show的话,说明串口通信是正常的。你在代码中检查串口参数设置是否正确。 如果还是不行,看看api函数或者上厂家官网看看有没有相关Demo。
mjp1234airen4385 2016-09-18
  • 打赏
  • 举报
回复
现找到电子秤说明书,使用串口调试助手,按照说明书的参数,看看能不能获得称重数据。
溪水西流 2016-09-18
  • 打赏
  • 举报
回复
com.DtrEnable = true; com.RtsEnable = true; Timeout 参数现去掉看看, 从你的现象看应该是 Timeout 事件
ok-go 2016-09-17
  • 打赏
  • 举报
回复
主要是看电子秤抛出来的数据, 如果电子秤都没有往串口抛出数据,你当然获取不到,像楼上说的 先用第三方软件 测试看有没有获取到数据 ,如果获取到了,再来查看API 检查 代码
xian_wwq 2016-09-16
  • 打赏
  • 举报
回复
首先得找电子秤的api说明, 串口通讯,初始参数很重要,可以先借助第三方软件来 验证发包、收包是否正常 VirtualSerialPortDriver可以试试

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧