Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача цены товара в весы
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Работа с торговым оборудованием
mact
Доброго!
Подскажите, у меня не совсем стандартная ситуация, немогу разобраться, мне нужно из 1с передать цену на весы, таковая функция имеется в которых,
Пытаюсь сделать это так

[пытаюсь прочитать правила форума, и наконец научиться выделять код]

Фунция тарирования(Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(01)wink.gif, снимания веса работают нормально (Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(03)wink.gif , а вот запись никак не одолею, может кто подскажет что? ( порт также пробывал закрывать после работы, не реагирует.
mact
Маленькое уточнение, весы ICS-15NT.
mact
Подскажите, я правильно хоть пишу в порт, или нет?
Функция Цена(Объект, Цена) Экспорт
    
    Если Объект.Драйвер.PortOpen = 1 Тогда
        
        //Передаю комманду на передачу цены
        Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);        
        //Пытаюсь передать цену
        Объект.Драйвер.Output = Символ(11)+Символ(22)+Символ(3);
        //закрываю порт
        Объект.Драйвер.PortOpen = 0;
    КонецЕсли;
КонецФункции // Цена()


Или
Объект.Драйвер.Output
вся запись должна быть в одной строчке
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02) +  Символ(11)+Символ(22)+Символ(3);

?
logist
Вы уверены, что команда на ввод данных, у драйвера, именно "Output", а не Input ? И, вероятно всё должно быть в одну строку.
mact
Вот функция считывания данных веса
Функция Вес(Объект, Вес) Экспорт

    Перем мТаймаут, мДлина, мДанные, мРезультат, мНачало, мБуфер, мТаут;

    Результат = мНетОшибки;
    
    Если Объект.Драйвер.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);
тоже отрабатывает(весы переключаются в режим "Тара" и устанавливают нулевой вес), т.е. запись комманды в порт проходит.
А вот при после комманды запись нужной информации не проходит, почему, непойму. Как-бы весы ждут чего-то ещё, или неправильно передаю.




Цитата(mact @ 26.01.15, 22:01) необходимо зарегистрироваться для просмотра ссылки
Аналогично комманду тарирования
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);


Сорри, не туда вставил, тарирование это
Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(01);


mact
Всем доброго!
Победил,
оказалось для подтверждения нужно после комманды передавать завершаюший символ(00)
        Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);
        Объект.Драйвер.Output = Цена+Символ(00);

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.