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

標(biāo)題: 51單片機(jī)的Modbus RTU通信示例一 [打印本頁(yè)]

作者: 溫柔的郎    時(shí)間: 2022-1-27 15:16
標(biāo)題: 51單片機(jī)的Modbus RTU通信示例一
各位大師,我最近在學(xué)習(xí)Modbus RTU在51上的應(yīng)用,
我用的是STC12C5A60S2單片機(jī)開(kāi)發(fā)板和STC8A8K64S4A12開(kāi)發(fā)板做Modbus RTU從站,程序用到是從網(wǎng)上找來(lái)幾個(gè)大神的51程序,
主站用Modbus Poll軟件,
看著程序不錯(cuò),可就是不能和Modbus Poll軟件通信成功,老是提示超時(shí)。
我是做工業(yè)plc控制的,對(duì)51單片機(jī)不是很懂,希望大神們不要笑話,
請(qǐng)有懂得大神指點(diǎn)指點(diǎn),萬(wàn)分感謝!!


從網(wǎng)上找的大神的源程序也一并奉上
MCGS與51單片機(jī)modbus通訊proteus仿第二版(完整版).rar (4.92 MB, 下載次數(shù): 137)


作者: Hephaestus    時(shí)間: 2022-1-27 19:20
從站有點(diǎn)難度,為啥不用cortexxx
作者: Hephaestus    時(shí)間: 2022-1-27 19:21
從站代碼有難度,為什么不用cortex-M0單片機(jī)呢?資源和速度都足夠了。
作者: 溫柔的郎    時(shí)間: 2022-1-27 20:41
現(xiàn)在cortex-M0的芯片都很貴了,做從站都想節(jié)省費(fèi)用,用51做從站,用STM32F407做主站,
作者: Hephaestus    時(shí)間: 2022-1-27 21:06
Cortex-M4不嫌貴,反到嫌Cortex-M0貴?而且MODBUS/RTU主站好寫(xiě),只要發(fā)數(shù)據(jù)幀,等從站回復(fù)即可,很普通的順序邏輯。從站難寫(xiě),要監(jiān)聽(tīng)總線上面的數(shù)據(jù)幀,判斷哪些數(shù)據(jù)幀跟自己無(wú)關(guān),哪些數(shù)據(jù)幀是對(duì)自己說(shuō)的。
作者: lkc8210    時(shí)間: 2022-1-28 02:27
用例程在STC89上玩了一個(gè)晚上
半成功地用Modbus點(diǎn)亮幾個(gè)LED和傳回幾個(gè)鍵值
睡前留一下言

因?yàn)槔逃玫氖茿T89
是12T單片
樓主用STC12和STC8都是1T單片機(jī)
波特率和定時(shí)器的設(shè)定要改一改

我用STC89+11.0592Mhz
改了TH1和TL1的計(jì)算方程還是不行

  1.         TH1 = -11059200L/12/32/9600;    //求當(dāng)波特率是9600時(shí)定時(shí)器的初值<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2.         TL1 = -11059200L/12/32/9600;
復(fù)制代碼


對(duì)比了STC的官方例程才發(fā)現(xiàn)要加括號(hào)

  1.         TH1 = -(11059200L/12/32/9600);    //求當(dāng)波特率是9600時(shí)定時(shí)器的初值<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2.         TL1 = -(11059200L/12/32/9600);
復(fù)制代碼


而且89單片機(jī)可以設(shè)定倍速

  1.         PCON |= 0X80;                   //波特率加倍
復(fù)制代碼

就是說(shuō)方程式用9600算
Modbus上位機(jī)的設(shè)定就要用19200

為什么說(shuō)是半成功呢?
因?yàn)殡m然可以控制LED和讀取鍵值
但是反應(yīng)很慢而且還會(huì)Timeout
還有很多地方要研究一下

想不到會(huì)再這里遇到一樣干PLC的同行
明天繼續(xù)
作者: xws245925587    時(shí)間: 2022-1-28 08:23
從站最簡(jiǎn)單的做法通過(guò)定時(shí)器判斷一定時(shí)間沒(méi)有數(shù)據(jù)就認(rèn)為一幀,然后解析報(bào)文,判斷是否屬于自己的報(bào)文,是則返回即可;或者你也可以按字符格式解析,滿足一幀的條件時(shí)再判斷也可以,總的來(lái)簡(jiǎn)單的從站應(yīng)用還是比較簡(jiǎn)單的
作者: xws245925587    時(shí)間: 2022-1-28 08:28
還有一個(gè)比較有意思的事情,這個(gè)代碼串口初始化跟硬件相關(guān),你得按你的板子晶振頻率來(lái)修改相應(yīng)的串口初始化,以及校驗(yàn)?zāi)J?hr noshade size="2" width="100%" color="#808080"> 作者: 溫柔的郎    時(shí)間: 2022-1-28 12:40
我的單片機(jī)水平肯定遠(yuǎn)遠(yuǎn)趕不上前面幾位大神的水平了!!
也感謝大神 lkc8210通宵達(dá)旦的尋找問(wèn)題,
作者: lkc8210    時(shí)間: 2022-1-28 15:46
溫柔的郎 發(fā)表于 2022-1-28 12:40
我的單片機(jī)水平肯定遠(yuǎn)遠(yuǎn)趕不上前面幾位大神的水平了!!
也感謝大神 lkc8210通宵達(dá)旦的尋找問(wèn)題,

上班摸魚(yú)的時(shí)候玩了一下仿真
竟然成功了!!
沒(méi)有Timeout
不知道為什么真機(jī)會(huì)timeout
作者: gongzhu    時(shí)間: 2022-2-11 22:07
同行!我也是干自動(dòng)化,但現(xiàn)在落魄成電工了!
人家電工為了提升都開(kāi)始學(xué)plc了,我卻倒過(guò)來(lái)了,嘆嘆嘆

搞串口通信,必須神器!
因?yàn)榇诰哂歇?dú)占性,所以能用來(lái)檢測(cè)串口通信的神器很少,我一般用CommMonitor,有坡姐版的,很好用

我從經(jīng)驗(yàn)來(lái)判斷,可能是通信協(xié)議不一致,比如奇偶校驗(yàn)等!
作者: AUG    時(shí)間: 2022-2-12 10:32
lkc8210 發(fā)表于 2022-1-28 15:46
上班摸魚(yú)的時(shí)候玩了一下仿真
竟然成功了!!
沒(méi)有Timeout

仿真是理想情況下的,真機(jī)可能存在波特率偏差,通信干擾等情況。
作者: lkc8210    時(shí)間: 2022-2-12 11:03
AUG 發(fā)表于 2022-2-12 10:32
仿真是理想情況下的,真機(jī)可能存在波特率偏差,通信干擾等情況。

回家研究發(fā)現(xiàn)是數(shù)據(jù)地址溢出了
原代碼所設(shè)的傳回?cái)?shù)組只有16Byte
其中頭3Byte及尾2Byte用作地址/功能碼 / 字節(jié)長(zhǎng)度 及 CRC驗(yàn)證
可用的只余下11Byte
而每個(gè)Modbus數(shù)據(jù)占用兩個(gè)Byte
所以上位機(jī)只能要求5個(gè)數(shù)據(jù)
我當(dāng)時(shí)要求的是10個(gè)
而代碼又沒(méi)有溢出保護(hù)
所以跑飛了




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