手頭有個項目用的是1214的CPU,需要用到CAN總線,考慮過CM CANopen 021620-B模塊,但是不巧這個模塊只能用于CAN2.0A,所以只能用第三方的CAN轉485模塊。
模塊采用固定的個是轉換,每一幀CAN報文都轉換出13個字節(jié)長度的數(shù)據(jù):
CPU組態(tài)了CM1241模塊,用自由口通訊來接收和發(fā)送串口數(shù)據(jù)。測試時發(fā)現(xiàn)CAN總線上發(fā)送兩個ID報文,每條的數(shù)據(jù)都間隔100ms加1,在PLC端仿真看兩個ID的數(shù)據(jù)是不同步的在自增,一會第一個ID的數(shù)據(jù)在漲,第二個ID的數(shù)據(jù)不變,一會第二個ID的數(shù)據(jù)漲,第一個ID的不變……
這里還想問下RCV_PTP和Receive_P2P功能塊的區(qū)別,我現(xiàn)在用的是RCV_PTP,說明里說EN_R在上升沿啟用接收,但是我實際發(fā)現(xiàn)一直給TRUE也是可以接收的。我使用Receive_P2P就沒有接收成功過數(shù)據(jù),這是什么原因?
這是我功能塊的配置圖:
同時我做了個NDR的上升沿捕捉計數(shù)器,發(fā)現(xiàn)只有程序第一次運行的時候漲了一次,后面就一直不漲。
另外我發(fā)送用的是Send_P2P功能塊。CM1241和轉換器的連接用的是422四線制全雙工,發(fā)送和接收是單獨處理的。
我的疑問在于CAN轉換器是收到總線上的報文立刻進行轉換的,當總線上的報文很多時,同一時刻在串口端只會發(fā)出一幀對應的CAN報文,也就是13個字節(jié),如果串口這邊還沒讀完,下一幀轉換的數(shù)據(jù)又來了,就有可能讀不到了。我也咨詢過轉換器的技術,說CAN波特率和串口波特率要差不多,現(xiàn)在CAN是250K,串口這邊已經(jīng)是115200了。出現(xiàn)這種現(xiàn)象是我的接收處理有問題還是用這樣的方法只能實現(xiàn)這樣的效果?望高手們指點,不勝感激!
[ 此帖被ferrari550c在2020-11-25 08:50重新編輯 ]