让知识更加联贯 让技术走进生活
我的博客 我的程序 我的网络
------郑紫至
E-mail:zhengzizhi@yahoo.com.cn
地磅称量系统
60.
打开端口
private
void FrmWtBill_Load(object sender,
EventArgs e)
{
db = new
WtBillMappingDataContext();
var WtBills =
from a in db.WtBills
orderby a.BillNo
select a;
BindData();
this.bindingSource1.DataSource = WtBills;
//InitColumn()放在提供数据源控件之后初始化这样每列次序会按照我们预期的顺序排列。
//不使用编程方式来实现每列的属性也可以,在dataGridView1上直接编辑每列的属性。
InitColumn();
//如果COM口关闭了,就打开它
if (this.serialPort1.IsOpen ==
false) { this.serialPort1.Open(); }
}
关闭端口
private
void FrmWtBill_FormClosed(object sender,
FormClosedEventArgs e)
{
//本窗口关闭后连同COM口一起关闭
if (this.serialPort1.IsOpen !=
false) { this.serialPort1.Close(); }
}
注释掉测试代码
private
void timer1_Tick(object sender,
EventArgs e)
{
//Random rdm = new Random();
//this.lcd1.LCDShowStringValue = rdm.Next(0,999999).ToString();
//this.lcd1.LCDShowStringValue = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
//this.labelUnit.Text = string.Empty;//隐藏 KG 字符
}
接收COM口数据并在LCD控件上显示出来
private
void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
//等待100毫秒(0.1秒)接收数据,这个数据不是随便挑选的
//对于不同的硬件设备和不同配置的电脑,设置太大或者太小
//可能没有数据显示在LCD上,可能显示的数据是正确结果后面
//几位数据也可能是正确结果前面数据的几位,我以前在现场
//调试的时候试过,这个数据大概在80~120之间随便挑个数据
//就能正常接收串口发过来的数据
System.Threading.Thread.Sleep(100);
//我在超级终端中数了一下一次完整的数据发送一共有16位
//为了确定有没有特殊的不可见字符,我稍微把下面这个字节
//数组定义的大了一点点,选择了一个20,然后调试程序过程中
//发现后面有一个空格字符,故把这种型号的设备定义为17位的
byte[] SavingBytesFromComPort =
new byte[17];
this.serialPort1.Read(SavingBytesFromComPort, 0, 17);
//定义一个去掉字节后面7位和前4位的字符数组,只要截取需要重量数据
char[] BytesToChars =
new char[SavingBytesFromComPort.Length-7-4];
//从序号4、5、6、7、8、9的字节开始截取,并转换成字符
for(int i=4; i< SavingBytesFromComPort.Length-7; i++)
{
BytesToChars[i] =
Convert.ToChar(SavingBytesFromComPort[i]);
}
//最终将字符数组转换字符串,并将结果在LCD控件上显示出来。
string ShowResult =
new string(BytesToChars);
this.lcd1.LCDShowStringValue = ShowResult;
}