注:记录个人移植过程遇到的问题,正在更新。。。
PROFINET1.8.0.5协议移植遇到问题汇总:
软件环境:TIA_V17
硬件环境:stm32F205_ZET6主控芯片+TPS-1 PROFINET IO 20500PF00(芯片物料编码B0001.0.2)
驱动代码:TPS-1协议驱动版本1.8.0.5,官方stm32F20X驱动。
工程项目:PN4-1616A
问题1描述:
目前对硬件TPS1已完成协议栈的烧录固化,在TIA进行程序仿真时,检查TPS stack得不到正确的魔数值与NRT区域大小,侧面说明程序在初始化时某地方存在错误。
注:根据TPS数据手册知固件上电后,TPS-1会将魔数值和NRT区域大小填写到地址0x8000和0x8004中,目前是失败状态。
问题验证如下:相同的硬件环境在杰的工程仿真下可以得到正确的魔数值,以及在1.2版本的TPS环境下也可以得到正确值,目前可排除协议栈烧录问题,故将问题设定在软件初始化位置。
问题1总结:
1、改动唯一变量(硬件/软件),进行项目测试。本次排查问题通过仿真已交付项目的1.2,1.6,1.8TPS协议工程都可以正确访问,故可排除硬件问题。
2、确定TPS-1的复位引脚(FMSC)。
3、验证TPS1相关使能寄存器是否填入正确值(写进去再读出来比较)。
4、成熟工程相关配置比较,本次问题就是出现在对IAR工程使用不熟悉造成的,没设置正确的仿真环境,通过以下设置后工程数据正常。
问题2描述:通过协议栈烧录后,在TIA环境中一直不能对IO模块进行名称分配和IP设置。
问题2总结:在TPS Configurator软件中的操作模式选择并口,从站类型应选择“TPS-1”,自己当时填的“PNIO”。
**问题三描述:**PC+PLC+IO模块 通过交换机相连,在IAR工程存在上图函数时,将程序下载到单片机中然后退出debug模式(不进行代码运行),然后在TIA环境更新可访问设备是一直找不到IO模块的(现象是一直发送请求报文)
问题三总结:
第一步:将IAR工程debug运行一下并退出,然后在TIA双击扫描在线设备才可以扫描到IO模块,接着通过分配设备名称和IP配置,并分配PLC和IO模块,最后将工程下载到PLC中。此时通过wireshark可以发现设备(有请求,有回复),说明DCP协议正常。第二步:此时整个环境都断电,并重新上电,在TIA环境更新可访问的设备时一直找不到IO模块,并且wireshark一直发送请求包,找不到IO模块,DCP发现并配置设备是失败的。总结:上述场景必须每次都需要在IAR环境将工程debug运行一下才可以发现设备并配置设备,这个现象侧面说明程序固化到MCU中不能自己运行,这个问题待进一步确认根源。
若将上图函数注释掉,将代码更新下载到MCU中,断电并重新上电,在TIA环境中更新可访问设备是可以直接扫描到IO模块的,并且在wireshark下是可以看到DCP协议有请求有回复,属于正常现象。
问题四描述:使用官方源代码的自动配置功能,通过wireshark抓包分析,不管是固化代码让其上电自启动或者在IAR中debug代码,现象是控制器PLC与IO模块都建立不了连接。
问题四总结:代码去掉了自动配置功能,并参考官方提供的GSDML文件确定槽和子槽的相关参数,并在configDevice和ConnectReq函数中修改源码,现象是固化代码上电自启动建立不了连接,但在IAR中进行debug程序仿真,控制器PLC与IO模块是可以建立连接的(全速运行不加断点),并且没有错误码(之前使用了1.2版本的TPS协议栈的GSDML文件,会一直出现错误码)。