Просмотр полной версии : Ввод в MasterSCADA со сканера штрих-кода
Terminat
29.09.2014, 18:05
Как я понимаю, можно использовать сканер как клавиатуру для ввода непосредственно в мнемосхеме (например, через окно 'Ввод значения' у команды). Но этот вариант мне не подходит, так как вводить придется в несколько разных полей ввода в неопределенной последовательности, а оператор с беспроводным сканером будет находиться довольно далеко от АРМ.
Раздумываю над вариантами ввода другим способом. Переменную, в которую попадут данные, можно заложить в сам штрих-код. Через OPC-сервер? Если да, то какой именно, какие требования предъявлять к сканеру?
Или есть более удобные или простые варианты?
SCADAMaster
29.09.2014, 18:42
Вам действительно лучше воспользоваться ОРС сервером.
Скорее всего готовых ОРС серверов к сканерам не существует (не типовая для них задача), но ко многим сканерам есть открытый протокол, поэтому их можно подключить через наш Modbus Universal MasterOPC сервер.
Если к сканеру поставляется готовая библиотека реализации на C# (или .Net), то тогда можно получать значение через ФБ "Скрипт C#".
Terminat
10.11.2014, 16:41
Пробуем написать модуль ввода-вывода. Возникла проблема с передачей значений свойств в RTProcessor. Хотелось бы передавать, например, строку с именем COM-порта для его создания-открытия-закрытия runtime. Выбросил все лишнее:
Класс со свойством:
namespace TestModule
{
[Serializable]
public class TestModule : InternalModuleInstanceBase
{
string _comPortName = "COM1";
[DisplayName("Имя порта"), Category("Параметры порта")]
public string ComPortName
{
get { return _comPortName; }
set { _comPortName = value; }
}
public TestModule(string typeID) : base(typeID)
{
}
}
}
Класс режима исполнения:
namespace TestModule
{
public class TestModuleRTProcessor : InternalModulesRTProcessor
{
const int OutputPin = 1;
RTPinHlp _outputPin;
TestModule _testModule;
// SerialPort ComPort;
public override void Start()
{
_outputPin = GetRTPin(OutputPin);
_testModule = new TestModule("TestModule");
// MessageBox.Show("ComPort Name = " + _testModule.ComPortName, "Инфо");
// ComPort = new SerialPort(_testModule.ComPortName, 9600, Parity.None, 8, StopBits.One);
// ComPort.Open();
}
public override void Update()
{
_outputPin.SetValue(new PinValue(_testModule.ComPortName, DateTime.UtcNow));
}
public override void Dispose()
{
// ComPort.Close();
}
}
}
В примере для наглядности передаю свойство на выход, всегда получаю значение по умолчанию ("COM1"). Что делаю не так, что забыл?
SCADAMaster
11.11.2014, 20:09
Не нужно создавать новый Instance. Надо использовать свойство Instance только привести к нужному классу.
То есть будет
ComPort = new SerialPort(((TestModule)Instance).ComPortName, 9600, Parity.None, 8, StopBits.One);
Terminat
14.11.2014, 15:20
Спасибо.
И последний вопрос: использование модулей ввода вывода - не заказная опция в MasterSCADA (как базы данных, например)?
SCADAMaster
14.11.2014, 16:35
Нет, не заказная.
Точки модуля считаются как ОРС переменные.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot