Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Программное обеспечение
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Codesys

 Ответить Ответить Страница  <12
Автор
Сообщение
sanwork Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 08 Март 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 440
Свойства публикации Свойства публикации   Ответить, цитируя автора - sanwork Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Codesys
    Опубликовано: 11 Декабрь 2012 22:40

Если идет обмен данными по линии то принятые байты сразу переносят в переменную нужного типа, т-е если внутреннее число типа Real то создется переменная типа Real  в неё помещается четыре принятых байта и вся внутренняя работа программы идет уже только с этой переменной - с буфером приема-передачи прямо никогда не работают

С уважением, SAN

Наверх
VL_ Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Март 2012
Online Status: Offline
Публикации: 16
Свойства публикации Свойства публикации   Ответить, цитируя автора - VL_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 12 Декабрь 2012 11:18
Собственно в этом и вопрос. В ваговской библиотеке обмен по модбасу с помощью буфера
rBuf  : ARRAY [0..99] OF WORD; (* Readed data from remote modbus slave *)
в нем могут содержаться значения как целые так и вещественные

например в rBuf[0]-rBuf[1]  вещественное число
как корректно его поместить в переменную Real? Например без использования указателей?




Наверх
sanwork Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 08 Март 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 440
Свойства публикации Свойства публикации   Ответить, цитируя автора - sanwork Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Декабрь 2012 01:14
В проекте CoDeSys надо подключить библиотеку SysLibMem.lib в ней есть функции работы с памятью:

SysMemCpy() - копирование из одной области памяти в другую
SysMemMove() - тоже, но позволяет копировать с перекрытием
SysMemSet() - заполняет область памяти заданным значением
SysMemSwap() - переставляет байты местами
SysMemCmp() - сравнивает блоки памяти
SysMemFree() - освобождение занятой области

Обычно нужна SysMemCpy, иногда SysMemSet чтобы сразу очистить блок памяти

Во первых приемный буфер надо сделать байтовым чтобы легко работать с любыми данными: rBuf: ARRAY[0..199]OF BYTE,
и пусть будет переменная  rVar: REAL
Чтобы скопировать из буфера в переменную 4 байта начиная например с 5-го (считая с 0) элемента массива:

SysMemCpy(ADR(rVar), ADR(rBuf[5]), 4);

Обычно функции работы с памятью есть для всех целевых платформ, для всех типпов процессоров

С уважением, SAN

Наверх
 Ответить Ответить Страница  <12

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz