Всі ми, хто відданий, як і я, боротьбі з програмами для магазинів, супермаркетів тощо. нам коли-небудь доводилося повідомляти наші програми на вазі, щоб отримати вагу. Знання комунікаційного протоколу балансу не надто складне, тому я не буду пояснювати, як це зробити. Навпаки, наступна програма є симулятором шкали, тобто вона витісняє шкалу під час спілкування, що дозволяє нам налагоджувати наші програми продажів, не маючи жодної шкали, підключеної до нашого ПК.

Для цього симулятора я обрав протокол $ (його можна назвати іншими іменами), який простіший за механізм соски. Щоб отримати вагу, ПК повинен лише відправити символ $ через послідовний порт, і шкала повертає вагу читабельними символами.

Цей протокол може дещо відрізнятися в залежності від масштабу однієї марки, наприклад, ви можете використовувати кому, замість крапки, для відокремлення десяткових знаків, або ви можете змінювати кількість цифр. Деталі, які ми також повинні враховувати при розробці програмного забезпечення для конкретної масштабної моделі.

При запуску програми ми знаходимо таке вікно:

seoane

Після того, як ми вибрали послідовний порт, нам просто потрібно натиснути кнопку «Пуск». Для вибору ваги використовується повзунок під дисплеєм, таким чином, коли програма продажу запрошує вагу, буде надіслано значення, яке на той момент відображається на дисплеї.

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

Щоб створити цю "пару" додаткових портів, я рекомендую це програмне забезпечення, воно творить чудеса, його легко налаштувати, а також безкоштовно та з відкритим кодом, ви не можете просити більше.
http://com0com.sourceforge.net/

Коли робота програми стане трохи зрозумілішою, ми трохи пояснимо код.

Основною частиною є блок "uLink":

Це блок, який я розробив деякий час тому для іншого проекту, і який в основному дозволяє надсилати та отримувати команди через послідовний порт паралельно з основним потоком програми, таким чином, він не заморожується в очікуванні даних. Він має два режими роботи, звичайний і «RAW». У звичайному режимі дані надходять у рядки тексту, що закінчуються символом-роздільником, у цьому випадку CR (повернення каретки), і дані не обробляються, поки не буде отримано повний рядок. З іншого боку, у режимі RAW, який ми використовуємо в цій програмі, дані обробляються в міру надходження на послідовний порт.

У цьому блоці ми знаходимо клас TThreadEnlace, який відповідає за обробку послідовного порту. Цей клас має подію під назвою "OnCommand", яка виконується кожного разу, коли дані отримуються через послідовний порт, тому він практично виконує всю роботу, нам просто потрібно додати трохи коду до цієї події, щоб створити нашу програму:

Решта коду просто служить для створення та знищення класу TThreadEnlace та отримання параметрів конфігурації.

Програму та вихідний код можна завантажити тут