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