1С:Управление торговлей 11
Анализ и прогнозирование
Легкая промышленность, мода и одежда
Программист
Всем привет.
Пытаюсь заставить работать весы ВТА-60/15-6-А.
Протокол обмена есть в руководстве (тип протокола 0)
http://www.ppr.com.ua/upload/files/Instr_%20VTA-5-A.pdf
6.2.2. Протокол номер „0”.
Даний протокол використовується для роботи з іншими касовими апаратами та комп’ютером
(ЕОМ) і має наступний склад:
Вигляд байта: ВsВ0В1В2В3В4В5В6В7В8Вс,
де Вs – старт біт;
В0 -В3 – біти цифри;
В4-В7 – незначущі біти;
В8 – біт паритету (парність);
Вс – стоп біт.
Існує три режими обміну між вагами та ЕОМ:
- ЕОМ дає вагам команду тарування.
- ЕОМ передає ціну в ваги;
- ЕОМ приймає значення маси, ціни та вартості товару з ваг.
Перед кожною командою ведучий пристрій повинен передати не менше двох нулів.
Протокол використовує коди цифр 0- $00, 1 - $01, …, 9-$09.
Таблиця 2. Список команд протоколу та їх формат
Назва команди // Код команди (у двійковому коді) // Інформація що приймається (передається)
Взяття маси тари 1(0b00000001) ---
Передача ціни з ЕОМ у ваги 2(0b00000010) (ц1) (ц2) (ц3) (ц4) (ц5) (ц6)
Запит інформації з ваг 3(0b00000011) (м1) ... (м6) (ц1) ... (ц6) (в1) ... (в6)
Де: м1 ... м6 – маса товару;
ц1 ... ц6 – ціна товару;
в1 ... в6 – вартість товару.
м1, ц1, в1 –молодші розряди.
При від'ємній масі або масі рівній нулю вага не передає ніякої інформації. При відсутності заспокоєння команди
1 і 3 ігноруються.
Пишу в обработке:
Вопрос что передать в параметр ComPort.Output = ???;
Возможно в этом предложение "зарыта собака": Протокол використовує коди цифр 0- $00, 1 - $01, …, 9-$09.
Заранее благодарю за ответы. Прошу не пинать сильно.
Пытаюсь заставить работать весы ВТА-60/15-6-А.
Протокол обмена есть в руководстве (тип протокола 0)
6.2.2. Протокол номер „0”.
Даний протокол використовується для роботи з іншими касовими апаратами та комп’ютером
(ЕОМ) і має наступний склад:
Вигляд байта: ВsВ0В1В2В3В4В5В6В7В8Вс,
де Вs – старт біт;
В0 -В3 – біти цифри;
В4-В7 – незначущі біти;
В8 – біт паритету (парність);
Вс – стоп біт.
Існує три режими обміну між вагами та ЕОМ:
- ЕОМ дає вагам команду тарування.
- ЕОМ передає ціну в ваги;
- ЕОМ приймає значення маси, ціни та вартості товару з ваг.
Перед кожною командою ведучий пристрій повинен передати не менше двох нулів.
Протокол використовує коди цифр 0- $00, 1 - $01, …, 9-$09.
Таблиця 2. Список команд протоколу та їх формат
Назва команди // Код команди (у двійковому коді) // Інформація що приймається (передається)
Взяття маси тари 1(0b00000001) ---
Передача ціни з ЕОМ у ваги 2(0b00000010) (ц1) (ц2) (ц3) (ц4) (ц5) (ц6)
Запит інформації з ваг 3(0b00000011) (м1) ... (м6) (ц1) ... (ц6) (в1) ... (в6)
Де: м1 ... м6 – маса товару;
ц1 ... ц6 – ціна товару;
в1 ... в6 – вартість товару.
м1, ц1, в1 –молодші розряди.
При від'ємній масі або масі рівній нулю вага не передає ніякої інформації. При відсутності заспокоєння команди
1 і 3 ігноруються.
Пишу в обработке:
ComPort = Новый COMОбъект("MsCommLib.MsComm.1");
Попытка
ComPort.CommPort = 3;
ComPort.Settings = "4800,N,8,1";
ComPort.Handshaking = 0;
ComPort.InBufferCount = 0;
ComPort.InBufferSize = 70;
ComPort.InputLen = 0;
ComPort.InputMode = 0; // 1 данные, 0 Строки
ComPort.NullDiscard = 0;
ComPort.PortOpen = Истина;
Исключение
Сообщить("Не возможно открыть порт!");
ЭтаФорма.Закрыть();
КонецПопытки;
Попытка
ComPort.Output = "00 00 03"; // ??? Вот что тут писать не пойму никак...
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ПоказатьВопрос что передать в параметр ComPort.Output = ???;
Возможно в этом предложение "зарыта собака": Протокол використовує коди цифр 0- $00, 1 - $01, …, 9-$09.
Заранее благодарю за ответы. Прошу не пинать сильно.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Привет! Тоже столкнулся с данной проблемой. Вот код для получения веса:
function TMyClass.GetWeight(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
var
str, Stro, weight, PortName, readedstring, resultstring: String;
i, rl, L:integer;
cc, dp, by:Byte;
begin
//if g_isOpen then
// Raise Exception.Create('Порт уже открыт');
Property_DeviceID_GetSet(@Params[1], false, v8);
Str:= '003';
Stro:= '';
//MessageBox(0, Pchar(Str), '*Str',0);
For i:= 1 to length(Str) do
begin
Stro:= Stro + Chr(Ord(Str[i]) - Ord('0'));
end;
g_cp.WriteString(Stro);
MessageBox(0, pChar(@Params[1]), '*p_DeviceID',0);
try
repeat
readedstring:= '';
resultstring:= '';
// ожидание события
rl:=g_cp.p_ScalesProt;
readedstring:=g_cp.ReadString(rl);
//MessageBox(0, pChar(readedstring), '*readedstring 1 ',0);
//stringlength := length(readedstring);
If length(readedstring) <rl then
readedstring:=readedstring+g_cp.ReadString(rl-length(readedstring));
//MessageBox(0, pChar(readedstring), '*length(readedstring)<rl',0);
//MessageBox(0, pChar(stringlength), '*length(readedstring)',0);
if length(readedstring)=rl then begin
Case rl of
18: begin
For i:=1 to 6 do
begin
resultstring:=chr(ord(readedstring[i])+Ord('0'))+resultstring;
if i=3 then
resultstring:='.'+resultstring;
end;
//evt:= 'weight1';
end;
10: begin
// <N,И6,И5,И4,И3,И2,И1,СС> Протокол 10
resultstring:=Copy(readedstring,3,6);
CC:=ord(readedstring[9]);
//положення крапки с1с0
dp:=CC mod 4;
// біт заспокоєння с2
by:= (CC mod 8) shr 2;
//індикація "0" с3
//Светится0=Цел((СС % 16)/8);
//індикація "Т" с4
//СветитсяТ=Цел((СС % 32)/16);
//Сообщить(СС);
//Сообщить(СветитсяТ);
//знак ваги 1= <0 с5
//Если Цел((СС % 64)/32)=0 тогда
//ЗнакВесов=1
//Иначе
// ЗнакВесов=-1
//КонецЕсли;
insert('.',resultstring,6-dp);
//evt:= 'weight'+inttostr(by);
end;
7: begin
// <,N,И2,И1,И0,СС > протокол 7
end;
end;
SetParamDouble(StrToFloat(resultstring), 1, Params);
//Params[2].VarEnum.dblVal := StrToFloat(resultstring);
MessageBox(0, pChar(@Params[2]), '*WeightD',0);
end;
sleep(300);
result := True;
until readedstring = '';
except
on E:Exception do begin
g_ErrorMsg:=E.Message;
V8.addError(1006, 'Внешняя компонента', pWideChar(g_ErrorMsg), E_FAIL);
result := False;
end;
end;
end;
Показать
А вот параметры СОМ порта:
//Выставляем параметры COM-порта
//Выставляем параметры COM-порта
p_BaudRate:= CBR_4800;
p_ByteSize:= 8;
p_Parity:= EVENPARITY;
p_StopBits:= ONESTOPBIT;
if not GetCommState(hCom,dcb) //uses Windows
then RaiseLastOSError;
dcb.BaudRate:=p_BaudRate;
dcb.ByteSize:=p_ByteSize;
if p_scalesprot=18 then
dcb.Parity:=p_Parity
else
dcb.Parity:=NOPARITY;
dcb.StopBits:=p_StopBits;
if not SetCommState(hCOM,dcb) //uses Windows
then RaiseLastOSError;
//Выставляем параметры COM-порта
if not GetCommTimeOuts(hCom,cto) //uses Windows
then RaiseLastOSError;
cto.ReadIntervalTimeout:=1;
cto.ReadTotalTimeoutMultiplier:=1;
cto.ReadTotalTimeoutConstant:=10;
cto.WriteTotalTimeoutMultiplier:=0;
cto.WriteTotalTimeoutConstant:=0;
if not SetCommTimeOuts(hCom,cto) //uses Windows
then RaiseLastOSError;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот