好久沒(méi)有寫(xiě)些什么了,最近在出差也沒(méi)做關(guān)于Linux的東西。由于是做自動(dòng)化的因此最近做了一塊單片機(jī)的板子要作為MODBUS從站來(lái)與上面的觸摸屏進(jìn)行顯示功能還不是很完善但是MODBUS功能的模塊程序已經(jīng)寫(xiě)好經(jīng)過(guò)測(cè)試基本可以用。
具體要求是下面有2個(gè)AI和4個(gè)DO量需要檢測(cè)和控制,我使用的是90C52單片機(jī)模擬量采集部分用的OP07的放大器電路,這里就不詳細(xì)說(shuō)明了(有需要的可以留言,有圖紙),最麻煩的就是MODBUS通訊部分。
一開(kāi)始我根據(jù)MODBUS標(biāo)準(zhǔn)協(xié)議規(guī)定來(lái)做了程序但是不能通訊經(jīng)過(guò)總結(jié)主要問(wèn)題出在二個(gè)地方
第一:crc校驗(yàn)計(jì)算不正確
第二:發(fā)送的程序太大導(dǎo)致發(fā)送時(shí)間過(guò)長(zhǎng)主站端認(rèn)為超時(shí)(我自己認(rèn)為的原因)
經(jīng)過(guò)仔細(xì)研究發(fā)現(xiàn)CRC校驗(yàn)的程序我根本寫(xiě)不出來(lái)也理解不了網(wǎng)絡(luò)上有很多現(xiàn)成的可以直接拿來(lái)來(lái)用就很好了,經(jīng)過(guò)精簡(jiǎn)程序是可以進(jìn)行通信了但是還有一個(gè)很重要的問(wèn)題是超時(shí)判斷的問(wèn)題一直沒(méi)能處理所以進(jìn)行了以下時(shí)間問(wèn)題的總結(jié)
Modbus字符與數(shù)據(jù)幀間隔時(shí)間問(wèn)題
1、MODBS協(xié)議中的規(guī)定如下
在RTU模式,報(bào)文有時(shí)間長(zhǎng)至少3.5個(gè)字符時(shí)間的空間間隔區(qū)分如下圖
整個(gè)報(bào)文必須以連續(xù)的字符流發(fā)送,如果兩個(gè)字符之間的空閑大于1.5個(gè)字符時(shí)間,則報(bào)文幀認(rèn)為不完整,應(yīng)該被接收點(diǎn)丟棄。
需要注意的是RTU接收驅(qū)動(dòng)程序的實(shí)現(xiàn),由于1.5T和3.5T的定時(shí),隱含著大量對(duì)中斷的管理。在高通信速率下,導(dǎo)致CPU負(fù)擔(dān)加重,因此在<=19200pbs時(shí)這兩個(gè)定時(shí)必須嚴(yán)格遵守;對(duì)于>19200pbs的情形應(yīng)該使用2個(gè)定時(shí)的固定值,建議字符間的超時(shí)時(shí)間t1.5為750us;幀間超時(shí)時(shí)間為1.75ms
上面是MODBUS協(xié)議中的規(guī)定,但在實(shí)際使用中1.5T都沒(méi)有必要關(guān)注。而幀與幀之間的3.5T則需要程序處理一下。由于RTU模式?jīng)]有起始符和結(jié)束符,兩個(gè)數(shù)據(jù)包之間只能靠時(shí)間間隔來(lái)區(qū)分。在儀表在工廠實(shí)際使用過(guò)程中一般都是間隔40ms、50ms甚至更長(zhǎng)時(shí)間讀一次數(shù)據(jù),這個(gè)間隔完全超過(guò)了T3.5;
假設(shè)現(xiàn)在波特率是9600bps要發(fā)送取數(shù)據(jù)的請(qǐng)求:
01 03 00 01 00 01 D5 CA (格式為8個(gè)數(shù)據(jù)位1個(gè)停止位)
那么每個(gè)字節(jié)包含一個(gè)起始位一個(gè)停止位也就是10位
那么發(fā)送這串命令要花費(fèi)時(shí)間為:8×10/9600×1000=8.3ms
即第一幀發(fā)送時(shí)間為8.3ms而3.5T的時(shí)間為3.5×10/9600×1000=3.65ms
所以第二幀數(shù)據(jù)開(kāi)始發(fā)送的時(shí)間至少是第12ms開(kāi)始(8.3+3.65=11.95ms)
之后修改程序后終于可以達(dá)到預(yù)期的效果但是我用三個(gè)軟件進(jìn)行調(diào)試都可以讀到數(shù)據(jù)(串口調(diào)試助手,MODBUSSIM,modscan)其中只有modscan接收數(shù)據(jù)的時(shí)候閃一下紅但是能讀到數(shù)據(jù)不知道為什么調(diào)節(jié)了他的poll時(shí)間還是不行其他兩個(gè)軟件正常也可以寫(xiě)數(shù)據(jù)。想了一下覺(jué)得這兩天也就干了這么些事。程序是用keil寫(xiě)的有需要的可以聯(lián)系我,可以直接用。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。