ferrari550c
级别: 正式会员
精华主题: 0
发帖数量: 11 个
工控威望: 81 点
下载积分: 1149 分
在线时间: 5(小时)
注册时间: 2020-05-29
最后登录: 2023-12-24
查看ferrari550c的 主题 / 回贴
楼主  发表于: 2020-11-23 15:10
手头有个项目用的是1214的CPU,需要用到CAN总线,考虑过CM CANopen 021620-B模块,但是不巧这个模块只能用于CAN2.0A,所以只能用第三方的CAN转485模块。
模块采用固定的个是转换,每一帧CAN报文都转换出13个字节长度的数据:




CPU组态了CM1241模块,用自由口通讯来接收和发送串口数据。测试时发现CAN总线上发送两个ID报文,每条的数据都间隔100ms加1,在PLC端仿真看两个ID的数据是不同步的在自增,一会第一个ID的数据在涨,第二个ID的数据不变,一会第二个ID的数据涨,第一个ID的不变……


这里还想问下RCV_PTP和Receive_P2P功能块的区别,我现在用的是RCV_PTP,说明里说EN_R在上升沿启用接收,但是我实际发现一直给TRUE也是可以接收的。我使用Receive_P2P就没有接收成功过数据,这是什么原因?


这是我功能块的配置图:




同时我做了个NDR的上升沿捕捉计数器,发现只有程序第一次运行的时候涨了一次,后面就一直不涨。




另外我发送用的是Send_P2P功能块。CM1241和转换器的连接用的是422四线制全双工,发送和接收是单独处理的。


我的疑问在于CAN转换器是收到总线上的报文立刻进行转换的,当总线上的报文很多时,同一时刻在串口端只会发出一帧对应的CAN报文,也就是13个字节,如果串口这边还没读完,下一帧转换的数据又来了,就有可能读不到了。我也咨询过转换器的技术,说CAN波特率和串口波特率要差不多,现在CAN是250K,串口这边已经是115200了。出现这种现象是我的接收处理有问题还是用这样的方法只能实现这样的效果?望高手们指点,不胜感激!
[ 此帖被ferrari550c在2020-11-25 08:50重新编辑 ]
ferrari550c
级别: 正式会员
精华主题: 0
发帖数量: 11 个
工控威望: 81 点
下载积分: 1149 分
在线时间: 5(小时)
注册时间: 2020-05-29
最后登录: 2023-12-24
查看ferrari550c的 主题 / 回贴
1楼  发表于: 2020-11-25 08:51
已解决,通信模块设置以固定长度结束消息就OK了。