在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#