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