gdufo

           

          SPComm的一點小訣竅 spcomm的問題導致數據丟失

          SPComm的一點小訣竅 spcomm的問題導致數據丟失  

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

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

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

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

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

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

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

          FOutx_XonXoffFlow := True;
          FInx_XonXoffFlow := True;

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

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

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

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

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

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

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

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

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 遵化市| 安宁市| 丰都县| 辰溪县| 富川| 顺平县| 高邑县| 玉屏| 鄂伦春自治旗| 辽中县| 志丹县| 勃利县| 太康县| 上杭县| 白山市| 从江县| 新晃| 鸡泽县| 册亨县| 怀远县| 苏尼特右旗| 宜丰县| 壶关县| 乐山市| 伊金霍洛旗| 邢台县| 南宁市| 房山区| 蓬莱市| 花莲市| 娄底市| 博罗县| 吴旗县| 定安县| 于田县| 怀来县| 五河县| 隆化县| 新巴尔虎右旗| 穆棱市| 新宾|