欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 請(qǐng)教:modbus發(fā)送數(shù)據(jù),有時(shí)兩幀斷不開,怎么寫好 [打印本頁(yè)]

作者: sarayang    時(shí)間: 2021-10-14 18:49
標(biāo)題: 請(qǐng)教:modbus發(fā)送數(shù)據(jù),有時(shí)兩幀斷不開,怎么寫好
void SendData(u8 *buff,u8 len)
{
  while(len--)
  {
    while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
    USART_SendData(USART2,*(buff++));
  }
   while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
   Dela(24*72000);
}

void Delay(uint32_t nCount)
{
  for (; nCount !=0; nCount--);
}

作者: sarayang    時(shí)間: 2021-10-14 18:52
delay,少打了個(gè)y,抄錯(cuò)了,本身程序沒寫錯(cuò)
作者: syy520    時(shí)間: 2021-10-15 10:02
你的len干嘛用的
作者: Hephaestus    時(shí)間: 2021-10-15 12:12
到底是ASC還是RTU???
作者: sarayang    時(shí)間: 2021-10-15 13:24
Hephaestus 發(fā)表于 2021-10-15 12:12
到底是ASC還是RTU???

RTU,是RTU
作者: sarayang    時(shí)間: 2021-10-15 13:39
syy520 發(fā)表于 2021-10-15 10:02
你的len干嘛用的

數(shù)據(jù)幀長(zhǎng)度
作者: xzh5508    時(shí)間: 2021-10-15 14:35
兩幀數(shù)據(jù)之間不是該有一個(gè)間隔嗎?既然是兩幀,你就一幀一幀發(fā)啊!
作者: sarayang    時(shí)間: 2021-10-15 15:12
xzh5508 發(fā)表于 2021-10-15 14:35
兩幀數(shù)據(jù)之間不是該有一個(gè)間隔嗎?既然是兩幀,你就一幀一幀發(fā)啊!

這個(gè)間隔怎么做?
作者: sarayang    時(shí)間: 2021-10-15 15:13
xzh5508 發(fā)表于 2021-10-15 14:35
兩幀數(shù)據(jù)之間不是該有一個(gè)間隔嗎?既然是兩幀,你就一幀一幀發(fā)啊!

是一幀一幀發(fā)的
作者: yzwzfyz    時(shí)間: 2021-10-15 15:37
modbus協(xié)議中是如果定義兩幀之間的間隔的呢?
作者: Hephaestus    時(shí)間: 2021-10-15 21:27
MODBUS/RTU的規(guī)定是超過3.5字節(jié)時(shí)間的總線空閑后,第一個(gè)收到的數(shù)據(jù)字節(jié)為幀頭。

MODBUS/ASC不定義兩幀之間時(shí)間間隔,可以連續(xù)發(fā)送,用不會(huì)出現(xiàn)在幀中間的特殊字符來表示幀頭幀尾。
作者: sarayang    時(shí)間: 2021-10-18 11:11
我不明白的點(diǎn)在于:接收間隔是用中斷做的,以串口中斷中,是以 if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到數(shù)據(jù),做為定時(shí)器啟動(dòng)條件的,不是485,如果是全雙工的情況,發(fā)送做延時(shí)要怎么做?

作者: sarayang    時(shí)間: 2021-10-18 11:19
當(dāng)然是不是也可以把它當(dāng)成收發(fā)不同時(shí)處理,會(huì)不會(huì)經(jīng)常錯(cuò)過接收,那么應(yīng)該怎么補(bǔ)救?相應(yīng)的我們的發(fā)送沒有收到正常反饋的時(shí)候是不是要重發(fā),有可能同時(shí)又有新的發(fā)送任務(wù),那又怎么對(duì)應(yīng),有沒有那位大佬有相關(guān)代碼學(xué)習(xí)一下?
作者: sarayang    時(shí)間: 2021-10-18 11:30
當(dāng)然這是解決了兩幀間斷開問題后考慮的,其實(shí)同樣的問題,我看網(wǎng)上很多發(fā)送DELAY的時(shí)間超過接收3.5字節(jié)時(shí)間差不多有10倍,按要求是不是也是3.5字節(jié)就夠了,這么長(zhǎng)的時(shí)間DELAY會(huì)造成遲緩,其實(shí)也會(huì)造成接收丟包,不知是怎么處理的
作者: Hephaestus    時(shí)間: 2021-10-18 15:52
Delay寫法有問題,C51可以按你的意愿編譯,但是MDK這種編譯器會(huì)認(rèn)為你的Delay是無意義代碼而優(yōu)化掉。
作者: sarayang    時(shí)間: 2021-10-21 09:12
Hephaestus 發(fā)表于 2021-10-18 15:52
Delay寫法有問題,C51可以按你的意愿編譯,但是MDK這種編譯器會(huì)認(rèn)為你的Delay是無意義代碼而優(yōu)化掉。

請(qǐng)教一下,那怎么寫才好呢?
作者: xstong    時(shí)間: 2021-10-21 09:42
發(fā)送函數(shù)里面,沒必要加延遲! MODBUS 是半雙工通訊,都是一問一答,怎么會(huì)出現(xiàn)連續(xù)應(yīng)答? 需要做的只是收到指令后立即快速處理并應(yīng)答,莫讓主機(jī)等待超時(shí)而重復(fù)操作指令。
作者: sarayang    時(shí)間: 2021-10-21 14:05
xstong 發(fā)表于 2021-10-21 09:42
發(fā)送函數(shù)里面,沒必要加延遲! MODBUS 是半雙工通訊,都是一問一答,怎么會(huì)出現(xiàn)連續(xù)應(yīng)答? 需要做的只是收 ...

應(yīng)該不算是標(biāo)準(zhǔn)MODBUS,有主動(dòng)上報(bào),就是即可以應(yīng)答接收到的指令,也可以主動(dòng)發(fā)指令
作者: xstong    時(shí)間: 2021-10-21 14:52
既然從端有主動(dòng)連續(xù)發(fā)送數(shù)據(jù)幀的功能需求,那么主機(jī)端就應(yīng)該有處理連續(xù)包甚至連續(xù)字節(jié)流的能力!
否則,無論你從端如何延遲,主機(jī)都有可能出現(xiàn)不能處理的情況。解決這個(gè)問題應(yīng)該放在主機(jī)端,而不是從端。
作者: sarayang    時(shí)間: 2021-10-21 17:55
主端不受我控制




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1