|
發布時間: 2022-1-27 15:16
正文摘要:各位大師,我最近在學習Modbus RTU在51上的應用, 我用的是STC12C5A60S2單片機開發板和STC8A8K64S4A12開發板做Modbus RTU從站,程序用到是從網上找來幾個大神的51程序, 主站用Modbus Poll軟件, 看著程序不錯, ... |
AUG 發表于 2022-2-12 10:32 回家研究發現是數據地址溢出了 原代碼所設的傳回數組只有16Byte 其中頭3Byte及尾2Byte用作地址/功能碼 / 字節長度 及 CRC驗證 可用的只余下11Byte 而每個Modbus數據占用兩個Byte 所以上位機只能要求5個數據 我當時要求的是10個 而代碼又沒有溢出保護 所以跑飛了 |
lkc8210 發表于 2022-1-28 15:46 仿真是理想情況下的,真機可能存在波特率偏差,通信干擾等情況。 |
|
同行!我也是干自動化,但現在落魄成電工了! 人家電工為了提升都開始學plc了,我卻倒過來了,嘆嘆嘆 搞串口通信,必須神器! 因為串口具有獨占性,所以能用來檢測串口通信的神器很少,我一般用CommMonitor,有坡姐版的,很好用 我從經驗來判斷,可能是通信協議不一致,比如奇偶校驗等! |
溫柔的郎 發表于 2022-1-28 12:40 上班摸魚的時候玩了一下仿真 竟然成功了!! 沒有Timeout 不知道為什么真機會timeout |
|
我的單片機水平肯定遠遠趕不上前面幾位大神的水平了!! 也感謝大神 lkc8210通宵達旦的尋找問題, |
| 還有一個比較有意思的事情,這個代碼串口初始化跟硬件相關,你得按你的板子晶振頻率來修改相應的串口初始化,以及校驗模式 |
| 從站最簡單的做法通過定時器判斷一定時間沒有數據就認為一幀,然后解析報文,判斷是否屬于自己的報文,是則返回即可;或者你也可以按字符格式解析,滿足一幀的條件時再判斷也可以,總的來簡單的從站應用還是比較簡單的 |
|
用例程在STC89上玩了一個晚上 半成功地用Modbus點亮幾個LED和傳回幾個鍵值 睡前留一下言 因為例程用的是AT89 是12T單片 樓主用STC12和STC8都是1T單片機 波特率和定時器的設定要改一改 我用STC89+11.0592Mhz 改了TH1和TL1的計算方程還是不行
對比了STC的官方例程才發現要加括號
而且89單片機可以設定倍速
就是說方程式用9600算 Modbus上位機的設定就要用19200 為什么說是半成功呢? 因為雖然可以控制LED和讀取鍵值 但是反應很慢而且還會Timeout 還有很多地方要研究一下 想不到會再這里遇到一樣干PLC的同行 明天繼續 |
| Cortex-M4不嫌貴,反到嫌Cortex-M0貴?而且MODBUS/RTU主站好寫,只要發數據幀,等從站回復即可,很普通的順序邏輯。從站難寫,要監聽總線上面的數據幀,判斷哪些數據幀跟自己無關,哪些數據幀是對自己說的。 |
| 現在cortex-M0的芯片都很貴了,做從站都想節省費用,用51做從站,用STM32F407做主站, |
| 從站代碼有難度,為什么不用cortex-M0單片機呢?資源和速度都足夠了。 |
| 從站有點難度,為啥不用cortexxx |