Недавно попробовал создать свою функцию для преобразования REAL в S5TIME, все проверил всё работает (вызывал функцию только в одном месте), однако при использовании функции в нескольких местах программы, начинается белиберда, как я понимаю вся проблема в локальных переменных, которые записываются из разных мест "одновременно", понял, что надо использовать FB вместо FC, однако для FB требуется генерировать блок данных DB (так-то проблем нет, но функцию собираюсь использовать часто - > DB'шек будем много, может возникнуть путаница). Вспомнил про функцию из библиотеки stlibs\iec\FC 40 "TIM_S5TI", эта функция работает нормально при любых обстоятельствах независимо от количества точек входа.
Отсюда вопрос, может я что-то неправильно делаю в своей FC?
Собсно сама функция
Show
Code: Select all
L #TIME_REAL
L 9.990000e+000
<=R
JC T000
L #TIME_REAL
L 9.990000e+001
<=R
JC T001
L #TIME_REAL
L 9.990000e+002
<=R
JC T002
L #TIME_REAL
L 9.990000e+002
>R
JC T003
T000: L #TIME_REAL
L 1.000000e+002
*R
T #BUFF_R
RND
T #BUFF_DI
DTB
T #BUFF_W
L #BUFF_W
T #S5T_OUT
JU TEND
T001: L #TIME_REAL
L 1.000000e+001
*R
T #BUFF_R
RND
T #BUFF_DI
DTB
T #BUFF_W
L #BUFF_W
L W#16#1000
OW
T #S5T_OUT
JU TEND
T002: L #TIME_REAL
L 1.000000e+000
*R
T #BUFF_R
RND
T #BUFF_DI
DTB
T #BUFF_W
L #BUFF_W
L W#16#2000
OW
T #S5T_OUT
JU TEND
T003: L #TIME_REAL
L 1.000000e-002
*R
T #BUFF_R
RND
T #BUFF_DI
DTB
T #BUFF_W
L #BUFF_W
L W#16#3000
OW
T #S5T_OUT
TEND: NOP 0