gdufo

           

          SPComm的一點小訣竅 spcomm的問題導致數(shù)據(jù)丟失

          SPComm的一點小訣竅 spcomm的問題導致數(shù)據(jù)丟失  

          2010-01-08 09:50:51|  分類: 串口 |字號 訂閱

          最近幾天完成了BiasDAC的程序編寫。調(diào)試的過程還算比較順利,除了幾個有點bt的小問題。其中一個困擾了我兩三天的時間,今天上午終于將其解決。

          由于BiasDAC是用RS232 Serial Port通信的,延用之前的程序,使用了Delphi的SPComm控件。在之前的使用中,SPComm控件一直工作正常,使用的是一般的string進行消息的傳遞。

          而BiasDAC由于通信協(xié)議的限制,消息的發(fā)送使用的是hex方式,會用到從0x00到0xFF所有的這些字符。在調(diào)試中發(fā)現(xiàn),發(fā)送0x11和0x13之后,SPComm的工作就會不正常。

          首先是0x11發(fā)送之后,返回的0x11消息會被忽略;其次0x13發(fā)送之后,只能返回很有限的消息,而且似乎Serial Port就此關閉,如果再發(fā)送消息,就會造成Serial Port失去響應,只能通過重新啟動計算機才能恢復。

          后來上網(wǎng)上查詢,原來不能正常處理0x11和0x13的問題早就存在,原因是SPComm空間中兩個屬性的存在。

          OutX_XonXOffFlow/InX_XonXoffFlow:這個屬性是指進行發(fā)送/接收時的軟件握手標志,兩個握手信號之間的數(shù)據(jù)被認為是通訊數(shù)據(jù),收到握手信號后,通訊就中止了。

          FOutx_XonXoffFlow := True;
          FInx_XonXoffFlow := True;

          默認的初始化中,這兩個屬性是默認開啟的。

          XOffChar/XOnChar:這是指握手的字節(jié),默認的初始中,有

          FXonChar := chr($11);
          FXoffChar := chr($13);

          至此,真相大白。0x11,0x13被占用為通訊握手信號,自然不會得到正確的處理。

          問題找到了,解決也很容易。只需要在Comm的初始化中,自己定義

          Comm.Inx_XonXoffFlow:=False;
          Comm.Outx_XonXoffFlow:=False;

          關閉軟件握手功能即可。在一般通訊中,硬件已經(jīng)具備了握手功能,所以也不會影響到正常的Comm通訊。

          posted on 2013-11-15 11:13 gdufo 閱讀(682) 評論(0)  編輯  收藏 所屬分類: Database (oracle, sqlser,MYSQL)

          導航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 平山县| 灵宝市| 抚松县| 黄大仙区| 崇阳县| 墨玉县| 金平| 南郑县| 澳门| 灌阳县| 沧源| 通城县| 杨浦区| 神池县| 亚东县| 上饶县| 沙河市| 纳雍县| 德庆县| 阳泉市| 西充县| 棋牌| 蚌埠市| 大荔县| 清苑县| 巫溪县| 运城市| 龙门县| 周口市| 吴旗县| 永昌县| 酉阳| 象山县| 获嘉县| 东平县| 丹东市| 二连浩特市| 昌黎县| 太保市| 八宿县| 天长市|