Всички ние, които сме посветени, като мен, да се борим с програми за магазини, супермаркети и т.н. някога ни се е налагало да комуникираме програмите си с везна, за да получим теглото. Не е твърде сложно познаването на комуникационния протокол на баланса, така че няма да обяснявам как да го направя. Напротив, следващото приложение е симулатор на мащаб, тоест замества скалата по време на комуникация, като по този начин ни позволява да отстраняваме грешките на нашите програми за продажби, без да е необходимо да имаме скала, свързана с нашия компютър.

За този симулатор избрах протокола $ (той може да получава други имена), който е по-прост от механизма на залъгалката. За да получи теглото, компютърът трябва само да изпрати символа $ през серийния порт и кантарът връща теглото с четливи символи.

Този протокол може да варира леко от една марка до друга, например можете да използвате запетая вместо точка, за да отделите десетичните знаци или да променяте броя на цифрите. Подробности, които също трябва да вземем предвид, когато проектираме софтуер за конкретен мащабен модел.

При изпълнение на програмата намираме прозорец като този:

баланс

След като сме избрали серийния порт, трябва само да щракнем върху бутона за стартиране. За да изберете тежестта, се използва плъзгачът под дисплея, по този начин, когато програмата за продажби поиска теглото, ще бъде изпратена стойността, която е на дисплея в този момент.

На този етап можем да мислим, че програмата не е много полезна или поне малко объркваща, тъй като ако симулаторът използва сериен порт, програмата за продажби ще трябва да използва различен и да комуникира между двете ще трябва физически да се присъедини към тях посредством сериен кабел, което ще бъде много тромаво. Но отново "виртуализацията" решава този проблем отново, трябва само да създадем двойка виртуални серийни портове, свързани помежду си, свързващи програмата за продажби и симулатора и в двата порта.

За да създадете тази „двойка“ допълнителни портове, препоръчвам този софтуер, той върши чудеса, лесно се конфигурира и освен това е безплатен и с отворен код, не бихте могли да поискате повече.
http://com0com.sourceforge.net/

След като работата на програмата стане малко по-ясна, ще обясним малко кода.

Основното парче е единицата "uLink":

Това е единица, която разработих преди време за друг проект и която позволява основно изпращане и получаване на команди през серийния порт успоредно с основната нишка на приложението, като по този начин не замръзва в очакване на данни. Той има два режима на работа, нормален и "RAW". В нормален режим данните се получават в текстови редове, завършени с разделител, в този случай CR (Carriage return) и данните не се обработват, докато не се получи пълен ред. От друга страна, в RAW режим, този, който използваме в това приложение, данните се обработват, когато достигнат серийния порт.

В тази единица намираме класа TThreadEnlace, който отговаря за обработката на серийния порт. Този клас има събитие, наречено "OnCommand", което се изпълнява всеки път, когато данните се получават през серийния порт, така че той практически свършва цялата работа, просто трябва да добавим малко код към това събитие, за да създадем нашата програма:

Останалата част от кода просто служи за създаване и унищожаване на класа TThreadEnlace и за получаване на конфигурационните параметри.

Програмата и изходният код можете да изтеглите от тук