[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Обсуждение программы АРМ "Скиф" » Предложения и пожелания » Сценарии
Сценарии
arm-skifДата: Понедельник, 25.08.2014, 11:51 | Сообщение # 1
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Добавил в программу возможность написания сценариев. Скачать для windows: Skif_v231. Скачать для GNU/Linux: Skif_linux_v231. Это не самостоятельная версия, а обновление версии 2.3.0. Документация и примеры входят в состав архива. Прямая ссылка на документацию: Scripts.pdf

Если не хватает каких-то возможностей сценариев, или что-то не работает - пишите в этой теме, буду дополнять, исправлять.
 
K707Дата: Вторник, 26.08.2014, 08:20 | Сообщение # 2
Группа: Проверенные
Сообщений: 193
Репутация: 17
Статус: Оффлайн
Добрый день. Спасибо за новую версию. Столько простора для творчества открылось с добавлением сценариев. Вопрос, а планируете специализированные окошечки для создания сценария (на подобие принципа работы программы Sign of Misery, с готовыми заготовками сценария)?
 
arm-skifДата: Вторник, 26.08.2014, 09:22 | Сообщение # 3
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Добрый день. Видимо имеется ввиду графический редактор сценариев. Подумаю над этим. Сейчас думаю как сделать встроенный web-сервер, потом хочется добраться таки до реализации отображения АЦП на графических планах.
 
K707Дата: Вторник, 26.08.2014, 09:33 | Сообщение # 4
Группа: Проверенные
Сообщений: 193
Репутация: 17
Статус: Оффлайн
Да Вы правильно поняли, я про графический редактор сценариев.
 
flyjshumДата: Среда, 27.08.2014, 07:48 | Сообщение # 5
Группа: Проверенные
Сообщений: 6
Репутация: 0
Статус: Оффлайн
Добрый день. По ссылке версия 2.3.1 для windows, для linux версии нет?
 
arm-skifДата: Среда, 27.08.2014, 09:23 | Сообщение # 6
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Добрый день. Собирать промежуточные версии для всех платформ затратно по времени. Новая версия появляется на главной раз в 3-4 месяца, а промежуточные версии появляются на форуме чаще. Могу начать собирать промежуточные версии и для linux x64. Сегодня вечером соберу.
 
arm-skifДата: Среда, 27.08.2014, 20:20 | Сообщение # 7
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
flyjshum, у вас какой дистрибутив linux? Добавил в первое сообщение ссылку для linux x86-64.
 
flyjshumДата: Среда, 27.08.2014, 23:22 | Сообщение # 8
Группа: Проверенные
Сообщений: 6
Репутация: 0
Статус: Оффлайн
Тестирую на ubuntu (виртуальная машина), а в итоге всем рулить будет raspberry pi. Спасибо
 
arm-skifДата: Четверг, 28.08.2014, 09:28 | Сообщение # 9
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
В программу добавилась еще одно библиотека - QtScript. Поэтому для ubuntu скорее всего придется доустановить libqt4-script (если не установлена). Все необходимые библиотеки для ubuntu: libphonon4, libqt4-core, libqt4-gui, libqt4-network, libqt4-script.
 
SanykaДата: Суббота, 06.09.2014, 21:51 | Сообщение # 10
Группа: Проверенные
Сообщений: 43
Репутация: 5
Статус: Оффлайн
Arm-skif, добавление сценариев - супер! Только начал придумывать как их реализовать внешними скриптами, а у Вас уже готовое решение на блюдечке! СПАСИБО!
 
arm-skifДата: Суббота, 06.09.2014, 22:25 | Сообщение # 11
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Пожалуйста.
 
FlyJДата: Пятница, 12.09.2014, 22:03 | Сообщение # 12
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
arm-skif поясните, пожалуйста, логику работы сигналов в подсистеме скрипты. Есть следующий сигнал: signalUpdatePart (numPKU, part)
Изменилось состояние раздела. Если part = 0, то изменились
состояния всех разделов данного ПКУ.

Код
const numPKU=257 //номер пульта
const part=3 //номер раздела
armSkif.signalUpdatePart(numPKU, part)
     {
       //некоторые действия, выполняющиеся
       //при  изменении состояния раздела 3
     }
Т.е.  положив скрипт в автозапуск серверного ПО каким образом отследить изменение состояния раздела и запустить выполнение некоторых действий?
Скрипт будет запущен один раз и каждый раз будет реагировать на изменение состояния раздела или же при наступления события (сигнала) нужно перезапускать скрипт?
В Ваших примерах этого не нашел.

Спасибо.
 
arm-skifДата: Суббота, 13.09.2014, 06:33 | Сообщение # 13
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Цитата FlyJ ()
Скрипт будет запущен один раз и каждый раз будет реагировать на изменение состояния раздела
Именно так. Пример этого сигнала можно посмотреть в файле "Examples\08_Alarm_Relay.js".

Вот так можно соединить сигнал с функцией:
Код
armSkif.signaUpdatePart.connect( updatePart );

а потом в функции проверять тот ли это раздел что нам нужно:
Код
const numPKU = 1; // Номер пульта
const numPart = 1; // Номер раздела

function updatePart(nPKU, nPart) {
     if ( (nPKU == numPKU) && (nPart == numPart) ) {
       // Если нужный раздел, то выполнить.       
     }
}

Кстати, при необходимости можно и отключить сигнал от функции:
Код
armSkif.signaUpdatePart.disconnect( updatePart );
 
arm-skifДата: Суббота, 13.09.2014, 07:01 | Сообщение # 14
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Цитата FlyJ ()
const numPKU=257 //номер пульта
Здесь может быть ошибка. В конфигурации сервера каждому пульту присваивается порядковый номер от 1 до 255. А вот в конфигурации клиента так может быть, т.к. этот номер состоит из номера сервера и номера пульта ((1<<8) |1)==257. Посмотрите какой номер пульта будет записываться в лог:
Код
armSkif.signaUpdatePart.connect( updatePart );

function updatePart(nPKU, nPart) {   
      armSkif.writeLog("PKU: " + nPKU + ", part: " +nPart);
}
 
FlyJДата: Суббота, 13.09.2014, 08:18 | Сообщение # 15
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Спасибо. пропустил этот пример, все наглядно.
У Вас используется функция signaUpdatePart, это не опечатка (отсутствует буква l в слове signal)? Так в примерах и в мануале.
 
arm-skifДата: Суббота, 13.09.2014, 11:04 | Сообщение # 16
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Опечатка. Спасибо, исправлю.
На данный момент в программе работает "signaUpdatePart". Я все примеры проверял на работоспособность и т.к. опечатка везде, то я ее не заметил.

В документации еще нашел опечатку " SignalUpdateSh" - первая буква должна быть маленькой. Это текстовый редактор постарался, в программе с маленькой буквы.
 
vovanrostovДата: Суббота, 24.01.2015, 11:29 | Сообщение # 17
Группа: Проверенные
Сообщений: 9
Репутация: 0
Статус: Оффлайн
Добрый день.
Подскажите пожалуйста как будет выглядеть сценарий?
Задача такая: есть прибор С2000-СП1(адрес 3) . Реле 1 необходимо включить в 8.00, выключить в 20.00, каждый день. В двух вариантах: Автозапуск во время старта программы и запуск пользователем. Заранее спасибо! Читал Вашу инструкцию что-то не получается у меня. Видно делаю что-то не так.
 
arm-skifДата: Суббота, 24.01.2015, 12:31 | Сообщение # 18
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Добрый день.
Если сценарий запускаете в клиентсом ПО, то возможные причины:
  • пользователь должен быть авторизован, иначе нельзя управлять реле,
  • должен быть указан номер сервера.

Для проверки работы сценария удобно пользоваться выводом информации в файл при помощи команды: armSkif.writeLog("Строка");. Так можно проверить срабатывает ли какая-либо функция.

Сценарии управления реле по времени лучше запускать в серверном ПО (папка Scripts\ScriptsServer).

За основу можно взять пример "06_Sheduler_Relay.js". Я подправил этот файл под задачу (прочитайте комментарии в файле):
Прикрепления: Sheduler_Relay.js (1.6 Kb)
 
arm-skifДата: Суббота, 24.01.2015, 12:51 | Сообщение # 19
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
В клиентском ПО можно управлять реле, расположенном на графическом плане, или написать два подобных сценария (поместить в папку Scripts\ScriptsClientMenu):
Код
var   numPKU  = 1; // Номер пульта
const numDev  = 3; // Номер прибора
const numRelay= 1; // Номер реле

const numServer = 1; // Номер сервера
numPKU = armSkif.convert2ByteToWord(numServer, numPKU);

// Включить реле
armSkif.controlRelay(numPKU, numDev, numRelay, armSkif.RL_ON );

// Выключить реле    
//armSkif.controlRelay(numPKU, numDev, numRelay, armSkif.RL_OFF);
 
vovanrostovДата: Суббота, 24.01.2015, 18:10 | Сообщение # 20
Группа: Проверенные
Сообщений: 9
Репутация: 0
Статус: Оффлайн
Спасибо. Все работает отлично!
Подскажите как сделать чтобы в одном скрипте исполнялось несколько действий? Например по сценарию включалось сразу два реле?
 
arm-skifДата: Суббота, 24.01.2015, 19:48 | Сообщение # 21
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Пожалуйста.
Нужно добавить две строки управления реле:

Код
armSkif.controlRelay(numPKU, numDev, numRelay, armSkif.RL_ON );  
armSkif.controlRelay(numPKU, numDev, numRelay+1, armSkif.RL_ON );  

или так:
armSkif.controlRelay(numPKU, numDev, 1, armSkif.RL_ON );  
armSkif.controlRelay(numPKU, numDev, 2, armSkif.RL_ON );
 
СергейМДата: Пятница, 06.03.2015, 16:53 | Сообщение # 22
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
Коллеги, подскажите, как из сценария отправить данные в php скрипт?
по типу
Код
http://IP/objects/?script=myscript¶m1=value1


Сообщение отредактировал СергейМ - Пятница, 06.03.2015, 16:57
 
arm-skifДата: Воскресенье, 08.03.2015, 20:59 | Сообщение # 23
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Про php не знаю, но в скифе есть еще websocket. Посмотрите в папке WebSocket, возможно это будет даже лучше.
 
СергейМДата: Четверг, 19.03.2015, 17:16 | Сообщение # 24
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
Модернизировал скрипт:

Код
/****************************************************************************
** Показать сообщение при изменении состояния раздела
****************************************************************************/

const numServer = 1; // Номер сервера
const numPKU    = 1; // Номер пульта
const numPart   = 1; // Номер раздела

var serverNumPKU = armSkif.convert2ByteToWord(numServer, numPKU);
    
// Если состояние какого-нибудь раздела изменится, то вызвать функцию.
armSkif.signalUpdatePart.connect( updatePart );

//---------------------------------------------------------------------------
function updatePart(nPKU, nPart)
{
     if ( (nPKU == serverNumPKU) ) // Если нужный раздел, то показать сообщение:
var nPart_descr = armSkif.getPartDescription(nPKU, nPart);
var nPart_descr = nPart_descr.replace (/\s/ig,"_");
var nPart_state = armSkif.convertStateToDescript( armSkif.getPartState(nPKU, nPart) );     
var nPart_state = nPart_state.replace (/\s/ig,"_");         
var nPart_State_code = armSkif.getPartState(nPKU, nPart);                        
var sendmes = "curl " + '"' + "http://10.195.30.227/objects/?script=skifdata&nPKU=" + nPKU + "&nPart_State_code=" + nPart_State_code + "&nPart=" + nPart + "&nPart_descr=" + nPart_descr + "&nPart_state=" + nPart_state + '"';
if      (armSkif.isOsLinux())   armSkif.runProgram(sendmes);

}
//--------------------------------------------------------------------------------


если добавить в автозапуск клиента, то всё работает, но если в автозапуск сервера, то получаю ошибку в логах:

Цитата
 [BolidCOM]Ошибка при работе с UDP портом 2048: невозможно отправить сообщение
как исправить ситуацию? или RunProgram из под серверной части на работает?
 
arm-skifДата: Четверг, 19.03.2015, 17:27 | Сообщение # 25
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Ошибка   [BolidCOM]не связана со скриптами, а связана со взаимодействием с пультом через С2000-Ethernet.

Скрипт не работает на сервере, потому что здесь лишнее преобразование armSkif.convert2ByteToWord. Это клиенту нужно знать с пультом какого сервера работать, поэтому номер пульта состоит из номера сервера и номера пульта на сервере. А для самого сервера пульты имеют простые номера.

Замените
Код
if ( nPKU == serverNumPKU )
на 
Код
if ( nPKU == numPKU )
 
СергейМДата: Четверг, 19.03.2015, 22:08 | Сообщение # 26
Группа: Проверенные
Сообщений: 12
Репутация: 0
Статус: Оффлайн
спасибо, заработало
 
arm-skifДата: Пятница, 20.03.2015, 09:15 | Сообщение # 27
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Пожалуйста.
 
FlyJДата: Вторник, 28.07.2015, 21:26 | Сообщение # 28
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Возник вопрос. У меня пульт настроен следующим образом. Шлейф серверная (датчик движения), единственный в разделе, если выключен режим охраны, то датчик просто фиксирует движение без тревоги (сообщение на пульте с2000-м ненорма ШС (в случае обнаружения движения), восстановление ШС (в случае отсутствия движения))).
использую сигналы.

Код
const numServer = 1; // Номер сервера
const numPKU    = 257; // Номер пульта
const numPart   = 1; // Номер раздела
const numFsh   = 2; // Номер шлейфа

var serverNumPKU = armSkif.convert2ByteToWord(numServer, numPKU);
    
armSkif.signalUpdatePart.connect( updatePart );
armSkif.signalUpdateSh.connect( updateSh );
//---------------------------------------------------------------------------
function updatePart(nPKU, nPart)
{armSkif.messageInformation("Информация", "Изменилось состояние раздела");
}

function updateSh(nPKU, nFsh)
{armSkif.messageInformation("Информация", "Изменилось состояние шлейфа");
}

В случае если объект (раздел и шлейф) ставиться под охрану или снимается, то выходит диалоговое окно с информацией, т.е. сигнал срабатывает.
Если раздел (и шлейф) снят с охраны и ОПС обнаруживает движение (на с2000-м фиксируется событие ненорма ШС) , никакой сигнал не срабатывает (signalUpdatePart signalUpdateSh). 
Скрипт запускается в клиентском приложении (не автозапуск). В таблице 9 я данного события не нашел. На скриншоте в журнале отмечено как данное событие фиксирует клиентское ПО.
Прикрепления: 6312859.png (60.5 Kb)
 
arm-skifДата: Среда, 29.07.2015, 08:18 | Сообщение # 29
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Мое предположение такое: пульт выдает сообщение в журнал событий, но состояние шлейфа не меняет. Шлейф как был снят, так и остался снят. Посмотрите состояние шлейфа в боковой панели "ШС" или "Все ШС" или на пульте. Это только предположение, позже я проверю так ли это.

Можно попробовать решить данную задачу не через состояние шлейфа, а через события. Посмотрите примеры: 22_WriteAllEvents.js, 23_WriteEvents.js

В таблице 9 это события 117, 119. Да, некоторые названия отличаются. Раньше Скиф не поддерживал в скриптах события, поэтому я привел таблицу состояний. Например событию "Снятие ШС" соответствует состояние "Снят". Я поправлю это в документации на сценарии.
 
FlyJДата: Среда, 29.07.2015, 09:57 | Сообщение # 30
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Цитата arm-skif ()


Можно попробовать решить данную задачу не через состояние шлейфа, а через события. Посмотрите примеры: 22_WriteAllEvents.js, 23_WriteEvents.js


Я думал об этом варианте. Эта функция быстро срабатывает? Хочу отлавливать движение в помещение с помощью обьемника в режиме он-лайн
 
arm-skifДата: Среда, 29.07.2015, 10:03 | Сообщение # 31
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Быстро.
 
arm-skifДата: Среда, 29.07.2015, 10:23 | Сообщение # 32
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Заметил что у вас события нарушение и восстановление проходят в одно и то же время. Это тоже может быть причиной. Скиф запрашивает состояние шлейфа после возникновения события, и хоть запрос посылается пульту сразу, пульт может ответить уже после восстановления шлейфа. В таком случае, в сценарии нужно реагировать на события. Или как-то увеличить время нарушения шлейфа (если в этом причина).
 
FlyJДата: Среда, 29.07.2015, 10:52 | Сообщение # 33
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Цитата arm-skif ()
Заметил что у вас события нарушение и восстановление проходят в одно и то же время. Это тоже может быть причиной.

Только на датчики движения (ИО) моргнул индикатор(т.е. зафиксировал движение - на пульте событие ненорма шс и мгновенно восстановление шс. Снова фиксирует движение опять ненорма шс. По сути мне достаточно отловить ненорма шс, подождать пару секунд, а потом снова проверить было ли событие ненорма шс. Т.е. человек все еще в помещении или нет. В таком случае можно попробовать использовать writeallevent.
А на форуме болид что то было про программируемый технологический тип шлейфа, может это поможет...гляну мануал
 
arm-skifДата: Среда, 29.07.2015, 10:54 | Сообщение # 34
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Кстати, в документации на Фотон-9 написано что длительность тревожного извещения не менее 2 секунд. У вас какой извещатель? Странно что события нарушения и восстановления проходят в одну секунду.
 
FlyJДата: Среда, 29.07.2015, 17:50 | Сообщение # 35
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Время, в течение которого вход 6-го типа должен быть в норме для восстановления из состояния "Неисправность технологического входа", а также отработки включённых параметров "Автоперевзятие из тревоги" и "Контроль в снятом состоянии"
Нашел такой параметр в мануале на с2000 кдл. Вечером проверю

Добавлено (29.07.2015, 14:31)
---------------------------------------------

Цитата arm-skif ()

Кстати, в документации на Фотон-9 написано что длительность тревожного извещения не менее 2 секунд. У вас какой извещатель? Странно что события нарушения и восстановления проходят в одну секунду.


C2000-ик

Добавлено (29.07.2015, 17:50)
---------------------------------------------

Цитата arm-skif ()
Заметил что у вас события нарушение и восстановление проходят в одно и то же время. Это тоже может быть причиной. Скиф запрашивает состояние шлейфа после возникновения события, и хоть запрос посылается пульту сразу, пульт может ответить уже после восстановления шлейфа. В таком случае, в сценарии нужно реагировать на события. Или как-то увеличить время нарушения шлейфа (если в этом причина).
Изменил время восстановления шлейфа в конфигурации С2000-КДЛ. Теперь система работает следующим образом: в снятом состоянии на пульте сообщение ненорма ШС, проходит 10 секунд и, если датчик в течении 10 секунд не обнаруживает движение, на пульт приходит сообщение восстановление ШС. В программе в журнале эти события фиксируются, на вкладке "ШС" состояние "снят" и не меняется, скрипт, увы, не отлавливает это событие. Буду проверять вариант через writeallevent
 
FlyJДата: Среда, 29.07.2015, 17:52 | Сообщение # 36
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Прикрепления: 8514341.png (56.2 Kb) · 8135343.png (66.2 Kb)
 
arm-skifДата: Среда, 29.07.2015, 20:42 | Сообщение # 37
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
А пульт какое состояние шлейфа показывает?
 
FlyJДата: Понедельник, 03.08.2015, 08:45 | Сообщение # 38
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
arm-skif, ненорма шс

Добавлено (02.08.2015, 22:52)
---------------------------------------------
Добрый вечер. Когда на сервере в автозапуске запускается скрипт, который запускает внешнее приложение (runProgram(path_to_php-script.php "параметр1" "параметр2")), то вместо русских символов, передаются знаки вопроса.
php скрипт выполняется через консольный интерпретатор PHP и вносит в БД MySQL информацию ,переданную АРМ Скифом.
В PHP скрипте, первым делом (после подключения к БД) устанавливается нужная кодировка (UTF8). 
Собственно вопрос в следующем, видимо скрипт АРМ Скифа отдает русские символы в другой кодировке, кто-то в курсе в какой?

Добавлено (03.08.2015, 08:45)
---------------------------------------------
Причем, если делать запись в файл (как в вашем примере), то кодировка файла UTF8

 
arm-skifДата: Понедельник, 03.08.2015, 15:16 | Сообщение # 39
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
АРМ Скиф работает в UTF8. Возможно что-то не так преобразуется в runProgram, проверю.
 
arm-skifДата: Понедельник, 03.08.2015, 21:12 | Сообщение # 40
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Проверил в linux, с кодировкой все нормально. Сценарий в кодировке UTF8:armSkif.runProgram('kcalc -caption "ARM Skif проверка1"');

Результат:
Прикрепления: 2474691.png (44.6 Kb)
 
arm-skifДата: Понедельник, 03.08.2015, 21:49 | Сообщение # 41
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Вот такой скрипт тоже нормально работает:
armSkif.runProgram("sh 1.sh проверка");

Отдельно создан файл 1.sh, в который я записал:
echo $1 >> /home/sergey/test1.txt
 
arm-skifДата: Вторник, 04.08.2015, 01:51 | Сообщение # 42
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Попробуйте скрипт во вложении, он записывает состояния шлейфов в лог. У меня сигнал на изменения шлейфа срабатывает. Нет С2000-ИК, не могу точно сказать в чем причина. Если этот скрипт не сработает, то тогда через события.
Прикрепления: signalUpdateSh.7z (0.3 Kb)
 
arm-skifДата: Вторник, 04.08.2015, 11:15 | Сообщение # 43
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Насчет состояния шлейфа у меня есть еще одно предположение, я проверю, а потом попробуем на новой версии.
 
FlyJДата: Вторник, 04.08.2015, 22:19 | Сообщение # 44
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Цитата arm-skif ()
Попробуйте скрипт во вложении, он записывает состояния шлейфов в лог.

Аналогично. Реакция только на тревоги, взятие или снятие. Через события работает. Время реакции секунда или две (с учетом того, что событие архивируются в бд MySQL).
С кодировкой вопрос решен. Скиф передает в php скрипт в UTF8. В БД таблица была в UTF8, а вот одно из полей этой таблицы в latin1. Исправил средствами phpmyadmin кодировку поля на UTF8, русский язык стал отображаться корректно.
Спасибо.
 
arm-skifДата: Вторник, 04.08.2015, 23:39 | Сообщение # 45
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Попробуйте заменить серверное ПО на rpi: rpi.2.6.5
Проблема в том, что новые приборы могут сообщать состояние ШС двумя разными способами (условно назовем их старый и новый). В момент запуска, Скиф опрашивает ШС новым способом, а в момент поступления события  - старым (так удобно в реализации). Видимо для совместимости со старым ПО, для старого способа новый прибор выдает не самое приоритетное состояние ШС. Сейчас опрос старых приборов старым способом (как и было), а новых приборов - только новым способом.
 
FlyJДата: Среда, 05.08.2015, 19:23 | Сообщение # 46
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
взял файл сервера из предыдущего сообщения, заменил тот что был на rpi.
в автозагрузку сервера положил скрипт из 42 сообщения.
Сервер в лог пишет только взятие/снятие/тревогу
Прикрепления: 2719734.png (35.9 Kb)


Сообщение отредактировал FlyJ - Среда, 05.08.2015, 19:23
 
arm-skifДата: Среда, 05.08.2015, 20:37 | Сообщение # 47
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Странно. Это исправление решило подобную проблему у другого пользователя для С2000-4. Какая версия КДЛ и извещателя? Подумаю в чем может быть проблема.
 
FlyJДата: Среда, 05.08.2015, 21:35 | Сообщение # 48
Группа: Проверенные
Сообщений: 64
Репутация: 3
Статус: Оффлайн
Цитата arm-skif ()
версия КДЛ
1.36
 
signalizachiaДата: Вторник, 02.02.2016, 19:21 | Сообщение # 49
Группа: Проверенные
Сообщений: 1
Репутация: 0
Статус: Оффлайн
Доброго времени суток, прошу прощения за мой французский, но я электронщик по образованию. Если я просто управляю реле скриптом из клиента 
var   numPKU  = 1; // Номер пульта 
const numDev  = 4; // Номер прибора 
const numRelay= 4; // Номер реле 

const numServer = 1; // Номер сервера 
numPKU = armSkif.convert2ByteToWord(numServer, numPKU); 

// Включить реле 
armSkif.controlRelay(numPKU, numDev, numRelay, armSkif.RL_ON ); 
 то все гуд, но если я вставляю вот такой скрипт 
const numPKU  = 1; // Номер пульта
const numPart = 3; // Номер раздела
const numDev  = 4; // Номер прибора
const numRelay= 4; // Номер реле
  
// Если состояние какого-нибудь раздела изменится, то вызвать функцию.
armSkif.signalUpdatePart.connect( updatePart );

//---------------------------------------------------------------------------
function updatePart(nPKU, nPart)

  {if ( (nPKU == numPKU) && (nPart == numPart) ) // Если нужный раздел, то:
  
   {var partState = armSkif.getPartState(nPKU, nPart);// Состояние раздела
    
    if ( armSkif.isAlarmState(partState) ) // Если тревога, то:        
      armSkif.controlRelay(numPKU, numDev, numRelay, armSkif.RL_ON ); // Включить реле  
    else           
      armSkif.controlRelay(numPKU, numDev, numRelay, armSkif.RL_OFF); // Выключить реле  }}
   в папку ScriptsServer то ничего не происходит и как понять что я делаю не так-тоже вопрос, а существуют какие либо средства отладки или это
глупый вопрос?
 
arm-skifДата: Вторник, 02.02.2016, 21:09 | Сообщение # 50
Группа: Администраторы
Сообщений: 835
Репутация: 32
Статус: Оффлайн
Вполне рабочий скрипт. Вставьте в начало скрипта строку:
armSkif.writeLog("start");

а после
function updatePart(nPKU, nPart)
{


вставьте:
armSkif.writeLog(nPKU +", "+ nPart);

Результат можно посмотреть в файле:
log\ServerSkif_script.log

в этом же файле будут указаны ошибки выполнения скрипта.
 
Форум » Обсуждение программы АРМ "Скиф" » Предложения и пожелания » Сценарии
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Форма входа
Наш опрос
Для какой ОС будет востребована программа:
Всего ответов: 1437
Статистика