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