Версия для печати темы (https://pro1c.org.ua/index.php?s=b42a508ed07412da0d3d792b435b5052&showtopic=21725)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Работа с торговым оборудованием _ Передача цены товара в весы

Автор: mact 26.01.15, 1:46

Доброго!
Подскажите, у меня не совсем стандартная ситуация, немогу разобраться, мне нужно из 1с передать цену на весы, таковая функция имеется в которых,
Пытаюсь сделать это так

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

Фунция тарирования(Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(01)wink.gif, снимания веса работают нормально (Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(03)wink.gif , а вот запись никак не одолею, может кто подскажет что? ( порт также пробывал закрывать после работы, не реагирует.

Автор: mact 26.01.15, 8:47

Маленькое уточнение, весы ICS-15NT.

Автор: mact 26.01.15, 20:44

Подскажите, я правильно хоть пишу в порт, или нет?

Функция Цена(Объект, Цена) Экспорт
    
    Если Объект.Драйвер.PortOpen = 1 Тогда
        
        //Передаю комманду на передачу цены
        Объект.Драйвер.Output = Символ(00)+Символ(00)+Символ(00)+Символ(02);        
        //Пытаюсь передать цену
        Объект.Драйвер.Output = Символ(11)+Символ(22)+Символ(3);
        //закрываю порт
        Объект.Драйвер.PortOpen = 0;
    КонецЕсли;
КонецФункции // Цена()


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

?

Автор: logist 26.01.15, 21:14

Вы уверены, что команда на ввод данных, у драйвера, именно "Output", а не Input ? И, вероятно всё должно быть в одну строку.

Автор: mact 26.01.15, 22:07

Вот функция считывания данных веса

Функция Вес(Объект, Вес) Экспорт

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

    Результат = мНетОшибки;
    
    Если Объект.Драйвер.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 29.01.15, 10:12

Всем доброго!
Победил,
оказалось для подтверждения нужно после комманды передавать завершаюший символ(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