This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LP-AM243:需要有关 EtherNet/IP EDS 文件和 CODESYS 的帮助

Guru**** 2371130 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1532407/lp-am243-need-help-on-ethernet-ip-eds-file-and-codesys

器件型号:LP-AM243

工具/软件:

我的 EDS 文件和 CODESYS 存在问题。 请检查我的 Ethernet/IP 程序是否正常。

谢谢、

Thien Tran

//********************************************************************************************
//文件:app8AI.c
//说明:8 个模拟输入(内部 ADC)、每个可选择 0–5V 或 4–20mA
//与通过 CIP 类 0x70、实例 0x01 访问 EtherNet/IP 属性兼容。
//********************************************************************************************

#include “app8AI.h"</s>“
#include
#include
#include
#include “ti_drivers_config.h"</s>“
#include “ti_drivers_open_close.h"</s>“
#include “EI_API.h"</s>“

//用于原始 ADC 结果的内部缓冲区
静态 uint16_t GEI_APP_8AI_RESUL[EI_APP_8AI_NUM_channels]={0};

//每通道模式:0 =电压 (0V–5V)、1 =电流 (4–20mA)
静态 uint8_t GEI_APP_8AI_MODE[EI_APP_8AI_NUM_channels]={0};

void EI_APP_8AI_setChannelMode(uint8_t 索引、uint8_t 模式)

IF(索引< EI_APP_8AI_NUM_CHANNES)

GEI_APP_8AI_MODE[index]=(模式!= 0)? 1:0;
}
}

void EI_APP_8AI_init (void)

uint32_t baseAddr = CONFIG_ADC0_BASE_ADDR;
adcStepConfig_t adcConfig;
uint32_t chCnt、adcStep;
int32_t configStatus;

ADCPowerUp (baseAddr、true);
ClockP_USleep (5U);
ADCInit (baseAddr、false、0U、0U);

adcConfig.mode = ADC_OPERATING_MODE_Single_Shot;
adcConfig.openDelay = 0x1U;
adcConfig.sampleDelay = 0U;
adcConfig.rangeCheckEnable = 0U;
adcConfig.AVERAGE = ADC_AVERAING_16_SAMPLES;
adcConfig.fifoNum = ADC_FIFO_NUM_0;

对于 (chCnt = 0u;chCnt < EI_APP_8AI_NUM_channels;chCnt++)

adcConfig.channel = ADC_CHANNEL_1 + chCnt;
adcStep = ADC_STEP_1 + chCnt;
configStatus = ADCSetStepParams (baseAddr、adcStep、&adcConfig);
DebugP_assert (SystemP_Success == configStatus);
ADCStepEnable (baseAddr、adcStep、true);
}

ADCStepIdTagEnable (baseAddr、true);
configStatus = ADCSetCPUFIFOThresholdLevel (baseAddr、ADC_FIFO_NUM_0、40U);
DebugP_assert (SystemP_Success == configStatus);
}

void EI_APP_8AI_readInputs (void)

uint32_t baseAddr = CONFIG_ADC0_BASE_ADDR;
uint32_t fifoData、fifoWordCnt、stepID;

ADCStart (baseAddr、true);
ClockP_USleep (200);

fifoWordCnt = ADCGetFIFOWordCount (baseAddr、ADC_FIFO_NUM_0);
对于 (uint32_t i = 0u;i < fifoWordCnt;i++)

fifoData = ADCGetFIFOData (baseAddr、ADC_FIFO_NUM_0);
StepID =(fifoData & ADC_FIFODATA_ADCCHNLID_MASK)>> ADC_FIFODATA_ADCCHNLID_SHIFT;
fifoData =(fifoData & ADC_FIFODATA_ADCDATA_MASK)>> ADC_FIFODATA_ADCDATA_SHIFT;

IF (stepID < EI_APP_8AI_NUM_channels)

GEI_APP_8AI_RESULTs[stepID]= fifoData;
}
}

ADCStart (baseAddr、false);
}

uint16_t EI_APP_8AI_convertTo_mV (uint16_t raw)

返回(原始* EI_APP_8AI_REF_VOLTAGE_MV)/ 4095U;
}

uint16_t EI_APP_8AI_convertTo_uA (uint16_t raw)

uint16_t mV = EI_APP_8AI_convertTo_mV (raw);
返回 (mV * 1000U)/ 250U;// 250 Ω 分流电阻器
}

uint16_t EI_APP_8AI_getValue (uint8_t channelIndex)

IF (channelIndex < EI_APP_8AI_NUM_channels)
返回 GEI_APP_8AI_Results[channelIndex];
返回 0;
}

uint16_t EI_APP_8AI_getEngineeringUnits (uint8_t channelIndex)

IF (channelIndex >= EI_APP_8AI_NUM_channels)
返回 0;

Uint16_t RAW = GEI_APP_8AI_RESULTS [channelIndex];

IF (GEI_APP_8AI_MODE[channelIndex]= 0)
返回 EI_APP_8AI_convertTo_mV (raw);//返回 mV
暴露
返回 EI_APP_8AI_convertTo_uA (RAW);//返回 uA
}

void EI_APP_8AI_deInit (void)

uint32_t baseAddr = CONFIG_ADC0_BASE_ADDR;

对于 (uint32_t chCnt = 0u;chCnt < EI_APP_8AI_NUM_channels;chCnt++)

ADCStepEnable (baseAddr、ADC_STEP_1 + chCnt、false);
}

ADCStart (baseAddr、false);
ADCPowerUp (baseAddr、false);
}

//----------------------------------------------------------------------------------------------------
// Ethernet/IP 属性更新函数
//----------------------------------------------------------------------------------------------------
void EI_APP_8AI_updateCIPATtributes (EI_API_CIP_NODE_T *pCipNode)

EI_APP_8AI_readInputs();

对于 (uint16_t i = 0;I < EI_APP_8AI_NUM_channels;I++)

uint16_t eng = EI_APP_8AI_getEngineeringUnits (i);
uint8_t scaled = eng >> 4;//缩放以适应 0–255 范围 (USINT)

//使用属性 ID 范围 0x0310–0x0317
EI_API_CIP_setattr_USINT(pCipNode、0x70、0x01、0x0310 + I,缩放);
}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Thien:

    与 EtherNet/IP 相关的代码可能是正确的、您正在使用 ADC 值更新一些属性。 我假设您要通过 IO 连接发送这些值、那么如果您的生产程序集也配置为使用这些属性、那么您会看到它们也反映在 IO 数据交换中。

    当然、应该定期调用函数“EI_APP_8AI_updateCPATributes"来“来更新属性。

    此致、
    Pourya