Запись значения в ргеистр Segnetics

Стартовая страница Форумы Взаимодействие с устройствами Запись значения в ргеистр Segnetics

Просмотр 14 сообщений - с 1 по 14 (из 14 всего)
  • Автор
    Сообщения
  • #7315
    p001p
    Участник

    День добрый.
    1. Сконфигурированы каналы управления.
    http://savepic.net/9933322.png
    2. Сконфигурирован шаблон.
    http://savepic.net/9923082.png

    В устройство Segnetics записываем уставку Т или влажности по адресам (в Сегнетиксе)
    — A400
    — A402
    Формат данных: Real
    Формат данный который определяет OPC Lectus — single float — 4 byte.

    3. Настройки коммуникатора:
    http://savepic.net/9925130.png
    4. При отправке Комунад ТУ через коммуникатор — ничего не происходит. Записи нет.
    http://savepic.net/9926154.png
    5. Лог после отправки команды:
    http://savepic.net/9914890.png

    Делаю вывод что неправильно обращаюсь к контроллеру для записи в него уставки.
    Через Лектус по адресам А400 и А402(hex) все записывается.
    Вопрос, в чем может быть проблема?
    Может надо при выполнении команды, в соответствующий канал управления поставить какую формулу для переращета/перестановки битов? Ведь все-таки Holding Register это 2 байта, а не 4.
    Подскажите пожалуйста, что и куда.

    • Эта тема была изменена 6 лет, 7 месяцев назад от p001p.
    #7316
    p001p
    Участник

    1. Сконфигурированные каналы управления
    Сконфигурированные каналы управления

    2. Сконфигурированный шаблон опроса устройства по Modbus
    Шаблон опроса

    3. Настройки коммуникатора.
    Коммуникатор

    4. Лог после отправки Команды ТУ
    команда ТУ

    Лог после отправки

    Продублировал фотографии в надежде что они отобразятся.

    #7325
    Mikhail
    Модератор

    Добрый день!

    В логе момент отправки команды, скорее всего, уже прокрутился вверх.

    Ведь все-таки Holding Register это 2 байта, а не 4.

    Именно. Попробуйте поставить галочку Множественная команда и задать ей 2 элемента.
    И присылайте часть лога, в которой виден момент отправки.

    Чтобы фото отобразились нужен тег img:

    #7326
    p001p
    Участник

    Именно. Попробуйте поставить галочку Множественная команда и задать ей 2 элемента.
    И присылайте часть лога, в которой виден момент отправки.

    Так и делал.
    Скажите пожалуйста, если у меня адрес HEX А400, то +1 адрес это А401? А402? А404?

    #7327
    p001p
    Участник

    Итак.
    Немного изменили условия, чтобы можно было более детальней установить проблему.

    Имеется Holding Register, имя: Set, адрес в контроллере 00002, занимает 4 байта (00002-00004).
    Текущее значение: 0.
    Скриншот как её видит Lectus OPC.
    [img]http://savepic.net/9933439.png[/img]
    Изображение - savepic.net — сервис хранения изображений

    Задача — записать в неё значение. Любое.
    Соответственно, ещё раз почитав форум, понял что существуют достаточно серьёзная проблема с записью float, ибо коммуникатор обрезает double и т.п. и т.д. Поэтому я предлагаю не вдаваться в детальные подробности организации сети и передачи переменных, ибо нужен результат.

    Настройки линии связи. Модбас ТСП через ЕТ-485 Новатек.

    [img]http://savepic.net/9951871.png[/img]
    Изображение - savepic.net — сервис хранения изображений

    Шаблон КП.
    Так как в ПЛК адрес — 2, значит я опрашиваю на 1 больше -> 3 адрес, галочка на множ. перем. и в соответствующем окне — 2
    [img]http://savepic.net/9939583.png[/img]
    Изображение - savepic.net — сервис хранения изображений

    Значение переменной Set — 0. Задача — записать в нее что-либо.
    Отправляем команду через коммуникатор:

    [img]http://savepic.net/9943679.png[/img]
    Изображение - savepic.net — сервис хранения изображений

    Значение переменной не изменилось, (осталось 0), лог ответа представлен ниже.

    [img]http://savepic.net/9932415.png[/img]
    Изображение - savepic.net — сервис хранения изображений

    Вопрос, как записывать переменные float? Вечно сидеть на int (2 byte) я не могу.

    • Этот ответ был изменен 6 лет, 7 месяцев назад от p001p.
    • Этот ответ был изменен 6 лет, 7 месяцев назад от p001p.
    #7330
    p001p
    Участник

    Ниже представлен файл конфигурации Lectus OPC.

    Может он вам что-нибудь подскажет?

    <Lectus_OPC_server_config_file Protect="34101">
    	<_COM_PORTS_>
    		<COM1 Speed="115200" DataBits="8" Parity="NONE" StopBits="1" XONXOFF="NONE" DTR="ENABLE" RTS="ENABLE" CTS="false" DSR="false" RaiseRTS="0" DropRTS="0" ReadInterval="5"/>
    		<COM2 Speed="115200" DataBits="8" Parity="NONE" StopBits="1" XONXOFF="NONE" DTR="ENABLE" RTS="ENABLE" CTS="false" DSR="false" RaiseRTS="0" DropRTS="0" ReadInterval="5"/>
    		<COM3 Speed="115200"/>
    		<COM4 Speed="115200"/>
    		<COM11 Speed="115200" DataBits="8" Parity="NONE" StopBits="1" XONXOFF="NONE" DTR="ENABLE" RTS="ENABLE" CTS="false" DSR="false" RaiseRTS="0" DropRTS="0" ReadInterval="5"/>
    	</_COM_PORTS_>
    	<_ITEMS_>
    		<Item Name="Request1" Plugin="0" Flag="1" AccessPath="" AccessRights="3" CanonicalDataType="0" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="101" Props_0_DataType="8" Props_0_ItemID="" Props_0_Description="Описание узла" Props_0_Value="" Props_1_PropertyID="6" Props_1_DataType="4" Props_1_ItemID="" Props_1_Description="Частота опроса" Props_1_Value="100" Props_2_PropertyID="5000" Props_2_DataType="17" Props_2_ItemID="" Props_2_Description="COM порт" Props_2_Value="10" Props_3_PropertyID="5001" Props_3_DataType="2" Props_3_ItemID="" Props_3_Description="Адрес устройства" Props_3_Value="9" Props_4_PropertyID="5004" Props_4_DataType="2" Props_4_ItemID="" Props_4_Description="Функция чтения" Props_4_Value="1" Props_5_PropertyID="5005" Props_5_DataType="2" Props_5_ItemID="" Props_5_Description="Функция записи" Props_5_Value="15" Props_6_PropertyID="5002" Props_6_DataType="11" Props_6_ItemID="" Props_6_Description="Групповой запрос" Props_6_Value="True" Props_7_PropertyID="5999" Props_7_DataType="4" Props_7_ItemID="" Props_7_Description="Начальная фаза опроса" Props_7_Value="0" Props_8_PropertyID="5015" Props_8_DataType="8" Props_8_ItemID="" Props_8_Description="Тип подключения" Props_8_Value="Прямое подключение" Props_9_PropertyID="5027" Props_9_DataType="8" Props_9_ItemID="" Props_9_Description="Тип Slave подключения" Props_9_Value="Нет" Props_10_PropertyID="5029" Props_10_DataType="11" Props_10_ItemID="" Props_10_Description="Порядок байт - старшим байтом вперед" Props_10_Value="True" Props_11_PropertyID="5030" Props_11_DataType="11" Props_11_ItemID="" Props_11_Description="Порядок байт - старшим регистром вперед" Props_11_Value="False" Props_12_PropertyID="5052" Props_12_DataType="8" Props_12_ItemID="" Props_12_Description="Преамбула команды" Props_12_Value="" Props_13_PropertyID="5060" Props_13_DataType="11" Props_13_ItemID="" Props_13_Description="Широковещательная команда" Props_13_Value="False" Props_14_PropertyID="5073" Props_14_DataType="11" Props_14_ItemID="" Props_14_Description="Возможен ответ больше ожидаемого" Props_14_Value="False" Props_15_PropertyID="5061" Props_15_DataType="8" Props_15_ItemID="" Props_15_Description="Контрольная сумма" Props_15_Value="CRC (Modbus)" Props_16_PropertyID="5025" Props_16_DataType="11" Props_16_ItemID="" Props_16_Description="Тип устройства - Master" Props_16_Value="True" Props_17_PropertyID="5026" Props_17_DataType="11" Props_17_ItemID="" Props_17_Description="Тип устройства - Slave" Props_17_Value="False" Props_18_PropertyID="5031" Props_18_DataType="8" Props_18_ItemID="" Props_18_Description="Тип данных" Props_18_Value="Текущие данные">
    			<Item Name="Ask" Plugin="0" Flag="2" AccessPath="" AccessRights="3" CanonicalDataType="11" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="1" Props_0_DataType="2" Props_0_ItemID="" Props_0_Description="Тип переменной" Props_0_Value="11" Props_1_PropertyID="2" Props_1_DataType="12" Props_1_ItemID="" Props_1_Description="Значение переменной" Props_1_Value="" Props_2_PropertyID="3" Props_2_DataType="2" Props_2_ItemID="" Props_2_Description="Качество переменной" Props_2_Value="" Props_3_PropertyID="4" Props_3_DataType="7" Props_3_ItemID="" Props_3_Description="Метка времени" Props_3_Value="" Props_4_PropertyID="5" Props_4_DataType="3" Props_4_ItemID="" Props_4_Description="Права доступа" Props_4_Value="3" Props_5_PropertyID="7" Props_5_DataType="3" Props_5_ItemID="" Props_5_Description="Тип(значение/перечисление)" Props_5_Value="0" Props_6_PropertyID="5003" Props_6_DataType="18" Props_6_ItemID="" Props_6_Description="Адрес переменной" Props_6_Value="1"/>
    		</Item>
    		<Item Name="Request2" Plugin="0" Flag="1" AccessPath="" AccessRights="3" CanonicalDataType="0" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="101" Props_0_Value="" Props_1_PropertyID="6" Props_1_Value="100" Props_2_PropertyID="5000" Props_2_Value="10" Props_3_PropertyID="5001" Props_3_Value="9" Props_4_PropertyID="5004" Props_4_Value="4" Props_5_PropertyID="5002" Props_5_Value="True" Props_6_PropertyID="5999" Props_6_Value="0" Props_7_PropertyID="5015" Props_7_Value="Прямое подключение" Props_8_PropertyID="5027" Props_8_Value="Нет" Props_9_PropertyID="5029" Props_9_Value="True" Props_10_PropertyID="5030" Props_10_Value="False" Props_11_PropertyID="5052" Props_11_Value="" Props_12_PropertyID="5060" Props_12_Value="False" Props_13_PropertyID="5073" Props_13_Value="False" Props_14_PropertyID="5061" Props_14_Value="CRC (Modbus)" Props_15_PropertyID="5025" Props_15_Value="True" Props_16_PropertyID="5026" Props_16_Value="False" Props_17_PropertyID="5031" Props_17_Value="Текущие данные">
    			<Item Name="PV" Plugin="0" Flag="2" AccessPath="" AccessRights="1" CanonicalDataType="4" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="1" Props_0_Value="4" Props_1_PropertyID="2" Props_1_Value="" Props_2_PropertyID="3" Props_2_Value="" Props_3_PropertyID="4" Props_3_Value="" Props_4_PropertyID="5" Props_4_Value="1" Props_5_PropertyID="7" Props_5_Value="0" Props_6_PropertyID="5003" Props_6_Value="2"/>
    		</Item>
    		<Item Name="Request3" Plugin="0" Flag="1" AccessPath="" AccessRights="3" CanonicalDataType="0" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="101" Props_0_Value="" Props_1_PropertyID="6" Props_1_Value="100" Props_2_PropertyID="5000" Props_2_Value="10" Props_3_PropertyID="5001" Props_3_Value="9" Props_4_PropertyID="5004" Props_4_Value="3" Props_5_PropertyID="5005" Props_5_Value="16" Props_6_PropertyID="5002" Props_6_Value="True" Props_7_PropertyID="5999" Props_7_Value="0" Props_8_PropertyID="5015" Props_8_Value="Прямое подключение" Props_9_PropertyID="5027" Props_9_Value="Нет" Props_10_PropertyID="5029" Props_10_Value="True" Props_11_PropertyID="5030" Props_11_Value="False" Props_12_PropertyID="5052" Props_12_Value="" Props_13_PropertyID="5060" Props_13_Value="False" Props_14_PropertyID="5073" Props_14_Value="False" Props_15_PropertyID="5061" Props_15_Value="CRC (Modbus)" Props_16_PropertyID="5025" Props_16_Value="True" Props_17_PropertyID="5026" Props_17_Value="False" Props_18_PropertyID="5031" Props_18_Value="Текущие данные">
    			<Item Name="Set" Plugin="0" Flag="2" AccessPath="" AccessRights="3" CanonicalDataType="4" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="1" Props_0_Value="4" Props_1_PropertyID="2" Props_1_Value="" Props_2_PropertyID="3" Props_2_Value="" Props_3_PropertyID="4" Props_3_Value="" Props_4_PropertyID="5" Props_4_Value="3" Props_5_PropertyID="7" Props_5_Value="0" Props_6_PropertyID="5003" Props_6_Value="2"/>
    		</Item>
    	</_ITEMS_>  <_HDA_ITEMS_/>
    </Lectus_OPC_server_config_file>
    #7351
    Mikhail
    Модератор

    если у меня адрес HEX А400, то +1 адрес это А401? А402? А404?

    0xА401 = 41985
    Используйте калькулятор Windows.

    #7352
    Mikhail
    Модератор

    В процессе отладки гораздо проще отправлять бинарную команду, в которой явно прописываете отправляемые байты. Чтобы перевести float в 16-ричную форму используйте, например, http://www.binaryconvert.com/result_float.html
    Когда заработает, расскажу, как преобразовать double для отправки. Это не так сложно.

    #7358
    p001p
    Участник

    В процессе отладки гораздо проще отправлять бинарную команду, в которой явно прописываете отправляемые байты. Чтобы перевести float в 16-ричную форму используйте, например, http://www.binaryconvert.com/result_float.html
    Когда заработает, расскажу, как преобразовать double для отправки. Это не так сложно.

    Можно рассказать сразу? Работы ведутся на объекте где нету связи и очень трудно лишний раз организовывать доступ в интернет и ехать обратно на объект. С переводом из одной СС в другую проблем не возникнет. А вот с преобразованием в другой тип данных хотелось бы знать чуть заранее.

    #7364
    Mikhail
    Модератор

    Самый быстрый способ — договориться за доп. плату о решении вопросов через удалённое подключение.

    Добавьте в таблицу формул формулу MySwap и используйте её для канала управления: MySwap(Cmd).

    public double MySwap(double x)
    {
        byte[] bytes1 = BitConverter.GetBytes((float)x);
        byte[] bytes2 = new byte[8]
        {
            bytes1[3],
            bytes1[2],
            bytes1[1],
            bytes1[0],
            0,
            0,
            0,
            0
        };
        return BitConverter.ToDouble(bytes2, 0);
    }
    

    Команды нужно будет отправлять не из Коммуникатора, а из Сервера или из Вебстанции, чтобы команда была обработана с использованием формулы.
    Если отправляемый в запросе порядок байт будет не такой как нужно, можно в формуле поменять индексы.

    В списке доработок по драйверу Модбас есть запрос на перестановку байт с помощью шаблона. Но пока эта функция не реализована.

    #7365
    Mikhail
    Модератор

    Тип бинарной команды — массив байт byte[]
    Тип стандартной команды — double
    Их нельзя поменять в формуле. Формула должна возвращать тип значения в зависимости от команды.

    #8063
    DenisSS
    Участник

    Сам в шоке, но для записи float в ПЛК150 Овен, пришлось сделать вот такую загогулину. По другому не работает.

    public double MySwap(double x)
    {
    byte[] bytes1 = BitConverter.GetBytes((float)x);
    byte[] bytes2 = new byte[8]
    {
    0,
    0,
    bytes1[3],
    bytes1[2],
    bytes1[1],
    bytes1[0],
    0,
    0
    };
    return BitConverter.ToDouble(bytes2, 0);
    }

    #8064
    manjey73
    Участник

    Очень странно что 2 нуля, потом 4 байта данных и опять 2 нуля…

    • Этот ответ был изменен 6 лет, 4 месяца назад от manjey73.
    #8069
    Mikhail
    Модератор

    Спасибо за информацию.
    В новом драйвере Модбас Вы можете сделать задать такую загогулину в шаблоне, без использования формул.

Просмотр 14 сообщений - с 1 по 14 (из 14 всего)
  • Вы должны авторизироваться для ответа в этой теме.