音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

Modbus PC機軟件難題:串口RTS定時無法精確控制

作者:ztb 欄目:通信技術
Modbus PC機軟件難題:串口RTS定時無法精確控制
我是使用VB編程的新手,用了MsComm控件也試驗了PComm控件但是對于時間的控制都低于10mS.而RTS用于RS485的方向控制不能準確定時就會導致封閉下位機回答的數(shù)據(jù).那位有好辦法望不吝賜教!

* - 本貼最后修改時間:2007-3-23 10:06:43 修改者:ztb

2樓: >>參與討論
chunyang
不能用RTS做方向控制
外接232-485轉換器就可以了,自己做的話用個MCU實現(xiàn),也極簡單,PC與MCU交互,MCU再控制485即可。

3樓: >>參與討論
ztb
難道就沒有直接控制的方法了?
謝謝您的回答.我也曾經(jīng)想到過這個方法,它可以得到最高性能!只是成本太高了.這個方法是萬不得已的方法.難道就沒有直接控制的方法了?有許多廠家做的Modbus通訊軟件難道都需要外掛一個單片機?

4樓: >>參與討論
chunyang
成本高嗎?
幾塊錢就搞定的事!

5樓: >>參與討論
ztb
謝謝!是否可以提供您的方案所使用的器件列表,我核算一下
 
6樓: >>參與討論
daguang72
必須通過自動轉換技術
我有嵌入式UART轉RS-485轉換器,歡迎你和我聯(lián)系

7樓: >>參與討論
chunyang
在原基礎上增加一兩片IC就可搞定
一片232接口芯片,用于與PC串口連接,一片485接口芯片,這兩片IC不是額外的,不用這類方案也必須,直接轉除這兩片IC外也得有其它邏輯IC或晶體管。真正增加成本的是一片MCU和一片模擬開關或數(shù)據(jù)分配器/選擇器之類的邏輯芯片,用于選擇MCU的串口通路,MCU用任何帶串口的型號即可,如51、AVR、PIC、68HC08系列等都行,二者價格之和是6元,再考慮PCB、人工等,自己做10塊錢足矣。

* - 本貼最后修改時間:2007-3-26 18:17:11 修改者:chunyang

8樓: >>參與討論
ztb
如果有MCU和串口參加進來那方案不確定性就更大了!
例如:
1.僅僅用一路串口,識別PC發(fā)出的數(shù)據(jù)控制485的方向.因為Windows最不擅長控制RTS了.這樣做還是不能使得Windows的通訊效率與下面的單片機匹配.因為我看到用VB執(zhí)行串口的收發(fā).兩次收發(fā)的間隔幾乎沒有辦法小于50mS(無論速率多快).
2.用兩路串口.作協(xié)議翻譯.大多數(shù)事情又這個MCU來做.與Windows的通訊使用更適合VB處理的大數(shù)據(jù)包格式.這樣就有通訊的最大效率.但是復雜程度增加很多,并且會喪失通用行.成本就增加的更多了!

我這里死認VB也主要是為用戶著想.畢竟更多的應用程序要他們來完成嘛.
是不是我把問題復雜化了?

9樓: >>參與討論
chunyang
你的理解根本沒有依據(jù)
一路串口就夠了,何來兩路?看來你還是缺乏串口通訊和MCU應用的基本概念,建議還是買成品吧,232—485的智能型互轉器市場上大把,直接用吧。

10樓: >>參與討論
ztb
找到了一篇文章:232-485智能轉換器
MAXIM北京辦事處 劉武光寫的,很詳細的講述232/485轉換器軟硬件設計的好文章.與同樣和我一樣"缺乏串口通訊和MCU應用的基本概念"的電工共享.
http://www.mculib.com/files/tele/te1146.pdf
另外,還是拜托樓上的:看在我從83年就開始學Z80的老臉上,把我的觀點仔細看看,再想想,再評論.

11樓: >>參與討論
fiann
一般的modbus方案在pc端都會做轉換
485轉232
485轉usb
接著你的上位機軟件實現(xiàn)就很容易了
成本很小了,幾十快錢!


12樓: >>參與討論
fiann
樓主還是大牛阿
從83年就開始學Z80

13樓: >>參與討論
21ele
如果下位機也是自己做的,可以控制他們適當延時再回應數(shù)據(jù).
如果下位機也是自己做的,可以控制他們適當延時再回應數(shù)據(jù),pc主機有足夠時間切換為接收,從modbus協(xié)議上講是沒有問題的,但是延時太長會使響應變慢,總線效率下降.

如果下位機是現(xiàn)成的設備,那響應的延時大致是無法改變的,那最好是用單片機監(jiān)視pc有無發(fā)送數(shù)據(jù),因為這里并不關心數(shù)據(jù)內(nèi)容,本質(zhì)上只是在一個字符周期內(nèi)是否起始位和停止位,如果沒有,視為暫無數(shù)據(jù)發(fā)送,所以不一定用有串口的mcu,隨便什么mcu都可以的.軟件定時檢測起始位和停止位即可.

我正在做modbus程序,pc上用Modbus Poll調(diào)試,非常好用,Simply Modbus 6.0.1這個軟件也不錯,只是沒有注冊版可用.

14樓: >>參與討論
computer00
應該不關VB的時,主要是操作系統(tǒng)調(diào)度的原因.
如果你的軟件優(yōu)先級足夠高,控制它應該是可以反應很快的。



15樓: >>參與討論
ztb
我前面手懶了,再"詳細"解釋一遍
   首先感謝各位的回帖.
    回chunyang:講話直是好事,搞技術的最煩拐彎抹角!我非常贊同你的這段話:"一個行業(yè)里的“大牛”換個“山頭”一問三不知也屬正常".我在意的是在看清楚問題以前上來就批!
    回到技術問題.我的問題要是在DOS實模式下根本不是問題,因為所有程序都可以很簡單的用匯編直接控制.猶如探囊取物.問題的起因就來自于方便易用的Windows+VB.(其它的方法我不會,不敢臆測)
    我做通訊試驗時是架著雙蹤示波器進行的.在VB下時間的分辨率無法優(yōu)于20mS(大約).而每次正常發(fā)送間隔不能小于50mS(大約).這樣對于已經(jīng)不快的9600pbs來講,通訊線上2/3的時間在等待.而對于38400bps來說88%的時間在等待.(以上計算基于ModBus協(xié)議最常用的雙向報文長度8字節(jié)+4字節(jié)間隔).這個問題在子站數(shù)量少的情況下不易被注意到,而子站多了就不能忽視了.如果采用簡單的232轉485方案,只要VB的50mS無法去掉這個問題就只能如此!這就我前面提到的第一個方案即單串口的方案.
    我說得第二個方案就是要徹底解決這個問題--采用雙串口設計.這里MCU已經(jīng)不是簡單的僅控制485芯片的收/發(fā)線,而是負責更復雜的協(xié)議轉換.即把VB直接控制下效率低的ModBus協(xié)議轉換為更適合Vb控制的效率更高的其它協(xié)議.
例如,既然間隔不能在縮小就加大報文長度,把需要上百個短報文完成的巡檢命令變成批巡檢命令.由MCU翻譯成高效的ModBus命令.
    我想肯定有第三種方案;修改Windows,加入實時內(nèi)核,把它變得即有Windows的易用又有DOS下的準確.網(wǎng)上看到過由于不常用擔心比第二種方案的成本還要高(這的確是臆測的).感嘆,技術進步了我卻低能了,我已經(jīng)沒有能力像當年把CP/M修改成實時多任務那樣駕馭Windows了.
   突然想起一個故事:說一個小孩子上學去,第1天學了一個字"一",第2天又學了一個字"二",第3天也學了一個字"三".第4天他就不來了,說: ......!

    回21ele:千萬不要打標準協(xié)議的歪主意,修改標準就是向眾多專家的經(jīng)驗提出挑戰(zhàn)!眼前站點便宜以后會有很多麻煩.(傳出去,名聲也不好呀!).遵守協(xié)議就是為了交流,自成體系就是自我封閉!
好心人,你那個非常好用Modbus Poll調(diào)試軟件是否可以共享!我早已是垂涎三尺啦.


16樓: >>參與討論
cfanandham
vb如果調(diào)用多媒體定時器好像速度就會高點
記得能達到1ms,具體就不確定了。

17樓: >>參與討論
chunyang
還是接著就事論是,順便總結一下
    串口的收發(fā)是可以同時進行的,這一點無論PC還是MCU都相同,PC在硬件上還有緩沖存儲,又可實現(xiàn)多任務調(diào)度,關鍵是軟件平臺的處理,兩次通訊間的間隔長達50mS不可怕,只要在編程上注意發(fā)完即收就行,這樣可以保證一個信息幀的通訊可靠性。PC內(nèi)存中開的緩沖區(qū)收發(fā)要獨立,某些現(xiàn)成的使用簡單的控件可能不能滿足,但可以自己重寫控件。前貼中提到當年我的一個設計曾用VB做上位平臺,收發(fā)間無延時(MCU的軟件是我寫的,源代碼現(xiàn)在還在我的機器里,收到PC指令后就立刻開始上傳數(shù)據(jù)了,未做延時處理),VB平臺操作正常。當然,早期版本的VB和現(xiàn)在的VB差別明顯,但那已經(jīng)是Windows平臺下的32位系統(tǒng)了而非For DOS的版本。
    如采用MCU系統(tǒng)做485/Modbus主機,采用雙串口MCU當然方便,成本會因此上升10元左右(雙串口MCU與單串口MCU的差價),工控系統(tǒng)應該也是能夠接受的,好處是可以處理485和PC同時發(fā)起的通訊,但485是單向的,所以若不考慮485和PC同時發(fā)起通訊請求的極端情況,普通單串口MCU就足以滿足,根據(jù)優(yōu)先級或應用的特性選擇靜態(tài)時MCU偵聽PC還是485即可,前帖中提到的“一片模擬開關或數(shù)據(jù)分配器/選擇器之類的邏輯芯片,用于選擇MCU的串口通路”的設計思想就是基于此點,MCU在此不作協(xié)議處理僅做轉發(fā)的緩沖即可,這樣的MCU編程是很簡單的。當然,用MCU做485主機也是可以的,與PC可以采用另一套自定協(xié)議交互。
    MCU的引入可以有3類做法:1、做485主機,同時偵聽PC和485的話才用雙串口MCU,否則單串口MCU就可以了,這類做法MCU上要跑協(xié)議。2、MCU僅擔當485方向控制和數(shù)據(jù)的緩沖、轉發(fā),本身與總線的協(xié)議和數(shù)據(jù)內(nèi)容無關,PC是真正的485主機只是不直接參與總線通訊,協(xié)議在PC平臺上運行。這種做法PC平臺軟件的運行時間、收發(fā)轉換時間和波特率等均與485節(jié)點無關,缺點是最大幀長度受MCU片內(nèi)RAM的限制,但現(xiàn)在256Byte的MCU很多,帶片內(nèi)XRAM的MCU也很多,且不必花費額外的成本開銷,如STC的89C51內(nèi)存配置為128+128+256,89C54及以上規(guī)格的配置為128+128+1024。3、MCU僅做方向控制,這是最廉價的方案,MCU采用最簡單的型號即可,但PC平臺的響應速度要相應足夠,只要處理得當,VB平臺下的單次收發(fā)應該也不會有問題。

18樓: >>參與討論
xjb37
兄弟,你用win api來寫串口就可以。 DCB控制字設置一下就可以 dcb.fRtsControl=RTS_CONTROL_TOGGLE; 以下是用VC6.0寫的,我想VB里也類似;我用示波器量過,很準確。我是in2000xp的系統(tǒng)。 DCB dcb; dcb.DCBlength = sizeof( DCB ); GetCommState( m_hHandle, &dcb ); dcb.BaudRate = m_Options.nBaudRate; dcb.fAbortOnError=1; dcb.fBinary=1; dcb.ByteSize = m_Options.ByteSize; dcb.fParity=m_Options.fParity; dcb.Parity= m_Options.Parity; dcb.StopBits= m_Options.StopBits; dcb.fRtsControl=RTS_CONTROL_TOGGLE;//xjb
參與討論
昵稱:
討論內(nèi)容:
 
 
相關帖子
關于tc35i的問題,請幫忙
485調(diào)試問題
只有兩根線的通訊接口
工業(yè)通信協(xié)議Modbus,Profibus-DP,Devicenet和Ethernet
不好意思在發(fā)一貼,關于天線外接
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號