Просмотр полной версии : ПР200 и СП307- вопрос по сетевым переменным
Добрый день!
Панель- мастер, связь по 485-му. С панели задаю таймеру интервал от 0,1 до 1 сек.
Вопрос вот в чем: почему переменную приходится перемножать на некое число( в моем случае 656000- нашел опытным путем), чтобы получить 1000мс?
От чего это зависит? Причем эта константа такая, если умножаю в манели. Если умножать в пр-ке - то там совсем другое?
Спасибо!
вы уверены, что коэффициент не 65536? просто это похоже что у вас типы данных не совпадают. такое ощущение что вы пишете двойное слово вместо одинарного. у прки, да как и у любого другого модбас устройства регистры 16-ти битные. а если применять не правильный порядок слов в 32 битное числе и передавать его в виде двух последовательных модбас регистров именно такую чушь и получите.
Интересно... я запросто мог запутаться в этих word/dword. Само железо у меня на работе, могу только в ОЛ и конфигураторе панели смотреть. Я передаю панелью dec в dword, а пр принимает ее как целочисленную. Может в этом и ошибка?
конечно имнно в этом! если вам надо передавать уставки, выходящие за рамки word, то в прке надо собирать нужное значен е из двух регистров модбас. при этом панелью писать dword в регистр с меньшим номером из двух. но если вам не нужна точность настройки менее 0,1 секунды, то используйте просто word и уже регистр в прке умножайте на 100 и передавайте в вставку таймера.
панель при передаче dword автоматом разбивает на два последовательных модбас регистра. а вам просто повезло, что вы эти два регистра в пр создали. если бы была дырка поле регистра, то панель бы отвечала вам обрывом связи или иной ошибкой. плюс надо проверить: панель должна отправлять младшим регистром вперёд. но это касается только двухрегистровых данных типа флоат или дворд
Сергей0308
18.06.2022, 16:20
Зачем же ему два регистра использовать(тратить), если нужно уставку задавать диапазона 0,1 - 1 секунда с шагом(ступенькой) 0,1 секунда, и одного целочисленного регистра более чем достаточно!
Можно значение с экрана(FLOAT) умножить на 1000 и преобразовать в целочисленный тип данных(например "UINT"), если панель это может делать! Если панель не может такое делать, передавать значение FLOAT в ПР, в ПР умножить на 1000 и преобразовать в целочисленное, всё!
Можно сразу уставку задавать в миллисекундах и использовать целочисленную переменную, тогда и преобразовывать ничего не надо!
По какой-то причине в режимах эмуляции все получается достаточно понятно. Жаль, что не могу сейчас на железе это испробовать, но все попытки так или этак получались со странным результатом. Я начал с того, что просто передать 1(единицу) в пр. И я видел в режиме отладки просто 0. Бился целый день и нашел только костыли: в панели умножаю на константу в 656000 и отсылаю результат в пр. Тогда и вижу на уставке 1000. Разницы в отправке worg/dword не увидел. С fload запутался. 1-ца ваода на панели отобразилась на ней же нулем, и превратилась в пр в жуткое число( вроде с минус 49 степенью) и онлайн калькулятор выдал мне что это 0.
kondor3000
18.06.2022, 19:12
По какой-то причине в режимах эмуляции все получается достаточно понятно. Жаль, что не могу сейчас на железе это испробовать, но все попытки так или этак получались со странным результатом. Я начал с того, что просто передать 1(единицу) в пр. И я видел в режиме отладки просто 0. Бился целый день и нашел только костыли: в панели умножаю на константу в 656000 и отсылаю результат в пр. Тогда и вижу на уставке 1000. Разницы в отправке worg/dword не увидел. С fload запутался. 1-ца ваода на панели отобразилась на ней же нулем, и превратилась в пр в жуткое число( вроде с минус 49 степенью) и онлайн калькулятор выдал мне что это 0.
Если панель мастер, то достаточно в настройках поставить галку "Поменять местами регистры", тогда будет правильно читать, писать 32 битную переменную DWORD
(2 регистра) и REAL (Float) в том числе.
А типы переменных вы должны выучить как отче наш. Хоть в справке по F1 в конфигураторе СП300
И начните с простых чисел WORD (целочисленное) формат Unsigned, один регистр и ничего переставлять не надо. Вашу 1000 будет передавать правильно
Спасибо! Испробую все способы и отпишусь о результатах.
Спецом поехал на работу чтобы все выяснить и вот что оказалось: панель в word d dec и unsigned передает число (у меня установлено 2 знака дробная часть) невзирая на дробную часть. Т.е. 1.20 - передается как 120. С fload в dword и изменением порядка регистров - все передалось как надо. Будем знать.
И тот и другой способ в данном проекте меня полностью устраивают.
Спасибо всем большое за помощь!
это логично что фиксированная точка в word/dword просто виртуальная. и просто в таком виде выводится на экран.
но все равно переделайте обмен на word, иначе у вас будет пересечение регистров и вы не будете знать куда бежать. ну или резервируйте пустой регистр, хотя с 64 регистрами прки это просто запредельное расточительство
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot