ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

自研从站设备调试过程

自研从站设备调试过程 TwinCAT 项目设置 — MCUXpresso SDK 文档TWINCAT-沈蓝色R-RT-T-EBUS连接第一版base扫描端口有如下问题TWINCAT-沈蓝色R-RT-T-EBUS连接DA的端口1扫描端口有如下问题默认线性模式数据从Port A → Port B穿过Port C 和 Port D 被禁用Closed。即使你插了网线物理层能看到Carrier但数据链路层不会把数据转发到 Port C所以后面的从站收不到报文。TWINCAT-沈蓝色R-RT-T端口1-MII连接端口2 -EBUS连接DA的端口1扫描端口有如下问题到此处怀疑是否是TWINCAT配置问题新建工程重试辛苦了改XML适配不同从站目前问题两从站的XML名称不同但是TWINCAT识别到的后缀相同可以理解为两套设备为同一个kkslave SSC_Device SSC_Device [EL9800-0000-0001] DAC_Device [EL9800-0000-0001]SSC_Device [EL9800-0000-0001]和DAC_Device [EL9800-0000-0001]它们括号里的内容完全一样。这恰恰说明了问题的核心这两个.xml文件内部定义的“正式身份标识”是相同的。根据倍福Beckhoff官方的说明一个 EtherCAT 设备完整的标识符由四个属性决定通常表现为系列号-型号-子版本-修订版本的结构。在你的例子里SSC_Device和DAC_Device更像是“显示名称”是给人看的TwinCAT 用来在界面里做展示。而EL9800-0000-0001才是这个设备真正的“身份证号”是 TwinCAT 用来识别设备的唯一标识。所以正是因为两个.xml文件的“身份证号”一样不管它们的名字是SSC_Device还是DAC_Device在 TwinCAT 看来它们就是同一个设备类型。因此当你给 Box 2 更新 EEPROM 时列表中看到的是同一个型号自然只能烧录同一份配置。解决方案一给第一块从站改固件改xmlDA从站XML注意事项Device PhysicsYYY指的是MII接口K为EBUS模式要改。DA从站进不了OP状态-调试过程记录现象1.尝试改XML中EEPROM字段为Eeprom ByteSize2048/ByteSize ConfigData050E03440A0000000000/ConfigData操作关闭twincat放置新XML到地址打开twincat扫描更新EEPROM重新扫描。没变化2.考虑STM32H755双核的问题Agent操作STM32Cubegrogrammer安装后操作取消选中BCM4然后apply不中。3.SPI1初始化逻辑问题初始化为低电平片选也是低电平有效改为初始化高电平试试/*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, SPI3_CS_Pin|SPI1_CS_Pin, GPIO_PIN_SET);4.降低波特率改为256/* SPI1 init function */ void MX_SPI1_Init(void) { /* USER CODE BEGIN SPI1_Init 0 */ /* USER CODE END SPI1_Init 0 */ /* USER CODE BEGIN SPI1_Init 1 */ /* USER CODE END SPI1_Init 1 */ hspi1.Instance SPI1; hspi1.Init.Mode SPI_MODE_MASTER; hspi1.Init.Direction SPI_DIRECTION_2LINES; hspi1.Init.DataSize SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity SPI_POLARITY_HIGH; hspi1.Init.CLKPhase SPI_PHASE_2EDGE; hspi1.Init.NSS SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_256; hspi1.Init.FirstBit SPI_FIRSTBIT_MSB; hspi1.Init.TIMode SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial 0x0; hspi1.Init.NSSPMode SPI_NSS_PULSE_ENABLE; hspi1.Init.NSSPolarity SPI_NSS_POLARITY_LOW; hspi1.Init.FifoThreshold SPI_FIFO_THRESHOLD_01DATA; hspi1.Init.TxCRCInitializationPattern SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; hspi1.Init.RxCRCInitializationPattern SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; hspi1.Init.MasterSSIdleness SPI_MASTER_SS_IDLENESS_00CYCLE; hspi1.Init.MasterInterDataIdleness SPI_MASTER_INTERDATA_IDLENESS_00CYCLE; hspi1.Init.MasterReceiverAutoSusp SPI_MASTER_RX_AUTOSUSP_DISABLE; hspi1.Init.MasterKeepIOState SPI_MASTER_KEEP_IO_STATE_DISABLE; hspi1.Init.IOSwap SPI_IO_SWAP_DISABLE; if (HAL_SPI_Init(hspi1) ! HAL_OK) { Error_Handler(); } /* USER CODE BEGIN SPI1_Init 2 */ /* USER CODE END SPI1_Init 2 */ }改回16查寄存器分析如下改定时器--改完没有用去掉MPU部分GPIO中CS信号改为初始高电平调换main()中前两行的位置上板通了其实你就是最棒的小女孩面对困难不放弃一个人也可以走很远的路。输出电压激励先修固件当前DAC仍处于掉电状态位置如下0x0000在±10 V量程下不是0 V退出OP时更安全的处理是写DACPWDWN 0xFFFF让输出真正进入掉电接地状态。可以啦
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进