|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
十一好啊,了解modbus的前輩請(qǐng)進(jìn)。 |
| 作者:happystar 欄目:單片機(jī) |
各位好啊,我現(xiàn)在做電網(wǎng)的modbus程序,小弟今年剛畢業(yè)上班,有勞大家拉。在modbus中采用RTU幀, 1》協(xié)議定義說在幀完成前有超過1。5個(gè)字符停頓則單片機(jī)(下位機(jī))認(rèn)為下一字節(jié)為新消息....判斷這個(gè)是不是根據(jù)傳輸波特率計(jì)算每個(gè)字符的時(shí)間,然后用定時(shí)器處理啊。本協(xié)議存在著接受超時(shí)問題,比如上位機(jī)判斷10ms即為超時(shí)時(shí)間,這個(gè)也得用定時(shí)器,定時(shí)器是獨(dú)立與CPU的,在一邊接受數(shù)據(jù)一邊判斷2個(gè)定時(shí)器中斷,對(duì)于下位機(jī)寫程序時(shí)怎么來協(xié)調(diào)?我現(xiàn)在越想越郁悶。 2》在CRC校驗(yàn)時(shí),我在網(wǎng)上找了RTU的代碼,大概有2種。 第一種: uint16 crc16(uint8 *puchMsg, uint16 usDataLen) { uint8 uchCRCHi = 0xFF ; /* 高CRC字節(jié)初始化 */ uint8 uchCRCLo = 0xFF ; /* 低CRC 字節(jié)初始化 */ uint32 uIndex ; /* CRC循環(huán)中的索引 */ while (usDataLen--) /* 傳輸消息緩沖區(qū) */ { uIndex = uchCRCHi ^ *puchMsg++ ; /* 計(jì)算CRC */ uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ; uchCRCLo = auchCRCLo[uIndex] ; } return (uchCRCHi << 8 | uchCRCLo) ; } 第二種:(和CRC定義類似) int mb_crc(BYTE *snd,int num) { int i,j; unsigned int c,crc=0xFFFF for (i=0;i<num;i ){ c=str[i] & 0x00FF; crc^=c; for(j=0,j<8,j ) { if (crc & 0x0001) {crc>>=1;crc^=0xA001;} else crc>>=1 } 我是采用第一CRC種程序,可是發(fā)現(xiàn)校驗(yàn)的結(jié)果和用專門modbus校驗(yàn)碼生成器不一致。請(qǐng)教各位這怎么回事? 我想問問大家這2種寫法有什么不同么? 謝謝大家,祝愿大家開心每一天 |
| 2樓: | >>參與討論 |
| 作者: yixiao2000 于 2006/10/6 10:33:00 發(fā)布:
關(guān)于Modbus 1>下位機(jī)每接收完一個(gè)字符后,都要重新計(jì)時(shí),判斷是否接收完一個(gè)幀,計(jì)時(shí)可根據(jù)波特率和字符長(zhǎng)度計(jì)算。 2>上位機(jī)每發(fā)出一個(gè)幀后,要開始計(jì)時(shí),超出定時(shí)未收到下位機(jī)響應(yīng)可以重新發(fā)送。計(jì)時(shí)可根據(jù)系統(tǒng)反應(yīng)速度確定 |
|
| 3樓: | >>參與討論 |
| 作者: yixiao2000 于 2006/10/6 10:42:00 發(fā)布:
關(guān)于Modbus 你用的CRC校驗(yàn)方法(第一種)實(shí)際上上查表法,因些首先要保證你的表格中的數(shù)據(jù)是正確的,其次程序本身也要注意 |
|
| 4樓: | >>參與討論 |
| 作者: lsqdesign 于 2006/10/7 16:46:00 發(fā)布:
d d |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |