求助!!电脑串口与另台电脑串口通信 ( 积分: 200 )

  • 主题发起人 主题发起人 cui27
  • 开始时间 开始时间
C

cui27

Unregistered / Unconfirmed
GUEST, unregistred user!
一台生化设备的串口接到一台电脑1上.该电脑1上的串口与另台电脑2串口相连.电脑1操作此生化仪器,并发送数据到电脑2上.电脑2负责接收数据.现在用串口调试工具能收到数据要发送char(06)ACK确认符号.可我自己写的不行.我发现根本就没有触发MSComm1Comm事件.我绝得是不是握手协议的问题.望大家帮帮我。我用.net写的.另外我在医院检验科.别的设备都没问题了。就剩下此生化了。
 
一台生化设备的串口接到一台电脑1上.该电脑1上的串口与另台电脑2串口相连.电脑1操作此生化仪器,并发送数据到电脑2上.电脑2负责接收数据.现在用串口调试工具能收到数据要发送char(06)ACK确认符号.可我自己写的不行.我发现根本就没有触发MSComm1Comm事件.我绝得是不是握手协议的问题.望大家帮帮我。我用.net写的.另外我在医院检验科.别的设备都没问题了。就剩下此生化了。
 
问下做IC卡的人应该知道
 
Delphi下的COM编程技术简介
http://www.yesky.com/286/1738286.shtml
 
楼上的看都不看一下就随便乱找个链接。- -!

看看你这是什么...
(组件对象模型(Component Object Model,以下简称COM)
 
可以看看龚建伟的网站
http://www.gjwtech.com/serialcomm.htm
这里有许多串口通信资料
 
现在用串口调试工具能收到数据要发送char(06)ACK确认符号.可我自己写的不行.我发现根本就没有触发MSComm1Comm事件.


我觉得可能是你的原因:既然用串口调试工具能收到数据,即说明些生化设备到电脑之间通信没有问题,没有触发MSComm1Comm事件??到底是没有触发事件还是你的程序处理该生化设备所发送的信息有问题?此种生化设备通信方式是异步方式,你在收到确认信息后可有发送应答信息?
 
piaosiy:你好!
它发送过来char(05)查询.我发char(06),以上是串口工具看到的. 但是我的SComm1Comm事件根本没有触发.SComm1Comm里的代码一句都没有执行.我的按钮执行comm1.output=char(06);,但是SComm1Comm.事件没有执行,就是说.发送过来的char(05),我都没有收到.
 
没用过这个控件,一般用Spcomm或者API自己写,如果你用串口调试工具正常,但是
用MSCOMM控件不正常,一般是属性设置问题,比如
1、设置MSComm控件的属性 NullDiscard=False
2、使用二进制接收,InputMode=ComInputModeBinary
3、还有RThreshold是不是 = 1
 
我的按钮执行comm1.output=char(06)???
你用按钮确认??为什么不在收到确认信息后马上OUTPUT应答?另外问一下你那还有别的设备用异步方式通信吗?
把你写的串口接收该生化设备的处理程序发上来看看.
 
private void comm1_OnComm(object sender, System.EventArgs e)
{
MessageBox.Show("1串口",this.comm1.CommEvent.ToString());
if (this.comm1.CommEvent == 2)
{

char r = ((string)comm1.Input)[0];

if(r==ChangeData.SOH1) //如果有连接请求 05
{
comm1.Output=ChangeData.ACK1.ToString();
str1.Append(r);
txtbox.Text+=r.ToString();


}
else if(r==ChangeData.STX1) //02
{

comm1.Output=ChangeData.ACK1.ToString();
str1.Append(r);
txtbox.Text+=r.ToString();
}
else if(r==ChangeData.ETX1) //结束后处理数据//04
{

comm1.Output=ChangeData.ACK1.ToString();
cdata.ParseData1(str1.ToString(),"comm1");
str1.Remove(0,str1.Length);
}

else
{

str1.Append(r);
txtbox.Text+=r.ToString();

}

}

}
 
piaosiy:
此COMM1设置如下:
comm1.CommPort=1 comm1.Settings="9600,n,7,1";
comm1.InputLen = 1; comm1.Handshaking = HandshakeConstants.comNone ;
comm1.RThreshold=1; //该属性确定当接收缓冲区内字节个数达或超过该值后 就产生代码为ComEventReceive的OnComm事件,设置位0,则不产生OnComm事件。
comm1.PortOpen =true;
comm1.OutBufferCount = 0;
comm1.InBufferCount = 0;
comm1.InputMode=0 //文本接收

别的设备有酶标.尿机.电化学.血常规.都没问题.唯一区别是.这些设备直接和电脑连.
而生化则是.从电脑1的串口接电脑2串口.
 
comm1.Output=ChangeData.ACK1.ToString();
ChangeData.ACK1.ToString();这个是什么意思? 麻烦解释一下,转化成字符?.net没用过不太明白.
str1.Append(r);
txtbox.Text+=r.ToString();
机器发送过来的确认信息无保留的必要,如果没有别的用处的话.
电脑1可有转发程序?
你的串口调试工具也是在电脑2上面运行的吗?
有点奇怪生化设备为什么要用两台电脑````一台不是更好么
 
最大的可能:串口没打开???
 
你的程序是不是该安到电脑1上,再做程序传数据到电脑2上。
 
对很有可能串口没打开,但comm1.PortOpen 为true啊.是这样,这台生化仪器有套自带软件在电脑1上控制此生化,并从此生化的网口(是网口)传数据到电脑1上.现在该医院上LIS系统,但电脑1上的软件不能换,只能在电脑2上接收.在上LIS之前有套单机版软件在电脑2上工作,工作模式就是接收电脑1上数据(从串口),而且在生化仪器操作的过程中就能接收到.现在上LIS了,就要把单机版换掉,但工作方式和单机版一样.可怎么都收不到数据.
 
后退
顶部