Уважаемая техподдержка, при реализации проекта столкнулся с некоторыми трудностями. 1) На экране имеется кнопка при нажатии на которую производится запись аргументов в файл .dat . С экраном работает нормально, но мне нужно команду на запись реализовать из программы. При попытке реализовать это я столкнулся со странной проблемой. Даже если программа не шлет в аргумент единицу все равно при наличии привязки программы и канала с типом вызова ChGroupReq происходит запись значений аргументов в файл (т.е. в файл записывается все время) почему так происходит? Более того создаются два файла! - один пишется все время с циклом CALL, а другой только при подаче единицы в атрибут 129 (разница в названии прочерк с единицей Имя_канала_1 ) . Как избавится от лишнего файла (который пишется с периодом CALL)? 2) Какое максимальное количество аргументов может иметь канал с типом вызова ChGroupReq? 3) У меня сейчас у канала для записи в файл (ChGroupReq) 165 аргументов и привязок, все работает без ошибок, но мне надо их более 1000. При попытке реализовать это начинаются странные путаницы в привязках, когда открываешь полученный файл правильные значения записаны только в начале файла, а дальше начинаются повторения и пропуски. Как можно это исправить?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Программа всегда посылает в аргумент OUT какое-то значение, даже если это значение программа не изменяет. В Вашем случае постоянно пишется файл по подаче "0". Необходимо либо эту программу запускать по событию, либо передавать сигнал на запись/считывание с помощью каналов (типа OUT) CALL.MOVE или CALL.SET с одновременным управлением их атрибутом 39 (EXEC).
Количество аргументов у канала ChGroupReq может быть существенно больше 1000. Надо учитывать, что если Вы удаляли аргументы из середины массива аргументов, то общее количество аргументов у канала в реальном времени будет больше - будет определяться старшим IDE оставшихся аргументов. Операции записи/чтения осуществляются в основном потоке обработки каналов в синхронном режиме. Чрезмерное увлечение такими операциями может привести к увеличению цикла обработки базы каналов и увеличении потребляемых ресурсов.
При корректной реализации записи нарушений в файле быть не должно.
Posted by Gennady (Участник № / Member № 6305) on :
Чтобы не создавать новую тему спрошу здесь.
Как сделать так что бы используя механизм записи/чтения аргументов канала CALL в текстовый файл через атрибут 128,129, записывать и читать более одного файла?
У меня читает и пишет только один файл. Мне надо больше
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
В актуальном релизе 6.10.2 данный механизм работает с более чем одним файлом.
Из Справочной Системы "Каналы и Системные переменные - Канал класса CALL - Атрибуты канала класса CALL":
quote:Запись в файл (129, WFile) – при посылке в этот атрибут неотрицательного значения V текущие значения аргументов канала записываются в текстовый файл <имя канала>_<N>.dat (N – целая часть V; если N=0, файл имеет имя <имя канала>.dat), каждая строка которого содержит обозначение аргумента и его значение.
К примеру, есть канал Call.CGR с именем Call. Если в 129 атрибут ввести число 1, то будет создан в папке проекта файл CALL_1.dat. Если 2, то CALL_2.dat и т.д. Если 0.2, то CALL.dat