Вопрос в следующем... Как через элемент "Цифровой ввод" передать отрицательное значение по Modbus? Само отрицательное значение записывается в элементе, а вот передается в формате WORD, вследствие чего на ПЛК получаем значение 65535-30=65505 (-30 вводимое отрицательное число). Можно решить конфигурацией панели или преобразовывать в ПЛК?
Ничего в панели преобразовывать не надо. Панель здесь ни причем.
Просто протокол Modbus ничего не знает про какие-то там положительные или отрицательные числа, а оперирует шестнадцати битными регистрами. А что закодировано этими шестнадцатью битами, буквы, символы или цифры ему безразлично.
Это дело программы в ПЛК как интерпретировать содержимое регистра. Для этого в КДС предусмотрены типы данных.
Захват-1.png
Для 16 битных типов данных в КДС существуют типы WORD, INT, UINT
Захват-2.png
Для без знаковых целых чисел это WORD и UINT (0..65535), а для целых чисел со знаком - INT(-32768..32767).
У ПЛК в конфигурации Modbus Slave для модулей 2 byte используется тип данных WORD.
А для чисел со знаком (тип INT) используется представление в дополнительном коде. Старший, 15 бит используется для указания знака числа. Если его значение равно 0, то в остальных разрядах записано положительное число, совпадающее с прямым кодом. По этому пока Вы вводите на экране числа от 0 до 32767 то в переменной в Modbus Slave увидите это же число. Но как только Вы введете отрицательное число, то в переменной в Modbus Slave увидите это число в дополнительном коде, например не "-30", а "65506".
Однако это никак не влияет на результат использования такого числа в программе. Из-за неявного преобразования типов результаты арифметических операций и операции присваивания с использованием WORD вместо INT получаются правильными без дополнительных телодвижений.
В принципе можно ничего нигде не преобразовывать. Но уж если очень хочется видеть при отладке программы "правильные" цифры, то используйте в программе не сами переменные, указанные в конфигурации Modbus Slave для модулей 2 byte, а другие, которые приведены к "правильному" типу
Захват-3.png
Последний раз редактировалось petera; 08.10.2015 в 04:38.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
petera, спасибо за ответ! Можно было не утруждаться "разжовыванием" типа данных, это и так всё понятно... Вообщем "правильные" цифры можно получить, обработав их в ПЛК. Не совсем удобно, но ладно![]()
1. Я бы ничего дополнительно не обрабатывал, потому как и так все будет правильно работать. Ну только если есть визуализация в проекте КДС, то для переменных используемых в визуализации можно завести отдельные переменные. Хотя и здесь прямо в элементах визуализации можно записать WORD_TO_INT()
Захват-1.png
И все будет отображаться в "правильных числах"
2.Может и не всем, ведь кроме Вас этот пост могут читать и другиеМожно было не утруждаться "разжовыванием" типа данных, это и так всё понятно....
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Здравствуйте.
Что-то никак не могу подружить СПК207(master) и СП270(slave).
Сразу уточню: панель должна быть именно слейвом.
Вот тестовые проекты для панели и для контроллера. Проще некуда.
HelloWord.twp
Panel.project
Соединяю панель через порт PLC с портом COM2 контроллера, по RS-485. Использую кабель, как на рис. В5 из приложения В руководства по эксплуатации панели.
Порт Donload панели при отладке ни к чему не подключен. Версия конфигуратора 2c6f.
Связь есть, PanelLnk.jpg. Обмена данными нет. Не читаются регистры из панели, не производится запись в регистры панели.
Что я делаю неправильно?
Последний раз редактировалось Сергей Рогов; 20.10.2015 в 08:41.
По совету Артема Трофимова, специалиста технической поддержки, установил параметр "Включено 2" (см. скриншот).
Slave_SP207_OK.jpg
Других настроек в обоих проектах не изменял. После изменения этого параметра всё заработало.
Здравствуйте) Не могу залить программу из конфигуратора в панель, пишет сом1 закрыт, хотя драйвера все в норме.
Подскажите как быть!
Доброго времени суток всем! Может кто подскажет? Проблема в следующем: конфигурация СП270 - ПЛК160 , подключение Debug RS232 кабелем КС2 (RS232 почему-то не работает вообще (пишет потеря связи с контроллером)). При включении всё ок, ни каких сообщений нет, контроллер работает. С контроллера на панель информация приходит (например зажигаю лампу). Как только с панели пытаюсь передать что-то в контроллер (например вкл тумблер) появляется сообщение потеря связи с контроллером и информация в него не поступает. Однако с контроллера всё приходит. В чём может быть проблема? Скорости обмена менял, задержки от 0 до 500 ms ставил - картина одна и та же. Кабель прозванивал, даже перепаивал в КС1 и обратно.
Иван_Я, панель к этому порту подключена?
Serji777, вы пытаетесь из панели послать запрос на изменение чего-то там в контроллере?
Мастером по-прежнему контроллер остаётся?