当前位置:编程学习 > C#/ASP.NET >>

在C#中怎么通过mscomm读取地磅的数值

设置完波特率等信息打开端口之后,是发送指令到axMSComm1.Output,就能在Input中获取了吗?为什么axMSComm1.OnComm += new EventHandler(axMSComm1_OnComm)事件没被触发呢?急呀,Q:514863585
代码:
private void btPort_Click(object sender, System.EventArgs e)
{
if (axMSComm1.PortOpen)
axMSComm1.PortOpen = false;//初始化

axMSComm1.InputLen = 0; //清除接收缓冲区
axMSComm1.CommPort = 2;//设置端口号为COM1
axMSComm1.RThreshold = 1;   //每接收一个字符则激发OnComm()事件
axMSComm1.Settings = "9600,n,8,1"; //端口设置
axMSComm1.DTREnable = true; //置DTR有效
axMSComm1.RTSEnable = true; //置RTS有效
axMSComm1.Handshaking = MSCommLib.HandshakeConstants.comNone;
axMSComm1.RThreshold = 1;
//axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeText; //文本
axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;   //二进制
axMSComm1.NullDiscard = false;
axMSComm1.OnComm += new EventHandler(axMSComm1_OnComm_1); //执行一个OnComm事件
axMSComm1.PortOpen = true; //打开串口
PortEnable = true;
}

private void axMSComm1_OnComm_1(object sender, EventArgs e)
{
try
{
MessageBox.Show("test");
string strIn = "";
byte[] bytIn;
object objIn;
axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;
objIn = axMSComm1.Input; //这里注意axMSComm1.Input返回的是一个object的 
bytIn = (byte[])objIn;   

byte[] ascda = System.Text.Encoding.ASCII.GetBytes(System.Text.Encoding.ASCII.GetString(bytIn));
//MessageBox.Show(Convert.ToString(ascda.Length), "ReceivedLength");

strIn = "";
strIn += System.Text.Encoding.ASCII.GetString(bytIn);
this.txtRetMsg.Text += strIn;

}
catch (Exception ex)
{
throw ex;
}
} --------------------编程问答-------------------- private void btSend_Click(object sender, System.EventArgs e)
{

string outbuf="";
int XorD;//8位异或结果寄存
int XorDH;//高4寄存
int XorDL;//低4寄存
outbuf =  Convert.ToChar(2)+"A"; //地址设为A 
outbuf = outbuf + "B";//读毛重 
//求异或校验码 
XorD = 2 ^ Convert.ToInt32((char)('A'))^ Convert.ToInt32((char)('B')) ;//取异或结果 
XorDH = (XorD & 240) / 16 ;//取高4位 
XorDL = XorD & 15 ;//取高4位   
//生成高4位校验码 
if (XorDH <= 9) 
{
XorDH = XorDH + 0x30 ;
} else{
XorDH = XorDH + 0x37; 
}  
//高4校验码加入指令队列. 
outbuf = outbuf + Convert.ToChar(XorDH); //生成低4位校验码 
if(XorDL <= 9)
{  
XorDL = XorDL + 0x30 ;
}else{
XorDL = XorDL + 0x37;//低4校验码加入指令队列. 
}
outbuf = outbuf + Convert.ToChar(XorDL);//加入结束符 
outbuf = outbuf + Convert.ToChar(3);
//MessageBox.Show(outbuf);

//string msg = txtSendMsg.Text.Replace("\r\n", "\n");
// byte[] data = Encoding.ASCII.GetBytes(outbuf);
axMSComm1.Output = (outbuf);//向缓冲区写入数据

} --------------------编程问答-------------------- 我也想知道楼主教教我
--------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,