Стартовая страница › Форумы › Взаимодействие с устройствами › Опрос ПЛК100 переменные типа float
- В этой теме 23 ответа, 3 участника, последнее обновление 9 лет, 3 месяца назад сделано
bvlbond.
-
АвторЗаписи
-
09.06.2017 в 09:35 #6070
bvlbond
УчастникНастроил коммуникатор для опроса ПЛК100. В плк есть 3 переменных типа float.
Для опроса в коммуникаторе задал адрес 4 для опроса первой переменной. Все замечательно, данные считались. Меняю адрес на 6, тоже читаю следующую переменную.
Меняю адрес на 8- получаю ошибку недействительный адрес. Помогите разобраться с адресацией.http://s019.radikal.ru/i628/1706/b4/899ab182451a.png
09.06.2017 в 11:24 #6071
manjey73Участникнеправильно указываете адреса.
у Овен адресация с 0, в scada с 1 + выравнивание адресов в Овен.
получаем
0 — Word (один регистр) правильно указали 1 в SCADA
2 — f1 (два регистра) — 3-4 в scada порядок байт 2301
4 — f2 —————- 5-6 в scada порядок байт 2301
6 — f3 —————- 7-8 в scada порядок байт 2301Вы просто считали пол регистра одной переменной, пол регистра второй и так как не меняли порядок байт получили вроде правильные значения.
а добавив 3-й float вы перешагнули границу существующих регистров.Как-то так, если не ошибся в расчетах выравнивания
09.06.2017 в 19:25 #6083bvlbond
Участникспасибо все работает.
09.06.2017 в 22:01 #6084bvlbond
Участникчитать научился теперь бы писать научиться. создал формулу
public double fRevers (int rev)
{
float q = Convert.ToSingle(CmdVal);
byte[] f = new byte[4];
byte[] o = new byte[4];
f = BitConverter.GetBytes(q);
Array.Copy(f,0,o,0,4);
if (rev == 1)
{
Array.Copy(f, 0, o, 1, 1);
Array.Copy(f, 1, o, 0, 1);
Array.Copy(f, 2, o, 3, 1);
Array.Copy(f, 3, o, 2, 1);
}
Array.Resize(ref o, 8);
Double ou = BitConverter.ToDouble(o,0);
return ou;
}в администраторе вызываю как fRevers(1). К коммуникаторе смотрю журнал линии связи в значении в данных регистра нули. . команда множественная количество элементов два. Таблица данных холдинг регистр.Что не так?
09.06.2017 в 23:04 #6085
manjey73Участникна счет значения в Данных КП я не помню что должно быть из-за перестановки байт.
у меня работало на ПР200 и ПЛК63. на ПР100 не проверял.
Тип команды Стандартная в канале управления ?10.06.2017 в 14:17 #6086bvlbond
Участникда, старндартная. У меня ПЛК100. По идее должно быть аналогично пр200
10.06.2017 в 21:40 #6090
manjey73Участникдайте скрины всех настроек, лучше на файлообменники для картинок а тут ссылки.
10.06.2017 в 21:55 #6091
manjey73УчастникПроверьте номер команды КП в шаблоне, могли забыть поменять. Ну и то, что в каналах управления указано ?
11.06.2017 в 09:47 #6093bvlbond
Участникканалы управления
https://cloud.mail.ru/public/Fe84/HR8vT5K3F
настройки коммуникатора
https://cloud.mail.ru/public/74Ph/uuaJWfH4gпри просмотре линии связи вижу что в отправляемых регистрах 0
11.06.2017 в 10:10 #6095
MikhailМодераторВы можете использовать бинарную команду. Это позволит избавиться от BitConverter.ToDouble, исключив возможную ошибку преобразования. С точки зрения UI будет отображаться то же самое.
Бинарная команда в канале управления будет работать только для Множественной команды в шаблоне Модбас.-
Ответ изменён 9 лет, 3 месяца назад пользователем
Mikhail.
11.06.2017 в 12:02 #6098
manjey73УчастникБлин, проверю последнюю версию на ПР200 завтра.
Вчера удаленно проверял на ПР200, все работает, но там не совсем последняя версия SCADA установлена.Откуда ошибка преобразования если на Visual Studio работает отлично ?
з.ы. Зато вот в С# есть ошибка (ushort)Значение в Double — реальная ошибка, так как часть значений коверкает, убедился опытным путем. Теперь только Convert.ToUInt16(double) делаю и никак иначе.
-
Ответ изменён 9 лет, 3 месяца назад пользователем
manjey73.
11.06.2017 в 13:50 #6101bvlbond
Участникбинарная. это надо оператору вводить нолики и еденицы? Где про это можно почитать?
12.06.2017 в 07:47 #6108bvlbond
Участникможно примерчик работы с бинарной командой?
12.06.2017 в 09:04 #6112
manjey73Участникне совсем, надо сделать формулу, чтобы вводить стандартное значение, а сервер передавал бинарную. Если конечно прибор будет принимать.
у меня сейчас платы с али лежат, бинарную команду вообще не принимают, хотя в чем разница для ноликов и единиц не понимаю…12.06.2017 в 23:07 #6113bvlbond
Участникчто так формулу надо делать что этак. Мне бы любым способ проблему решить. Все сроки уходят
-
Ответ изменён 9 лет, 3 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.