Dim objProcess As System.Diagnostics.Process; objProcess = New System.Diagnostics.Process(); objProcess.StartInfo.FileName = "C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe"; objProcess.StartInfo.Arguments = "/A page=10 C:\Program Files\Wonderware\InTouch\ITDocGuide.pdf"; objProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; objProcess.Start();
Архив метки: .NET
Диалог выбора имени файла для InTouch
Задача: вызвать диалоговое окно выбора файла и по результату получить имя выбранного файла(ов).
Решение: Использование функционала класса System.Windows.Forms.OpenFileDialog
1. Импортируем библиотеку System.Windows.Forms.
ArchestrA IDE -> меню Galaxy -> Import -> Script Function Library… -> выбираем файл для .NET 2.0: C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll
2. Создаем ArchestrA символ и открываем его в ArchestrA Sysmbol Editor
3. Заводим Custom Properties с именем fName и типом данных string
4. Добавляем элемент Text и привязываем ему анимацию «Value Display«. Тип string, для переменной fName. Здесь будет выводиться имя выбранного нами файла.
5. Добавляем кнопку. По нажатию на нее будет вызываться скрипт выбора файла. Анимация ActionScript.
Текст скрипта:
dim f as System.Windows.Forms.OpenFileDialog; f = new System.Windows.Forms.OpenFileDialog; if(f.ShowDialog() == System.Windows.Forms.DialogResult.OK) then fName=f.FileName; endif;
6. Тестируем
Результат: По нажатию на кнопку вызывается диалог ОС выбора файла. После выбора мы получаем имя этого файла в виде строки.
Дополнительно:
- описание класса OpenFileDialog на MSDN
- добавить фильтрацию по типу файлов
- возможность выбора нескольких файлов
- и многое другое, см. описание класса на MSDN
—
Представление 64 битных беззнаковых целочисленных значений в InTouch
В классическом InTouch и в Application Server нельзя использовать теги и переменные типа Integer емкостью более 32 бит. Но, если при работе с Application Server есть доступ к классу MS .NET System.UInt64 (System.Int64), то в классическом InTouch этот функционал отсутствует. В практике, периодически, возникают задачи принять данные с разрядностью более 32 бит.
Недавно передо мной встала проблема отображения данных со счетчика, подключенного по Modbus RTU. Счетчик выдает данные в 3-х шестнадцати разрядных регистрах в целочисленном формате, т.е. для отображения этого значения мне потребуется не менее 48 бит. Но я взялся за более общую задачу — завести и отобразить переменную емкостью 64 бита (на самом деле описанный ниже способ легко переделать и для еще большей емкости переменной :)) хоть такого в практике я уже и не встречал).