通過自己的理解,將modbus工作的全過程歸納為以下幾個圖。
希望你能更形象地從整體的角度理解整體的原理。
由於篇幅有限,圖中的字體很小,省略了一些程序的語句。 請結合freemodbus的源代碼進行確認。
串行端口相應地設置有基於STM32的USART2。
另外,應該有三個枚舉概率,有識別和區別。
1 ) emb事件類型、emb角色) )中,判斷事件。 事件是對完整幀(消息)的操作。
類型編號
{
EV_READY,//事件準備階段,即還沒有接收到1幀的數據
EV_FRAME_RECEIVED,//1幀的數據接收結束
EV_EXECUTE,//此幀數據的具體執行
發送EV_FRAME_SENT //幀
} emb事件類型;
2 ) eRcvState和eSndState,這兩個枚舉變量表示接收狀態、發送狀態,每字節。
如果存在正在接收的字節,則eRcvState=STATE_RX_RCV; 所有字節接收後,將再次進入空閑狀態。
如果沒有正在接收的字節,則eRcvState=STATE_RX_IDLE; 隻有在接收空閑狀態下才能發送。 反之亦然。
他們的關係:當一幀的所有的字節被接收、或者被發送完成之後, 就觸發了一個事件。從而,進入了對事件的操作中。
有了大致的理解,下圖會更容易理解。