█ 02.02.2017 12:25
День добрый
Есть весы Cas 5000j, прошивка при включении 2.1.7.S
Встала задача печати состава продукта.
Скачал Cl-works pro. Настроил сообщения — закинул в весы.
Теперь пытаюсь сделать этикетку —
попытки прочесть этикетки с весов дают ошибку
192.168.0.15 Vesi Communication Error (0)
Делаю этикетку руками (штрих код, текст, состав), номер 51 и пробовал другие, попытка залить
192.168.0.15 Vesi System.Drawing.Bitmap Not support in this model (-1007)
Этикетки 58-40. Хотел на таких уместить состав..
Хорошо, ну не выходит. Пробую указать под конкретный товар свою этикетку, допустим 60 формат. Там есть состав.
Если ставлю в сам товар в поле LabelNo — что в весах, что через утилиту — весы все равно печатают ОБЩУЮ этикетку заданную в меню 1510.
Объясните как или присвоить конкретному товару свой формат этикетки и как можно загрузить свой формат этикетки в весы ? (58-40 с текстами сообщений состава продукта).
█ 02.02.2017 13:14
Для начала необходимо удостовериться, что коннект с весами проходит:
█ 02.02.2017 13:21
Цитата:
Vacony ➤ Хорошо, ну не выходит. Пробую указать под конкретный товар свою этикетку, допустим 60 формат. Там есть состав.
Если ставлю в сам товар в поле LabelNo — что в весах, что через утилиту — весы все равно печатают ОБЩУЮ этикетку заданную в меню 1510.
Прежде пользовательский шаблон необходимо загрузить в весы.
Прикрепите ваш шаблон в формате .lfm, посмотрю, что не так
█ 02.02.2017 13:46
Коннект есть. И в тесте, и товары заливаются.
Проблема что весы не понимают индивидуальный номер этикетки. И не дают считать этикетки из весов на ПК.
У меня бумага 58-40, был формат этикетки 4. Просто хотел добавить ниже состав ) Думал будет проще..
Прикладываю этикетку
█ 02.02.2017 13:47
Методом перебора выяснил, что если добавлять в этикетку текст — выгрузка не проходит…
Т.е. вывести цену можно, а рядом подпись ЦЕНА — не дает.
█ 02.02.2017 14:32
Vacony, убрал sample text, т.к. данное поле не поддерживается этой моделью. Добавил ЦЕНА, СУММА, ВЕС. Проверяйте. У меня все работает.
█ 02.02.2017 15:10
спасибо большое ) пока ковырял примерно к этому же пришел..
итого — вытянуть форматы с весов этикеток в ПК — нельзя тут.
надписи можно брать только с коллекции что идет в этикетке. написать свое что то нельзя.
Подвязать разный формат этикеток на разные товары тоже не выходит — печатается всегда общая этикетка заданная в меню 1510 на PLU. поле формат этикетки из таблицы PLU почему то игнорируется. что туда ни ставишь этикетка не меняется.
И последний вопрос, вдруг знаете. В весы всегда закидывал товары через библиотеку ForCas2.dll . Теперь вот надо закидывать состав, метод SendMSG отрабатывает , но в самих весах если вычитывать то что передалось — получается каша.
█ 02.02.2017 15:18
Цитата:
Vacony ➤ вытянуть форматы с весов этикеток в ПК — нельзя тут
только с 51 по 60 форматы
Цитата:
Vacony ➤ надписи можно брать только с коллекции что идет в этикетке. написать свое что то нельзя.
да, поле «текст» не поддерживается
Цитата:
Vacony ➤ Подвязать разный формат этикеток на разные товары тоже не выходит — печатается всегда общая этикетка заданная в меню 1510 на PLU. поле формат этикетки из таблицы PLU почему то игнорируется. что туда ни ставишь этикетка не меняется.
Можно, если предварительно создать и загрузить пользовательский формат с номером от 51 до 60.
Цитата:
Vacony ➤ И последний вопрос, вдруг знаете. В весы всегда закидывал товары через библиотеку ForCas2.dll . Теперь вот надо закидывать состав, метод SendMSG отрабатывает , но в самих весах если вычитывать то что передалось — получается каша.
Тут не подскажу
█ 02.02.2017 15:22
да точно, попробовал старой версией Cl work — 2.96.10
Указал 59-60, вытянул файлики. Но она не работает с отделами.. ни выгрузить ни загрузить…
Т.е. к товарам можно подвязать только 51-60 форматы индивидуально ? сейчас попробую…
█ 02.02.2017 15:29
Вот товары с выбранными разными этикетками. При печати печатается всегда одна общая для всех товаров в настройках весов
Часовой пояс GMT +3, время: 21:26.
Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.
Здравствуйте!
Если загрузка товаров в категории программы «Товары» происходит без появления сообщений «Communication failed»,проблема может быть в данных, которые вы пытаетесь загрузить в весы, например, загрузка не поддерживаемого весами формата штрихкода или загрузка формата этикетки, содержащего не поддерживаемые весами поля. Убедитесь, пожалуйста, в том, что формат штрихкода поддерживается весами (стр.33 Руководства по эксплуатации:
https://cascis.ru/images/materials/CL5000J-I-2014-11.pdf
),поля формата этикетки и другие загружаемые данные поддерживаются весами. Если загрузка и выгрузка товаров также происходит с прерываниями «Communication failed»,попробуйте заменить Ethernet-кабельна новый и, если это не поможет, обратитесь в ближайшее отделение сервисной
службы для диагностики весов.
С уважением,
Техническая служба ООО «КСТ»
Я написал программу, которая включает в себя использование операторов switch… Однако при компиляции она показывает:
Ошибка: переход к метке case.
Почему он это делает?
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
class contact
{
public:
string name;
int phonenumber;
string address;
contact() {
name= "Noname";
phonenumber= 0;
address= "Noaddress";
}
};
int main() {
contact *d;
d = new contact[200];
string name,add;
int choice,modchoice,t;//Variable for switch statement
int phno,phno1;
int i=0;
int initsize=0, i1=0;//i is declared as a static int variable
bool flag=false,flag_no_blank=false;
//TAKE DATA FROM FILES.....
//We create 3 files names, phone numbers, Address and then abstract the data from these files first!
fstream f1;
fstream f2;
fstream f3;
string file_input_name;
string file_input_address;
int file_input_number;
f1.open("./names");
while(f1>>file_input_name){
d[i].name=file_input_name;
i++;
}
initsize=i;
f2.open("./numbers");
while(f2>>file_input_number){
d[i1].phonenumber=file_input_number;
i1++;
}
i1=0;
f3.open("./address");
while(f3>>file_input_address){
d[i1].address=file_input_address;
i1++;
}
cout<<"tWelcome to the phone Directoryn";//Welcome Message
do{
//do-While Loop Starts
cout<<"Select :n1.Add New Contactn2.Update Existing Contactn3.Display All Contactsn4.Search for a Contactn5.Delete a Contactn6.Exit PhoneBooknnn";//Display all options
cin>>choice;//Input Choice from user
switch(choice){//Switch Loop Starts
case 1:
i++;//increment i so that values are now taken from the program and stored as different variables
i1++;
do{
cout<<"nEnter The Namen";
cin>>name;
if(name==" "){cout<<"Blank Entries are not allowed";
flag_no_blank=true;
}
}while(flag_no_blank==true);
flag_no_blank=false;
d[i].name=name;
cout<<"nEnter the Phone Numbern";
cin>>phno;
d[i1].phonenumber=phno;
cout<<"nEnter the addressn";
cin>>add;
d[i1].address=add;
i1++;
i++;
break;//Exit Case 1 to the main menu
case 2:
cout<<"nEnter the namen";//Here it is assumed that no two contacts can have same contact number or address but may have the same name.
cin>>name;
int k=0,val;
cout<<"nnSearching.........nn";
for(int j=0;j<=i;j++){
if(d[j].name==name){
k++;
cout<<k<<".t"<<d[j].name<<"t"<<d[j].phonenumber<<"t"<<d[j].address<<"nn";
val=j;
}
}
char ch;
cout<<"nTotal of "<<k<<" Entries were found....Do you wish to edit?n";
string staticname;
staticname=d[val].name;
cin>>ch;
if(ch=='y'|| ch=='Y'){
cout<<"Which entry do you wish to modify ?(enter the old telephone number)n";
cin>>phno;
for(int j=0;j<=i;j++){
if(d[j].phonenumber==phno && staticname==d[j].name){
cout<<"Do you wish to change the name?n";
cin>>ch;
if(ch=='y'||ch=='Y'){
cout<<"Enter new namen";
cin>>name;
d[j].name=name;
}
cout<<"Do you wish to change the number?n";
cin>>ch;
if(ch=='y'||ch=='Y'){
cout<<"Enter the new numbern";
cin>>phno1;
d[j].phonenumber=phno1;
}
cout<<"Do you wish to change the address?n";
cin>>ch;
if(ch=='y'||ch=='Y'){
cout<<"Enter the new addressn";
cin>>add;
d[j].address=add;
}
}
}
}
break;
case 3 : {
cout<<"ntContents of PhoneBook:nntNamestPhone-NumberstAddresses";
for(int t=0;t<=i;t++){
cout<<t+1<<".t"<<d[t].name<<"t"<<d[t].phonenumber<<"t"<<d[t].address;
}
break;
}
}
}
while(flag==false);
return 0;
}
Ответ 1
Проблема состоит в том, что переменные, объявленные в одном case
, все еще видны в следующем case
, если не используется явный блок { }
, но они не будут инициализированы, потому что код инициализации принадлежит другому case
.
В следующем коде, если foo
равно 1, все в порядке, но если оно равно 2, мы случайно используем переменную i
, которая существует, но, вероятно, содержит мусор.
switch(foo) {
case 1:
int i = 42; // i exists all the way to the end of the switch
dostuff(i);
break;
case 2:
dostuff(i*2); // i is *also* in scope here, but is not initialized!
}
Обертка корпуса в явном блоке решает проблему:
switch(foo) {
case 1:
{
int i = 42; // i only exists within the { }
dostuff(i);
break;
}
case 2:
dostuff(123); // Now you cannot use i accidentally
}
Изменить
Чтобы уточнить, утверждения switch
являются всего лишь особенно причудливым видом goto
. Здесь аналогичный фрагмент кода имеет ту же проблему, но с использованием goto
вместо switch
:
int main() {
if(rand() % 2) // Toss a coin
goto end;
int i = 42;
end:
// We either skipped the declaration of i or not,
// but either way the variable i exists here, because
// variable scopes are resolved at compile time.
// Whether the *initialization* code was run, though,
// depends on whether rand returned 0 or 1.
std::cout << i;
}
Ответ 2
Заявление о новых переменных в заявлениях о случаях вызывает проблемы. Включение всех операторов case
в {}
ограничивает область новых объявленных переменных текущим исполняемым случаем, который решает проблему.
switch(choice)
{
case 1: {
// .......
}break;
case 2: {
// .......
}break;
case 3: {
// .......
}break;
}
Ответ 3
Стандарт С++ 11, перепрыгивающий через некоторые инициализации
JohannesD дал объяснение, теперь для стандартов.
Проект стандарта С++ 11 N3337 6.7 «Заявление декларации» гласит:
3 Можно передавать в блок, но не так, чтобы обойти объявления с инициализацией. Программа, которая переходит (87) из точки, в которой переменная с автоматическим хранением находится вне области действия, до точки, в которой она находится в области видимости, плохо сформирована, если переменная не имеет скалярного типа, типа класса с тривиальным конструктором по умолчанию и тривиальным деструктор, cv-квалифицированная версия одного из этих типов или массив одного из предыдущих типов и объявляется без инициализатора (8.5).
87) Переход от условия оператора switch к метке регистра считается скачком в этом отношении.
[ Пример:
void f() { // ... goto lx; // ill-formed: jump into scope of a // ... ly: X a = 1; // ... lx: goto ly; // OK, jump implies destructor // call for a followed by construction // again immediately following label ly }
— конец примера]
Начиная с GCC 5.2, сообщение об ошибке теперь говорит:
пересекает инициализацию
С
C позволяет это: C99 Перейти к инициализации
Проект стандарта C99 N1256 Приложения я «Общие предупреждения» гласит:
2 Блок с инициализацией объекта, который имеет автоматическую продолжительность хранения, перемещается в
Ответ 4
JohannesD ответ правильный, но я чувствую, что не совсем ясно по аспекту проблемы.
Пример, который он приводит, объявляет и инициализирует переменную i
в случае 1, а затем пытается использовать ее в случае 2. Его аргумент заключается в том, что если бы переключение перешло прямо к случаю 2, i
бы использовал его без инициализации, и именно поэтому ошибка компиляции. В этот момент можно подумать, что не будет проблем, если переменные, объявленные в одном случае, никогда не будут использоваться в других случаях. Например:
switch(choice) {
case 1:
int i = 10; // i is never used outside of this case
printf("i = %dn", i);
break;
case 2:
int j = 20; // j is never used outside of this case
printf("j = %dn", j);
break;
}
Можно ожидать, что эта программа скомпилируется, так как i
и j
используются только внутри случаев, которые их объявляют. К сожалению, в C++ он не компилируется: как объяснил Ciro Santilli 包子 露 宪 六四 事件 法轮功, мы просто не можем перейти к case 2:
так как это пропустит объявление с инициализацией i
, и даже если case 2
вообще не использует i
, это все еще запрещено в C++.
Интересно, что с некоторыми корректировками (#ifdef
для #include
соответствующего заголовка и точка с запятой после меток, поскольку за метками могут следовать только операторы, а объявления не считаются как операторы в C), эта программа компилируется как C:
// Disable warning issued by MSVC about scanf being deprecated
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#ifdef __cplusplus
#include <cstdio>
#else
#include <stdio.h>
#endif
int main() {
int choice;
printf("Please enter 1 or 2: ");
scanf("%d", &choice);
switch(choice) {
case 1:
;
int i = 10; // i is never used outside of this case
printf("i = %dn", i);
break;
case 2:
;
int j = 20; // j is never used outside of this case
printf("j = %dn", j);
break;
}
}
Благодаря онлайн-компилятору, например http://rextester.com, вы можете быстро попытаться скомпилировать его как C или C++, используя MSVC, GCC или Clang. Как C всегда работает (только не забудьте установить STDIN!), Как C++ ни один компилятор не примет это.
Ошибка: error 001: expected token: «;», but found «бла-бла»
Решение: Идём на строку выше той, что указана в ошибке и ставим в конце ; (точку с запятой).
Ошибка: error 021: symbol already defined: «бла-бла» или warning 219: local variable «бла-бла» shadows a variable at a preceding level
Решение: Ошибка появляется, если вы несколько раз создали одну и ту же переменную,stock,public.Для решения вам просто требуется удалить дубликат.
Ошибка: error 024: «break» or «continue» is out of context
Решение: break,continue используется только в цикле (for), данная ошибка появляется, если вы использовали их не в цикле. Для решения вам нужно просто заменить их.
Ошибка: error 032: array index out of bounds (variable «cartek»)
Решение: Ошибка появляется, если у вас превышен индекс массива. Для решение вам просто надо увеличить ‘число’ в создании массива.
Ошибка: error 040: duplicate «case» label (value %d)
Решение: Ошибка появляется, если вы два раза используете case с одним и тем же параметром.
Ошибка: fatal error 100: cannot read from file: «бла-бла»
Решение: Ошибка появляется, если вы подключили инклуд и не добавили в папку pawno/include. Для решения вам просто надо добавить в папку данный инклуд.
Ошибка: warning 203: symbol is never used: «бла-бла»
Решение: Ошибка появляется, если созданная переменная нигде не используется. Для решения вам просто требуются ещё удалить.
Ошибка: warning 209: function «бла-бла» should return a value
Решение: Для решения проблемы в данной функции/команде вам следует добавить в конец return true/return false.
Ошибка: warning 217: loose indentation
Решение: Для решения проблемы выровняйте строки.
Ошибка: warning 235: public function lacks forward declaration (symbol «бла-бла»)
Решение: Ошибка появляется, если вы создали public,а forward нет. Для решения вам просто надо создать forward к public’y.
По мере возможности тема будет дополняться
Punk_Joker 1 / 1 / 1 Регистрация: 24.11.2013 Сообщений: 59 |
||||
1 |
||||
01.05.2015, 02:12. Показов 7650. Ответов 4 Метки нет (Все метки)
Проблема в фунциии prim начиная с ветки case NAME. Пишу в CodeBlocks+MinGW. Кликните здесь для просмотра всего текста
Лог компиляции Кликните здесь для просмотра всего текста
||=== Build: Debug in Hello (compiler: GNU GCC Compiler) ===|
0 |
Tulosba 4773 / 3267 / 497 Регистрация: 19.02.2013 Сообщений: 9,046 |
||||
01.05.2015, 09:27 |
2 |
|||
Нужно добавить фигурные скобки внутрь case’ов:
и т.д.
0 |
0 / 0 / 1 Регистрация: 29.05.2017 Сообщений: 16 |
|
02.06.2017, 18:16 |
3 |
Обьясни в чем дело, к чему эти скобки в кейсах? Я столкнулся с такой же ошибкой.
0 |
DrOffset 17452 / 9279 / 2269 Регистрация: 30.01.2014 Сообщений: 16,244 |
||||
02.06.2017, 18:40 |
4 |
|||
Обьясни в чем дело, к чему эти скобки в кейсах? Объясняю «на пальцах»: switch — работает как goto, и каждая из меток case не вносит своей собственной области видимости, т.е. все, что ты объявляешь внутри switch, будет сквозняком видно в нижестоящих case`ах. Из-за этого, если мы не сделаем сами область видимости посредством {}, то мы вынуждены будем перепрыгивать через инициализацию, получая обращение к невалидному объекту. Поэтому компилятор такое запрещает. Вот это же на примере:
0 |
TheCalligrapher Вездепух 10968 / 5953 / 1628 Регистрация: 18.10.2014 Сообщений: 14,943 |
||||
02.06.2017, 18:46 |
5 |
|||
Обьясни в чем дело, к чему эти скобки в кейсах? Я столкнулся с такой же ошибкой. В языке С++ запрещается «прыгать» в область видимости локальной переменной в обход ее объявления с инициализатором
А делается ли такой «прыжок» через
0 |