PDA

Просмотр полной версии : в КДС не записываются по ctrl+F7 переменные в онлайне



sas7
13.04.2017, 10:22
Не записываются по ctrl+F7 переменные в онлайне

Есть переменные спроецированные на память modbus.
Типы разные int, bool, union.

Проецирование на память модбас делается и в область input и в область output. Задано перекрытие областей. Это сделано для того, чтобы значение можно было и читать и писать внешним устройством. Как сделать по-другому незнаю. Если не задавать одну и ту же переменную в маппинге и во вход и в выход, она либо пишется но при чтении равна 0, либо имеет значение но запись по модбас не проходит.

Так вот, для переменных типа int в онлайне КДС можно задать предустановленное значение и записать его по ctrl+f7, а для типов bool и union запись не работает. Для bool работает force.

union используется для выкладывания в память модбас переменных типа real и dint. объявил юнион и представляю эти типы как массив [0..1] типа word. в модбас проецирую слова

думаю это связано с тем что и биты и вариант типа в union являются вложенными т.е. и спроецированный бит входит в состав слова карты памяти модбас, и к элементу юниона я обращаюсь как к элементу my_real.value при том что в маппинге модбас пишу my_real.w[0] и my_real.w[1]

при этом в программе запись в биты и my_real.value := 3.1415926 работает

есть ли способ записывать в bool и union значения по ctrl+F7 (например в watch'е)?

Осинский Алексей
14.04.2017, 09:01
Доброе утро!
Приложите пожалуйста Ваш проект (оставьте в нем только проблемное место), так будет легче разобраться в проблеме.

sas7
18.04.2017, 17:42
приложил. в проекте 3 переменные. все есть в маппинге модбас. если по модбас в адрес 4x0001 (маппинг ячеек [0]) записать 1 то в другие две программно запись пройдет. а вот по ctrl+f7 запись не проходит.

дополнительно вопрос - чтобы работал маппинг я делаю на мой взгляд бесполезные действия в коде типа
var1:=var1;
для того чтобы значение из inputs попало в outputs. без этих строк в outputs остаются нули даже при том, что в маппинге указана эта же переменная для outputs. без этого при чтении ячейки по модбас я увижу 0 даже после записи в нее по модбасу.
можно ли обойтись без этого и видеть по модбас значения которые записал по модбас?

sas7
19.04.2017, 12:49
это кстати отдельный вопрос: почему на функцию модбас 0х10 КДС пишет в Input registers если по описаниям и возможно стандарту эти регистры только для чтения?

16 (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers)