Доброго!
Подскажите, у меня не совсем стандартная ситуация, немогу разобраться, мне нужно из 1с передать цену на весы, таковая функция имеется в которых,
Пытаюсь сделать это так
[пытаюсь прочитать правила форума, и наконец научиться выделять код]
Фунция тарирования(Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(01), снимания веса работают нормально (Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(03) , а вот запись никак не одолею, может кто подскажет что? ( порт также пробывал закрывать после работы, не реагирует.
Маленькое уточнение, весы ICS-15NT.
Подскажите, я правильно хоть пишу в порт, или нет?
Функция Цена(Объект, Цена) Экспорт
Если Объект.Драйвер.PortOpen = 1 Тогда
//Передаю комманду на передачу цены
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);
//Пытаюсь передать цену
Объект.Драйвер.Output = Символ(11)+Символ(22)+Символ(3);
//закрываю порт
Объект.Драйвер.PortOpen = 0;
КонецЕсли;
КонецФункции // Цена()
Объект.Драйвер.Output
вся запись должна быть в одной строчке Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02) + Символ(11)+Символ(22)+Символ(3);
Вы уверены, что команда на ввод данных, у драйвера, именно "Output", а не Input ? И, вероятно всё должно быть в одну строку.
Вот функция считывания данных веса
Функция Вес(Объект, Вес) Экспорт
Перем мТаймаут, мДлина, мДанные, мРезультат, мНачало, мБуфер, мТаут;
Результат = мНетОшибки;
Если Объект.Драйвер.PortOpen = 1 Тогда
мТаймаут = 2;
мДлина = 0;
мДанные = "";
мРезультат = Ложь;
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(03);
мНачало = ТекущаяДата();
Пока Истина Цикл
Если Объект.Драйвер.InBufferCount>0 Тогда
мНачало = ТекущаяДата();
мБуфер = Объект.Драйвер.Input;
Сообщить("мБуфер="+мБуфер);
мДанные = мДанные + мБуфер;
мДлина = мДлина + СтрДлина(мБуфер);
КонецЕсли;
Если мДлина>=18 Тогда мРезультат = Истина;
Прервать;
КонецЕсли;
мТаут = (ТекущаяДата()-мНачало);
Если мТаут>=мТаймаут Тогда
мРезультат = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если мРезультат Тогда
мБуфер = Сред(мДанные,1,6);
мДлина = СтрДлина(мБуфер);
мДанные = "";
Пока мДлина>0 Цикл
мДанные = мДанные + Сред(мБуфер,мДлина,1);
мДлина = мДлина - 1;
КонецЦикла;
Попытка
мДлина = Число(мДанные);
Исключение
мДлина = 0;
КонецПопытки;
Вес = мДлина/1000;
Иначе
Результат = мОшибкаНеизвестно;
Объект.ОписаниеОшибки = "Таймаут устройства";
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции // Вес()
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);
тоже отрабатывает(весы переключаются в режим "Тара" и устанавливают нулевой вес), т.е. запись комманды в порт проходит.Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(01);
Всем доброго!
Победил,
оказалось для подтверждения нужно после комманды передавать завершаюший символ(00)
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);
Объект.Драйвер.Output = Цена+Символ(00);
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua