спасибо за совет сейчас буду продовать сделать это в теле программы
Вид для печати
а поконкретней можеш подсказать я в только начинающий это мой первый проект как это в ST сделать по адекватней и кстате по правильная цифра вышла
Вот ты сам можешь понять, чьо написал, дружище? Правильная или нет?
"Можешь не отвечать. Потом скажешь. Сюрприз будет" :)
Да я бы помог. Лежу, хвораю, мышку гоняю. Но ты же спросил... как козел в воду. Я, честно, просто не понимаю, что там где не так. Вот, сейчас готов сидеть и морщить лоб. Но ты РАССКАЖИ толком. Ок?
мне надо вот это 10 значное преобразовать в С сделать это нужно в самом тексте программы программа на ST нужно это чтобы работать с этими даными можно было в идеале нужно получить 3 значное int число в котором первые два знака это целое значение градуса а третий это значение десятичной части вычесленного числа. Так пойдет?)
Это 10-значное - где оно? Как оно объявлено? Это переменная, верно? Всякая переменная как-то объявлена.
Не хочу тебя просить выкласть проекты - жуть как не люблю запускать чужие. Просто фотку (скриншот), где у тебя объявлена переменная, если сходу не можешь ответить. Так пойдет? ;)
Например, вот я могу сказать, что у меня в области ввода-вывода есть переменная wipScrNum - и тип ее есть WORD:Вложение 8174
переменная объявлена в самом тексте в конфигураци не объявлял
объявленна как
proda_dat: REAL;
значение присваевается так
proda_dat:=%ID6.1.0.0;
покажи ID6.1.0.0 в своей конфигурации, партизан!
И как ты смотришь значение?
могу в личьку кинуть не хочет чет опера скрин вставлять а значеие считываю очень просто во флот32 просто адрес регистра проставил 0004
"За старательность 5, за внимательность 2", как в анекдоте про морг.
1) Просто посмотри, что у тебя написано после двоеточия в конфигураторе
ID6.1.0.0: ???
2) Я спросил, чем смотришь значение переменной (proda_dat)
ID6.1.0.0: REAL
пока не чем просто при запуске проекта в разделе объявлений
Значит, ты создал в конфигураторе связь ПЛК и МВВ. Там есть переменная типа REAL, которую ты получаешь из МВВ. Ее значение ты видишь в онлайне?
Потом ты присваиваешь это значение другой переменной. Тоже REAL. И его должен видеть - как в области объявления, так и в теле программы, где сам оператор присоваивания. Так? И все эти значения совпадают и не равны ожидаемым 29 градусам. Так?
А где и как ты видишь 29 градусов?
Постарайся отвечать на все вопросы, а не только на последний
да я связь есть переменную входу я не присваивал но да у него тип реал читаю значение этого входа через битовую адресацию уже в самом теле программы приравнивая переменную ко входу и вот эти значения и есть 10 значные
а 29 градусов отображаються а конфигураторе ПЛК в онлайне напротив адреса входа просто в я настройках Real input module во вкладке параметры модуля поставил адрес регистра 0004 вот в данном случае отображаеться температура в С
Ну так за время нашего здесь трепа уже 100500 раз можно было и имя переменной присвоить, и фотки научиться выкладывать...
Давай все же проект. Надо смотреть, что там не так. Если проект большой - тем лучше. Отрежь из него вот этот самый минимум - конфигурация и присвоение. И запусти. Если там и так ничего больше - выкладывай все
присвоеие имени ни чего не меняет пробовал...
Не могу сейчас ставить ПЛК110. Не увижу твоей конфигурации. Тренируйся на фото.
Нужно фото конфигуратора (области ввода-вывода), а также фото во время отладки - как конфигуратора, так и программы.
Что там не клеится со скриншотом? В чем затык?
А что за документация в руководстве пользователя мало что сказано только перечень параметров которые можно настроить только вот они все заблокированы по факту... может какую другую литературу подскажите?
да бох его знает не хочет в ставлять как и нет его нахожу файл выбираю и все не добавляет ни ошибку ни че могу а мыло скинуть через почту нормально идет
Ну, проект посмотрел. Ничего особенного не вижу. Тут самый интерес, верно ли ты нам рассказываешь о поведении программы. Потому как регистр номер 4 - нормально, лишь бы слейв это знал. Обращение по прямому адресу - не криминал. Ничего стороннего тоже не видно.
так со скрином разобрался
а это уже запушенный
попробуйте Ваш набор с процентом "обуть" в преобразование дворд то реал, может чего получится, а вообще в конфигураторе надо имена присваивать, чтоб не терять попусту время
Я правильно вас понял?
Там есть интересный момент, который наш друг чуть не выплеснул. Но на фото "до запуска" уцелело значение, которое КДС "видит" в переменной %ID6.1.0.0
Вложение 8181
С удивлением вижу, что здесь его значение трактуется, как банальное целое. Причем, его двичное представление ТОЧНО равно вот тем самым 23,74 градусам (похолодало, пока мы здесь кипим). То есть, никакой путаницы с адресом нет. А вот с типом данных чичтема что-то сплоховала. Или мы мало знаем.
Лично я никогда не гоняю по интерфейсам флоаты. Так что причину сказать не могу. Если система трактует объявленное вещественное, как целое, какие уж тут дела.
Конечно, можно вывернуться. Пойнтеры - вот наш ответ. Но это именно что через жопу.
Завтра модераторы хорошо почистят эту ветку. Мы здесь нагадили. А все потому, что некоторые ленятся вопрос пространно задать, да картинок наделать :)
Да вот, сегоднят день такой, бездельный. Я запустил проект - и с указателями. Вот как выглядит:
Вложение 8182
Остается вопрос, почему так пришлось делать. Но нашему коллеге и так должно быть хорошо
дико извиняюсь, господа бездельники, а может тупо надо F5 нажать :)
Так смотри - у меня же нажато. И результат есть. Я думал, уже все ясно. Равно как и то, что твой путь не прокатил. Это же видно на скриншоте автора вопроса.
Кстати, можно минимизировать вот так:
Вложение 8183
Результат так же хорош :)
Бугага! А вот такой вариант тоже катит:
Вложение 8184
И я теперь в ступоре.. Почему исходное не работало? Щас восстановлю сырец...
Краткое резюме. Достаточно заменить абсолютный адрес на имя - и исходный проект работает. Почему для этого нужно, чтобы были имя - хз. Пусть на это ответят знатоки теории.
Итак, вот минимальная правка к проекту автора вопроса, что б ему сладко спалось сегодня:
Вложение 8185
Вот результа работы в симуляторе:
Вложение 8186
Как видим, ничего с пойнтерами и не нужно делать. Хотя все равно пойнтеры - сила :)
Прошу прощения у модераторов за разведенный здесь долгий и малополезный с... э... спор.
Можно ли как-то с контроллера (ПЛК63) отслеживать, влючен ли соединенный с ним ПК? Именно в автоматическом режиме, без необходимости регулярно что-то нажимать.
На ПК крутится CoDeSys HMI, других средств не предвидится.
ПЛК63 не сможет Вам дать CoDeSys HMI. Он в нем не заработает.
"Спасибо" в стакан не нальешь :) Ты бы хоть сказал, получилось ли? Ведь был постинг с утерждением. что использование имени "не помогло". Вот это меня и беспокоит. Хотя не очень :)
Приехали... Если мерить положительную температуру - все просто. А вот отрицательную - то получается 632.45 - классический "переход через ноль"... Пока решил
Может, есть какой более простой способ?Цитата:
IF TEMP > 32300 THEN
Temperature := (655.35-(REAL_TO_WORD(TEMP))*-1;
END_IF
Прошу прощения, обманул... Плохо спрашивать вдали от текста..
На самом деле я написал такое:
Волшебная цифра 327.67 - это значит, что датчик отвалился...Код:FUNCTION Temperatur : REAL
VAR_INPUT
Temper_W: WORD;
END_VAR
====================================
IF Temper_W > 32767 THEN
Temperatur := -1*(655.35 - WORD_TO_REAL(Temper_W)/100);
ELSIF Temper_W < 32767 THEN
Temperatur := WORD_TO_REAL(Temper_W)/100;
ELSE
Temperatur := 327.67;
END_IF
Оно работает, но что-то мне это не очень нравится...
Да, и как REAL округлить до двух знаков после запятой?
Нету никакого перехода. Он вам приснился. Пробуйте так:Цитата:
Приехали... Если мерить положительную температуру - все просто. А вот отрицательную - то получается 632.45 - классический "переход через ноль"
Код:PROGRAM PLC_PRG
VAR
TMP: REAL;
END_VAR
TMP := INT_TO_REAL(WORD_TO_INT(TEMP01)) / 100.0;
Т.е. я догадываюсь, что рамерность у WORD и INT одинаковая. То, что 0 в WORD это 0 в INT - тоже.Код:Тип Нижний предел Верхний предел Размер памяти
WORD 0 65535 16 Бит
INT -32768 32767 16 Бит
Но то, что 32768 в WORD это -32768 в INT я и представить не мог... :confused: