Заодно подскажите, как сформировать float в СП270. В данном проекте на экране СП270 отображается "123,4", а в СМИ2 "1234".
Вид для печати
Заодно подскажите, как сформировать float в СП270. В данном проекте на экране СП270 отображается "123,4", а в СМИ2 "1234".
Да передача на СМИ2 идет из макроса floatом на адрес 4х16 обратите на это внимание.
Спасибо! Буду пробовать вечером.
Что-то я на четность не обратил внимания, упустил...
В Prog написано
Write(PLC,3,MODBUS_RTU_REG_4X,26,0,TYPE_DWORD,Ct);
Я так понимаю запись в 26 регистр? А если нужно 27? В СМИ2 float расположен в 27, 28 регистрах (изменить нельзя).
Да и еще у вас в функции копирования были 4 группы регистров на которых уходило по 150мс.
Вот пара примеров.
Код:BOOL Pusk;float Ct;
Ct=*(float*)(PSW+300);
Pusk=GetPSBStatus(256);
if(Pusk)Ct=Ct+0.1;
Write(HMI_LOCAL_MCH,0,TYPE_PSW,300,0,TYPE_DWORD,Ct);
Write(PLC,3,MODBUS_RTU_REG_4X,26,0,TYPE_DWORD,Ct);
return;
Код:BOOL Pusk;float Ct;
Ct=(float)PSW[256]/10;
if(Pusk)Ct=Ct+0.1;
PSW[280]=(WORD)(Sp*10);
Write(PLC,3,MODBUS_RTU_REG_4X,26,0,TYPE_WORD,Ct);
return;
Что не так, подскажите?
Код:BOOL Pusk; float Ct; WORD T; WORD M; DWORD P;
Pusk=GetPSBStatus(256);
Ct=*(float*)(PSW+258);
T=PSW[256];
M=PSW[257];
P=*(DWORD*)(PSW+260);
if (Pusk) Ct=Ct+0.1;
Write(HMI_LOCAL_MCH,0,TYPE_PSW,258,0,TYPE_DWORD,Ct);
Write(PLC,3,MODBUS_RTU_REG_4X,17,0,TYPE_WORD,T);
Write(PLC,3,MODBUS_RTU_REG_4X,27,0,TYPE_DWORD,Ct);
Write(PLC,3,MODBUS_RTU_REG_4X,33,0,TYPE_DWORD,P);
Write(PLC,3,MODBUS_RTU_REG_4X,35,0,TYPE_WORD,M);
return;
Все просто 4х17+50мс 4х27+50мс 4х33,4х35+50мс =150 это только на запись плюс на чтение наверное столько же.
Да это межсимвольный интервал везде по разному фрактуют.
Так Вы же сами его таким задали.
Вложение 10764
А чем не устраивает значение по умолчанию, равное 0 мс?
Так это получается, что за один цикл отправляется одна переменная?
Я думал, что в цикле создается очередь, а затем пошел обмен последовательно по всем переменным, к началу следующего цикла обмен закончился.
Из этих соображений и выставил 50 мс, с запасом для обмена по RS-485.
Если отдельные команды чтения записи, то они будут последовательно по одной в каждом цикле выполняться?
Если брать макрос на Си то происходит следующее по событию PSB3 запускается макрос происходит передача пакета 4х17 дальше задержка pfw38 потом передача пакета 4х27 снова задержка и тд. пока не отработает макрос. Читайте и пишите оптом. Уменьшите задержку до секунды и все поймете сами. Но задержка мене 5мс приводит к отказу и сбою панели здесь нужно регулировать, все таки панели еще нужно обрабатывать и другие функции.
На ГМ при групповой записи регистров 17-35 все что выжал - те же 0,3 секунды смена информации на индикаторе СМИ2. Думаю это уже ограничение СМИ2, а именно период вывода информации на светодиодный индикатор.
Может кто поиграться с индикатором захочет - файл в прикреплении.
Спасибо всем за помощь, узнал новое, полезное... жаль только с функциями СИ так и не удалось прошить панель.
Теперь будем осваивать обмен с использованием Modbus.lib в ПЛК
Господа подскажите как сделать чтобы ОРС сервер modbus_opc_server читал все данные, читает только тогда когда обращаюсь в соответствующий экран? Может неправильно сделал обозвал все глобальным.Возможно неправильно больно проэкт стал нечитабельным
Мастером конечно хорошо, но к панели подключен ПР114 через ПРМИ. Все вроде заработало через функциональную область. Спасибо
возможно ли симмулировать работу плк и сп270 без реальных устройств? так как, например, из демки МasterScada управлять выходами плк в кодесисе через опс-сервер?
Симулировать работу СП270 можно, а вот про ПЛК не скажу.
Можно вместо панели подключиться к ПЛК прямо из конфигуратора (Файл-->Пуск OnLine). ПЛК должен быть подключен к COM порту ПК тем же кабелем, который используется для подключения ПЛК-Панель.
Будет 30 минут работать, затем нужен перезапуск.
Есть некоторые отличия работы проекта в симуляторе панели от реальной панели, но в основном этими отличиями можно пренебречь.
Скажите, как с помощью СП270 задавать номер телефона в GSM_GPRS модем ОВЕН ПМ01 ( подключенный к ПЛК160) с которого будут отправляться смс на этот номер?
Я с библиотекой SmsOwenLib не работал, но из описания библиотеки -номер телефона должен быть представлен символьной строкой длиной до 20 символов.
Следовательно Ваш вопрос сводится к тому, как передать символьную стоку из панели в ПЛК.
Для ввода номера телефона нужно использовать "Текстовый ввод".
Как в ПЛК, в модуле Modbus(Slave), принять символьную строку? Можно посмотреть "Пример чтения и записи "текстовой строки" из ПЛК1хх в панель СП270 (Master)" http://kipshop.ru/Primeri/HMI/03_07_...er]_string.zip
Если этой информации не достаточно, то могу продолжить.:)
Телефонный номер вполне должен уместится вдвойное слово, его и можно пеоедать по модбас,а в плк поеобразовать в строку
Не всегда так можно сделать напрямую. Диапазон чисел для DWORD 0...4294967295. А из описания библиотеки номер нужно писать целиком
Вложение 10913
Например у меня в Минске номер телефона будет 375297718504.
В проекте от kukla100 номер телефона должен быть 79195609285
Вложение 10914
Получается, что Вашим способом можно воспользоваться в каком-либо частном случае, когда код страны и код оператора известны априори или полный номер нужно вводить из трех частей (код страны)-(код опрератора)-(номер абонента).
Это уже детали, два двойных слова, всёравно меньше по байтам, чем длинные номера строкой
Так ведь текст передается из панели в чем проблема, тем более с числами.
Проблема в безответственном использовании ресурсов контроллера в случае со строкой,тем бодее если заранее длинна номера будет неизвестна
1. В конфигурации ПЛК добавляем модуль Mobdus.
2. Добавляем 6 элементов 2 byte из расчете, что номер телефона не более 12 символов.
3.Для переменной N_Tel указываем прямой адрес ПЛК ( AT %) регистра модуля Modbus(Slave)в данном случае первого. Для панели адрес регистра Modbus будет равен 4х0.
Вложение 10916
4. На экране панели помещаем "Текстовый ввод". В настройках задаем адрес 4х0 и число регистров 6.
Т.к. в шаблоне проекта для панели для текстового ввода используется большая символьная клавиатура с буквами и цифрами, а для ввода номера телефона понадобятся только цифры и символы "#" "*", если вздумаете отправлять USSD запросы, например узнать баланс счета, то предлагаю маленькую клавиатуру.
Вложение 10917
KeyBoard_Asc_02 -окно для нее должно иметь №60035. В этом случае в настройках "Текстового ввода" можно будет выбрать эту маленькую клавиатуру.
Вложение 10918
Нажать на картинку для просмотра анимации.
Можно дополнить проект вводом текста СМС, элементами индикации результата отправки СМС и кодов ошибок.
Спасибо, petera!!
Всё работает, только срезаются первые цифры. вместо 79195609285 в контроллере отображается 5609285. причём если после ввода номера перезапустить панель то она из ПЛК считывает и показавает нормальный номер. всё делал как советовали, что не так?
:(:(:(
Дома нет ПЛК, смогу проверить только в понедельник на работе.
Эти грабли из-за прямой адресации в программе ПЛК ( AT %) регистра модуля Modbus(Slave)?
ЗЫ."...перезапустить панель то она из ПЛК считывает и показавает нормальный номер." может по тому, что при объявлении переменной явно указано начальное значение?
N_Tel AT %QW8.1.0: STRING(12):='79195609285';
DWORD рулит :)