เขียนโปรแกรมติดต่อเครื่องชั่งด้วย Delphi

ปล่อยเวลาผ่านไปเนิ่นนานกว่าจะได้กลับมาเขียนเรื่องนี้
การใช้ Delphi รับค่าน้ำหนักจาก Serial port บ้างก็เรียก Comport
ที่กลับมาเขียน  ก็เพื่อเก็บไว้ให้ตัวเองได้กลับมาอ่าน
ในตอนที่ต้องกลับมาแก้ไขโปรแกรมประเภทนี้อีก
เรียกได้ว่า เอาไว้เตือนความจำตัวเอง หรือคู่ทือของตัวเองก็แล้ว

ขั้นตอนต่าง ๆ มีอะไรบ้างเมื่อต้องการเขียนโปรแกรมติดต่อไปยังอุปกรณ์ต่อพ่วง
อย่างเช่น พอร์ตอุนกรม หรือ Serial port 

..เพื่อไม่เป็นการเสียเวลา เรามาเริ่มกันเลย

อันดับแรก ออกแบบหน้าจอ กันก่อน (เรานักวาดฝัน ปั้นจินตการให้กลายเป็นซอฟต์แวร์)
Mock-up design

วาดมือ  คงพอมองเห็นภาพว่าเรากำลังจะรับค่า แล้วให้มันมาแสดงที่ Form
เมื่อค่ามีการเปลี่ยนแปลง
ให้แสดงค่า ที่รับมาได้ บน CompTerminal 
บน Memo 
สุดท้ายให้มันแสดง บน Panel
แสดงทั้งสามจุดไปเลยพร้อม ๆ กัน

แต่ว่า จะเอาข้อมูลจากเครื่องชั่งจริง ๆ ได้ที่ไหน ในเมื่อกำลังออกแบบและเขียนโปรแกรม
ที่ Office หรือ ที่บ้าน
ไม่เป็นปัญหา เราจะจำลองทุกอย่างที่คอมเครื่องนี้ทั้งหมด

โดยโปรแกรมต่าง ๆ ที่ต้องใช้ มีดังต่อไปนี้
1. Virtual Serial Port Driver
2. Com port Data Emulator & Traffic generator
3. Delphi 7
4. Component TComport
5. Text data from Kubota Weighting Control Indicator (อันนี้ไป Capture จากอุปกรณ์จริง ๆ มา
โชคดีที่ทำงานเปิดโอกาสให้เขียนโปรแกรมเพื่อไป Capture Data ที่ส่งมาที่ Serial port)
ดูตัวอย่าง Demo การ Capture

เมื่อจัดเตรียมเครื่องมือต่าง ๆ ครบแล้ว
กลับมาที่ Delphi โดยเลือกใช้ Delphi 7 ตัวเก่ง เจ้าประจำ
เราจะมาวาดหน้าจอโปรแกรม ให้ได้ตาม Mock-up ลองดูภาพประกอบ

Delphi and TComport
วาง Component ต่าง ๆ ตาม Mock-up ที่ได้วาด ๆ ด้วยมือไว้ เสร็จเรียบร้อยแล้ว...(เร็วไปมั้ย)

ต่อไปมาดู Properties แต่ละตัวกันก่อน
เอาที่สำคัญ ๆ นะครับ มี 3 ตัวที่จะเอาไว้แสดงค่าต่าง ๆ ตามที่ได้ออกแบบไว้แต่ต้น

ComTerminal1
ตัวนี้ กำหนด Properties 1 ตัว โดยให้ Comport  มองไปยัง Comport1 ดังภาพ

Delphi ComTerminal1

Comport1 ตั้งค่าต่าง ๆ ดังภาพประกอบ
Double click ที่ต้อง Component Comport1
และกำหนด Parameter ต่าง ๆ ดังภาพ โดยให้กำหนด Port =  COM3*)
ส่วน Parameter ตัวอื่น ๆ ตั้งตามภาพเลย








Comport1 Properties
ตัวสุดท้าย Component ComDataPacket1 กำหนดแค่จุดเดียวตามภาพคือ
กำหนด Comport ให้มองไปยัง Comport1
















ComDataPacket1 Properties
ต่อไปมาตั้งค่า Tool ที่ต้องใช้เพื่อจำลองสถานการณ์ การรับค่าจากเครื่องชั่ง
ตัวแรกโปรแกรม Virtual Serial Port Driver.
โดยให้กดปุ่ม Add pair  (โดยผมตั้งค่า *COM2 สำหรับ Data Emulator, COM3* สำหรับ Delphi)
Create virtual ports










เครื่องมือตัวที่ 2 COM Port Data Emulator...
ตัวนี้เอาไว้ส่งค่าไปยัง Port ได้จำลองไว้ในขั้นตอนที่ผ่านมา ให้ตั้งค่า ต่าง ๆ ตามภาพตัวอย่าง
คือกำหนด Port = 2 และ parameter 9600,7,N,1  None
และที่ Tab Data source (ภาพถัดไป กำหนดค่าต่าง ๆ ดังตัวอย่าง)
ใช้ Port COM2 จาก Virtual Serial Port Tools

COM Port Data Emulator Setting






ขั้นตอนเหมือนจะเยอะ ต่อไปก็ลง Code แล้ว
ซึ่ง Code ไม่กี่บรรทัดก็ได้ค่าของน้ำหนัก
เข้ามาวิ่งให้วุ่นบนหน้าจอโปรแกรมที่เราสร้างขึ้นแล้วครับ

โดย Demo นี้เขียน Code แค่ 3 procedure คือ

    


















procedure ComPort1AfterClose(Sender: TObject);
procedure ComPort1AfterOpen(Sender: TObject);
procedure ComDataPacket1Packet(Sender: TObject; const Str: String);


ตามมาดู Delphi code กันเลย...ด้านล่าง

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CPort, CPortCtl, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    ComTerminal1: TComTerminal;
    ComPort1: TComPort;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Panel2: TPanel;
    Memo1: TMemo;
    Panel3: TPanel;
    ComDataPacket1: TComDataPacket;
    procedure Button1Click(Sender: TObject);
    procedure ComPort1AfterClose(Sender: TObject);
    procedure ComPort1AfterOpen(Sender: TObject);
    procedure ComDataPacket1Packet(Sender: TObject; const Str: String);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  case ComPort1.Connected of
     true: (Sender as TButton).Caption:= '&Open port';
     false: (Sender as TButton).Caption:= '&Close port';
  end;

  ComPort1.Connected := not ComPort1.Connected;
end;

procedure TForm1.ComPort1AfterClose(Sender: TObject);
begin
  Label2.Caption:='Port is close';
end;

procedure TForm1.ComPort1AfterOpen(Sender: TObject);
begin
  Label2.Caption:='Port is open';
end;

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: String);
begin
  Panel3.Caption:= Str;
  Memo1.lines.add(Str);
  if Memo1.Lines.count>150 then
   Memo1.clear;
end;

end.

หลังจากลง Code เสร็จแล้ว
ก็ Start COM Port Data Emulator ครับ
Data Emulator.




















ลองเทส Run โปรแกรม หากไม่ Error ก็ให้กดปุ่ม Open Port โปรแกรมก็จะแสดงข้อมูล
น้ำหนักวิ่งกันให้วุ่นเลยใช่มั้ย บนจอ หากไม่เห็นภาพ เลื่อนลงไปดูภาพเคลื่อนไหว ในภาพสุดท้ายครับ
Delphi TComport Weight














Delphi ติดต่อเครื่องชั่ง Comport















Vehicle Scale Systems (โปรแกรมชั่งน้ำหนักรถยนต์) ตอนที่ 1

Author: Samrid Somboon
Line ID: mesa.d
Email: samrids@gmail.com

Comments