Владимир Ситников
Начал испытания в железе на столе. Обнаружил проблему с обменом.
Когда обращаюсь так:
имею пустые данные, т. е. обмена нет. Как со входными, так и с выходными данными.Код:Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_ENCOER_COUNTER_Enc_Position;(*Показания энекодера*)
Когда обращаюсь так:
То проблем нет, всё работает нормально.Код:ENCODER_AND_COUNTER_Pru0MemoryTransfer( PRU_ENCOER_COUNTER_DO3:=FDO3 , (*Прямое управление выходом FDO3*) PRU_ENCOER_COUNTER_DO4:=FDO4 , (*Прямое управление выходом FDO4*) PRU_ENCOER_COUNTER_count_Enable:=RunTransport ,(*Запуск транспорта*) PRU_ENCOER_COUNTER_count_Lenght:= Lenght ,(*Пройденный путь*) running=> , writeFails=> , readFails=> , PRU_ENCOER_COUNTER_Enc_Position=>Enc ,(*Показания энкодера*) PRU_ENCOER_COUNTER_Enc_ZeroDetect=>ZeroDetect ,(*Обнаружение машинного нуля*) PRU_ENCOER_COUNTER_count_Path=>Path );(*Пройденный путь транспорта*)
В обоих случаях компиляция происходит без ошибок и предупреждений.
Вполне допускаю, что напутал с синтаксисом в первом случае.
Последний раз редактировалось Владимир Ситников; 18.01.2017 в 13:23.
Владимир, а у меня та же самая история ?
Так не работает.
SteppersConfig_Pru0MemoryTransfer(
STEPPER2_Enc_PRU0_dir := TRUE,
STEPPER2_Enc_PRU0_stepper_accel_ramp := 2000,
STEPPER2_Enc_PRU0_stepper_decel_ramp := 2000,
STEPPER2_Enc_PRU0_stepper_max_speed := 20000,
STEPPER2_Enc_PRU0_stepper_min_speed := 0,
STEPPER2_Enc_PRU0_stepper_quantity := 16#FFFFFFFF,
STEPPER2_Enc_PRU0_stepper_enable := TRUE
);
ENC := SteppersConfig_Pru0MemoryTransfer.STEPPER2_Enc_PRU 0_encoder_position;
Если сделать так, то энкодер будет опрашиваться ?
SteppersConfig_Pru0MemoryTransfer(
STEPPER2_Enc_PRU0_dir := TRUE,
STEPPER2_Enc_PRU0_stepper_accel_ramp := 2000,
STEPPER2_Enc_PRU0_stepper_decel_ramp := 2000,
STEPPER2_Enc_PRU0_stepper_max_speed := 20000,
STEPPER2_Enc_PRU0_stepper_min_speed := 0,
STEPPER2_Enc_PRU0_stepper_quantity := 16#FFFFFFFF,
STEPPER2_Enc_PRU0_encoder_position => ENC,
STEPPER2_Enc_PRU0_stepper_enable := TRUE
);
Последний раз редактировалось Newcomer; 18.01.2017 в 13:34.
Насколько я понял, нужно в начале цикла ПЛЦ_ПРГ сделать вызов ПРУ-ПОУ (ENCODER_AND_COUNTER_Pru0MemoryTransfer в моем случае) с пустыми параметрами, и после этого должно заработать непосредственное обращение к любой переменной ПРУ-ПОУ?
В принципе, то, как сейчас работает устраивает. Однако для большей понятности программы (в первую очередь для себя, ибо "с памятью моей что-то стало") хотелось бы иметь возможность обращаться к нужным переменным обмена из любого места ПЛЦ-ПРГ.