Мы проверили - у нас установилось корректно, в свойства есть.
Попробуйте переустановить плагин
Вид для печати
Мы проверили - у нас установилось корректно, в свойства есть.
Попробуйте переустановить плагин
Уже пробовал... не помогло, видимо какие-то настройки в ОС, ладно, спасибо, буду разбираться...
http://www.owen.ru/forum/showthread....l=1#post160889
Значения из предыдущей сессии - такое возможно?Цитата:
Такое ощущение, что приходят значения, которые принимал тэг во время разрыва... Подскажите, пожалуйста с чем это может быть связано? - Если TCP-slave не игнорирует значения из предыдущей сессии - такое поведение возможно, я думаю. Но почему slave не игнорирует данные? Свяжитесь с разработчиком OPC
Приложите лог обмена. Для этого в свойствах сервера включите запись журнала и всех его событий, размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам.
Добрый день! Начал разбираться с MasterScada. Сделал небольшой проект на версии RT32 для получения и обработки оперативной информации. Сейчас необходимо разработать более серьезный проект. В наличии есть OPC DA сервер, по средствам которого я опрашиваю приборы учета (сервер идет вместе с прибором). В сервере реализована возможность обратиться к архивным данным прибора – введены соответствующие переменные (тип архива (часовой, суточный, месячный), параметр, время и т.д.), с помощью которых формируется запрос на чтение архивных данных. Соответственно на выходе получаю значение параметра, метку времени и признак качества. Т.е. можно написать С#-скрипт для получения данных за время работы прибора. Чем сейчас и занимаюсь. Встал вопрос – как в С#-скрипте сформировать переменные мастерскады и их архивы и соответственно записывать в них данные, что бы была возможность работать с ним дальше средствами Мастерскады. Т.е. объединить 3 значения, полученные от ОРС сервера, в одну переменную скады.
Для этого нужно выполнить следующую команду:
SetValue("Выход", ВашеЗначение,ПризнакКачества, МеткаВремени);
Как мы понимаем вы будете получать значение, признак качества и метку времени от входа скрипта. Это делается так:
(int)GetValue("Вход").OpcQuality; - признак качества
GetValue("Вход").Value; - Значение
GetValue("Вход").Time; - метка времени.
Спасибо за ответ.
Но немного не так. Соответственно 3 входа скрипта (значение, время, качество), так как 3 ОРС переменные. Поэтому получается у меня SetValue("Выход", значение_Вход1, значение_Вход2, значение_Вход3). Попробовал реализовать (SetValue("ВыходЗначения",GetValue("Значение_Вход" ).Value,GetValue("Признак").Value,GetValue("Время" ).Value);), но компилятор выдал «Ни одна из перегрузок метода "SetValue" не принимает "4" аргументов».
Пример в приложении.
Как тег может принимать значения во время разрыва?
И как сервер может понять что пришел запрос с предыдущей сессии?
Вообще по нормальному здесь должно быть Transaction ID. Его использование (постоянное увеличение) позволяет избежать получения ложных запросов. У нас в ОРС сервере он контролируется и генерируется (как в режиме Master так и в режиме Slave).
Большое спасибо!
Я посмотрел реализацию метода SetValue в хэлпе по объектной модели.
Самое главное нужен лог.
Лог во вложении. Ложные значения зафиксированы в 20:52:15...18. Тэг с адресом 6 формата UINT32.
... ещё на всякий случай. Зафиксировал конкретные значения:
Время примерно 21:21:55, нормальное значение тэга - 1078, ложное значение - 9365.
В указанное время запросов по адресу 6 нет. Есть чуть раньше:
[03.02.2015 20:52:14.482] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 2B 1F 00 00
[03.02.2015 20:52:14.482] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.494] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 29 7D 00 00
[03.02.2015 20:52:14.494] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.506] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 27 DB 00 00
[03.02.2015 20:52:14.506] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.518] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 26 39 00 00
[03.02.2015 20:52:14.518] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.530] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 25 69 00 00
[03.02.2015 20:52:14.530] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
[03.02.2015 20:52:14.542] TRACE : (10.0.6.10:502) Rx: [0017] 01 C4 00 00 00 0B 06 10 00 06 00 02 04 23 C7 00 00
[03.02.2015 20:52:14.542] TRACE : (10.0.6.10:502) Tx: [0012] 01 C4 00 00 00 06 06 10 00 06 00 02
Как вы сами можете видеть контроллер шлет за короткое время набор разных значений.
Лог за указанное вами время отсутствует.
Во вложении скриншот ситуации, которая меня беспокоит. Это происходит после физического разрыва соединения. Стрелками отмечены связанные тэги. Реальное значение = 1077 не меняется в контроллере, а в сервере вижу ложные значения. Судя по логу сервер эти ложные значения честно получает. Чрез несколько секунд значение в сервере восстановится. Кто же всё-таки виноват- контроллер, который почему-то генерит неправильное сообщение, или сервер, который не должен это сообщение принимать?
Посмотрите на скриншот 1B 9B это 7067. Почему сервер не должен принять это значение? Как он должен определить что оно не достоверное?
Да, да, я специально поймал этот момент, чтобы было видно транзакцию. Вижу, что значение приходит для сервера вроде бы достоверное. Пойду спрошу у Владислава... эх, опять сниффер заставит запускать... :)
В MasterOPC time.TimeNow() возвращает время с секундной точностью, однако во всех логах оно отдаётся с точностью до тысячной доли секунды, а среди функций работы со временем есть функции, работающие с точностью до милисекунды. Как получить текущее время с такой точностью?
Добавить миллисекунды можно помощью функции time.TimeToTimeStamp( ). Описание функции вы можете посмотреть в справке.
Или вам нужно получить точное время с миллисекундной точностью?
Уже 3 день пытаюсь что то сотворить с данным скриптом, мое достижение это то, что компилирует без ошибок), но ни нового файла не создает на диске C, ничего вообще:(, прошу помощи, что я делаю не так?:confused:
Код:using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using System.Windows.Forms;
using MasterSCADALib;
using System.IO;
using MasterSCADA.Documents;
using System.Collections.Generic;
using System.Text;
using InSAT.Library;
public partial class ФБ : ScriptBase
{
Edge read = new Edge();
Edge write = new Edge();
public override void Execute()
{
if (Сохранение!=null)
{
StreamWriter csv = new StreamWriter("C:\test.csv", true, System.Text.Encoding.GetEncoding(1251));
//открытие файла для записи
{
var Fio = ФИО;
var smena = смена;
var now = DateTime.Now;
csv.WriteLine("{0};{1};{2}", Fio, smena, now); //записываем в файл
}
}
}
}
Попробуйте для начала сохранять не на диск C, а куда нибудь в другое место (например в папку на диске D). Чтобы писать файл в корень диска нужны права администратора, а по умолчанию MasterSCADA запускается без них
Приложите проект.
Вложение 16598
вот, пробую, при переходе в режим исполнения создает файл, в дереве объектов даю значения, и переключаю "Сохранить" в "вкл", ноль эмоций
Подскажите, пожалуйста, по журналу:
Создал событие, которое генерит сообщение: Категория: информация, приоритет: обычный. Каналы: строка статуса, журнал.
В режиме исполнения открываю основной журнал - вижу появляющиеся сообщения. Закрываю журнал, затем вновь открываю - вижу только одно последнее сообщение. Куда пропали остальные?
Пробовали снизу период выставить больше?
угу, по умолчанию период 4 часа и автопрокрутка, пробовал ставить "все сообщения"
Флаг в фильтре стоит "только активные" или "только неквитированные"?
Ни тот ни другой, "только компьютер объекта", причём если эту галку снять, сообщения тут же пропадают и после обратной установки не появляются
У вас неправильно была написана строка:
using(var file = new StreamWriter(@"C:\test.csv", true, Encoding.GetEncoding("windows-1251")))
Также нужно иметь ввиду, что данная команда не создает папки. То есть если папка куда происзводится сохранение не существует нужно ее создать.
В примере "Сохранение и загрузка набора команд это есть":
Directory.CreateDirectory(HostFB.TreeItemHlp.Folde rPath)
Переменная M нужна для создания триггера переднего фронта. То есть сохранение будет производится только когда на входе сигнал из False перейдет в True.
Такой функции нет.
Для какой задачи вам это требуется?
Пытаюсь за приемлемое время приблизительно определить неточность хода часов устройства
Пока что как вариант - вы можете производить запись в тег, а затем у тега в скрипте перед записью, читать метку времени тега - она будет с миллисекундами.