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就此關(guān)閉,如果再發(fā)送消息,就會造成Serial Port失去響應(yīng),只能通過重新啟動計算機才能恢復。

          后來上網(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;

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

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

          導航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 五寨县| 伊春市| 青州市| 陵川县| 华池县| 铁岭县| 潜江市| 柏乡县| 兴隆县| 辽中县| 沁阳市| 东乡县| 荣成市| 子长县| 武胜县| 锦屏县| 洪雅县| 高唐县| 杭州市| 玉田县| 若尔盖县| 驻马店市| 常州市| 尼玛县| 绍兴县| 宣汉县| 连云港市| 板桥市| 赣州市| 临夏市| 神池县| 綦江县| 西贡区| 阳城县| 大田县| 海门市| 嘉禾县| 安仁县| 衡东县| 建湖县| 镇江市|