วันเสาร์ที่ 11 กุมภาพันธ์ พ.ศ. 2555

RS-232 : History ประวัติของ RS232 : from wiki

วันอังคารที่ 7 กุมภาพันธ์ พ.ศ. 2555

MS Access VBA connect to UWE GW-3000 Weight balance : เครื่องชั่งที่ได้สัมผัสอีกตัวโดยบังเอิญ

เข้าเรื่องตรงๆ ไปเลย เครื่องชั่ง UWE GW-3000 ตัวนี้ผมไม่มีคู่มือ ขอยืมรูปจากเว็บอื่นมาโชว์ล่ะกัน หน้าตาคล้ายๆ ข้างล่างนี้แหละ



 เหมือนเดิมก็คือเริ่มด้วยเบสิค ใช้ Hyperterminal เพื่อหาค่าที่จะใช้ในการเชื่อมต่อที่ตรงกับตัวตาชั่ง แล้วได้ค่าออกมาแล้วคนอ่านรู้เรื่อง ได้ค่ามาใส่ดังรูป แล้วก็มา Test หาค่า RThreshold อีกครั้งใน MS Access

คราวนี้ตั้งตัวแปร Buffer ขึ้นมารับเพิ่มเติม เพื่อให้ได้เห็นค่าก่อนและหลังแยกข้อมูลออกมาใช้งานต่อไป
ดังรูปข้างล่างเ่ช่นกัน
สั้นๆ แค่นี้แหละ หวังว่าคงเป็นประโยชน์ไม่มากก็น้อย สงสัยก็ถามกันมาได้ครับ

วันอังคารที่ 17 มกราคม พ.ศ. 2555

Weight Balance : A&D AD-4328 Data Format : เอามาให้ดูเล่น


เอามาให้ดูเล่นๆ ลองนับดูถ้าต้องเขียนรับข้อมูลต้องตรวจสอบอะไรบ้าง FORMAT เลือกได้อีกว่าจะให้ส่งออกมาอย่างไร เห็นมีถามกันในเว็บบอร์ดไหนผมก็จำไม่ได้เหมือนกันนิ

MS Access VBA RE-ZERO Weight Scale : เซ็ทศูนย์ตาชั่งจากโปรแกรม

ทำการปรับปรุงฟอร์มก่อนเดินหน้าต่อสักนิด หน้าตาก็จะใกล้เคียงกับฟอร์มของ Visual Basic


 ต่อไปจะเพิ่มปุ่มแล้วใส่คำสั่งสำหรับ RE-ZERO ตาชั่งจากในโปรแกรม โดยไม่ต้องไปกดที่ตาชั่งโดยตรง


จากนั้นไปอ่านคู่มือ ว่าต้องใช้คำสั่งอะไรส่งไปให้เครื่องชั่งเพื่อทำการ RE-ZERO


เข้าไปเขียนโค้ดใน VBA

ลองดูซิว่าทำงานได้หรือยังโดย Run form ทดลอง Click ปุ่ม RE-ZERO ทดลองชั่งโดยวางของลงบนตาชั่ง กดปุ่ม RE-ZERO ในขณะของยังวางอยู่ เอาของออก กด RE-ZERO อีกครั้ง จะเห็นว่า ตัวเลขจะกลับไปเป็นศูนย์ทุกครั้งที่เรากดปุ่ม RE-ZERO เท่านี้ก็เรียบร้อยสำหรับการทำ RE-ZERO จากโปรแกรม ใครที่ติดตามบทความของผมลองทำ Auto RE-ZERO มาโชว์กันบ้างนะครับ

วันศุกร์ที่ 13 มกราคม พ.ศ. 2555

MS Access VBA Function ฺ: ตัดแต่งค่าที่ได้จากเครื่องชั่ง

ผมจะไม่ตั้งตัวแปรขึ้นมาเพิ่มเติม เพราะจะใช้ Text Box ชื่อ txtW แทนตัวแปร ไหนๆ ก็เสียหัว (Overhead) ให้กับ Text Box ไปแล้วในฟอร์ม ก็ไม่ยอมเสียหัวให้กับตัวแปรเพิ่มอีกใน VBA (ผมก็ว่าไปตามภาษาของโผ้ม)  จำได้กันไหมว่า Data Format จากเครื่องชั่งมีรูปแบบอย่างไร



ต้นฉบับภาษาอังกฤษที่ผมพออ่านได้ มีดังนี้
Left$(string, length)
Returns a substring containing a specified number of characters from the beginning (left side) of a string.
The Left$ function syntax has these parts:
string Required. String expression from which the leftmost characters are returned.
length Required; Long. Numeric expression indicating how many characters to return. If 0, a zero-length string ("") is returned. If greater than or equal to the number of characters in string, the entire string is returned.


Mid$(string, start[, length])
Returns a substring containing a specified number of characters from a string.
The Mid$ function syntax has these parts:
string Required. String expression from which characters are returned.
start Required; Long. Character position in string at which the part to be taken begins. If start is greater than the number of characters in string, Mid returns a zero-length string ("").
length Optional; Long. Number of characters to return. If omitted or if there are fewer than length characters in the text (including the character at start), all characters from the start position to the end of the string are returned.
CR/LF means Carriage Return/Linefeed. ตอนนี้เราไม่สนใจตัวนี้ ถ้าใครเรียนพิมพ์ดีดมาก็จะค้นเคยดีว่าคืออะไร เอาเป็นว่าเหมือนกด Enter ประมาณนั้น เป็นอันเข้าใจว่าจบการส่งข้อมูลหนึ่งชุดที่เครื่องชั่งส่งมาให้ก็แล้วกัน
สมมุติใน txtW ค่าคือ  ST,+00012.40  g

Header = Left$(Me.txtW.Value, 2) = "ST"
Separator = Mid$(Me.txtW.value, 3, 1) = ","
Data = Mid$( Me.txtW.Value , 4, 9) = "+00012.40"
Unit = Mid$( Me.txtW.Value , 13, 3) = "  g"

Val(Data) = 12.4 อันนี้เอาไปบันทึกลงฐานข้อมูลได้เลย อ่านคำเตือนก่อนเน้อ

คำเตือน สำหรับ Val() Function :


Many programmers use VB's Val() function to convert user inputted
strings into numbers. This useful function returns zero (0) for
strings that are meaningless as numeric input. Unfortunately, Val()
has a bug in its routines. Notably, Val("6%") returns 6, Val("6.%")
returns 6, Val("6.0%") returns 6, but Val("6.1%") generates a
Type Mismatch error! Hence, for a solid program, no cautious VB
programmer can use Val() as-is for generic inputs.

To avoid this error, try a routine that replaces the offending
percentage sign with some other character, as in this:

TheString = "15.7%"
Mid(TheString, Instr(TheString, "%"),1) = "$"
Debug.Print Val(TheString)


ใครที่เอาไปประยุกต์ใช้ได้ผลอย่างไร มาแบ่งปันประสบการณ์กันบ้างนะครับ วันนี้พอก่อนล่ะ

MS Access จะวาดลวดลายแทน VB ด้วย VBA : เขียน code รับข้อมูลจากตาชั่ง

่ก่อนอื่นต้องลงตัวนี้ก่อน XMCommCRC ActiveX ใ้ห้เรียบร้อยก่อนนะครับ ต่อจากนั้นเปิด Access สร้างฟอร์มขึ้นมา ใช้คำสั่ง Insert > ActiveX Control ให้เลือกตามผมแล้วตอบ OK



คลิกที่ตัว Control, คลิกที่ผมวงกลมไว้ จะได้หน้าต่าง Properties, คลิก Tab = All คุณสมบัติของ Control แสดงขึ้นมาดังรูปข้างล่าง


เจาะประเด็น XMCommCRC ActiveX ดูรูปด้านล่าง









Name = XMCommCRC1 เอาไปใช้อ้างอิงในการเขียนโค้ดของเรา





CommPort = 1 ขึ้นอยู่กับพอร์ตที่ใช้ต่อกับเครื่องชั่ง ในที่นี้ผมต่อเข้าพอร์ต 1 ก็กำหนดเป็น 1





RThreshold = 17 คุ้นๆ นะ มาได้ยังไงเนี่ย ย้อนไปดูบทความที่ผ่านมานะครับ
RTSEnable = Yes ใช้คู่กันตัวข้างบน
Settings = 2400, E, 7, 1 ตั้งค่าพอร์ตให้ตรงกับเครื่องชั่ง






สร้าง Text Box ขึ้นมาอีก 1 อัน เอาไว้สำหรับแสดงค่าน้ำหนักที่รับมาจากตาชั่ง ผมตั้งชื่อ txtW
ต่อไปก็จะเข้าไปเขียน Code ใน VBA


ทดลอง Run Form ที่สร้างไว้ เพื่อทดลองดูซิว่าด้วยโค้ดสั้นๆ ง่ายๆ แบบนี้ผลจะเป็นอย่างไร


ทดลองชั่ง แม่จ้าวเว้ย อะไรมันจะง่ายปานนั้น ถ้าไม่มีอะไรผิดพลาด ก็น่าใจมีอะไรให้เห็นบ้างที่ Text Box
แต่จะเห็นเป็นอย่างไรก็ขึ้นอยู่กับการตั้งค่าในโหมด PRT ล่ะครับ

คราวหน้าผมจะลองตัดแต่งค่าที่ตาชั่งส่งมาเพื่อนำไปใช้ประโยชน์ เก็บลงในฐานข้อมูล นำข้อมูลไปเขียนกราฟ หรือทำ SPC แบบบ้านๆ กันซะเลย, การสั่ง RE-ZERO จากโปรแกรม, แนวคิดการทำ Auto - ZERO เช่นเดียวกับเครื่องชั่งราคาแพง

วันพฤหัสบดีที่ 12 มกราคม พ.ศ. 2555

Weight Balance : อ่านคู่มือกันก่อนดีกว่ามั๊ย : A&D EK-i Balance series Scale

A&D EK-i Series Manual

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


เปิดคู่มือไปดูที่หน้า 20 Function list จุดสนใจแรกคือ Prt : Data output mode

มีอยู่ 5 Modes ด้วยกัน ค่าเริ่มต้นจากโรงงานคือ 1 - Command and PRINT key เราสามารถส่งคำสั่งจากเครื่องคอมพิวเตอร์มาสั่งเครื่องชั่งได้ ตัวอย่างเช่น การเซ็ต 0, การขอรับค่าจากเครื่องชั่ง, เป็นต้น และเครื่องชั่งจะส่งค่าออกไปภายนอก เมื่อเรากดปุ่ม PRINT ที่เครื่องชั่ง เรียกว่า ส่งค่าออกแบบ Manual ว่างั้นเถอะ 
  • Prt 0 : รับคำสั่งได้และส่งค่าออกมาต่อเนื่อง ประมาณ 10 ครั้งต่อวินาที
  • Prt 1 : รับคำสั่งได้และส่งค่าออกมาเมื่อกดปุ่ม PRINT
  • Prt 2 : รับคำสั่งได้และส่งค่าออกมาโดยอัตโนมัติเฉพาะค่าบวก เมื่อเครื่องชั่งอยู่ในสถานะ Stable
  • Prt 3 : รับคำสั่งได้และส่งค่าออกมาโดยอัตโนมัติทั้งค่าบวกและลบ เมื่อเครื่องชั่งอยู่ในสถานะ Stable
  • Prt 4 : รับคำสั่งและส่งค่าตามคำสั่งเท่านั้น
ที่ผมใช้บ่อยๆ คือ Prt 2 แล้วก็ Prt 0 ส่วนวิธี Set ดูในคู่มือเพิ่มเติมกันเองนะครับ แต่ละยี่ห้อคงไม่ต่างกันมาก น่าจะแนวๆ เดียวกัน

จุดที่สองคือ bPS : Baud rate ค่าเริ่มต้นจากโรงงานคือ 2400 bps ผมไม่เปลี่ยนค่าใดๆ ที่ตรงนี้ทั้งสิ้น แล้วก็อธิบายไม่ถูกว่ามันคืออะไร

ดูคู่มือหน้าต่อไป

จุดต่อไปคือ btPr : Data and parity ค่าเริ่มต้นของโรงงานคือ 0 = 7 bits, even parity ใช้ค่าเดิมๆ


จุดสนใจอีกจุดที่ต้องดูคือ Stop bit: 1 bit


และต่อด้วยสุดท้าย รูปแบบข้อมูลที่ส่งออกมาจากตาชั่ง ใครที่ติดตามตอน HyperTerminal ก็เริ่มจะร้องอ๋อ !! แล้วใช่ไหมครับ คุ้นๆ นะ ลองนับดูสิครับว่า ข้อมูล 1 ชุดมีกี่อักษระ เราจะใช้ส่วนนี้อีกครั้งตอนเขียนโปรแกรมรับค่าใน VBA. ของ MS Access และแยกเอาข้อมูลต้องการไปใช้

คราวนี้ใครที่ครั้งก่อนหน้านี้ ตอนทดสอบด้วย HyperTerminal ค่าไม่เหมือนกับ Data Format ลองกลับไปตั้งค่า ให้ถูกต้องก่อนนะครับ แล้วน่าจะประสบความสำเร็จในขั้นตอนนี้กันทุกคน หากใครมีข้อสงสัยหรือ Comment ก็ post ไว้นะครับ

สรุปค่าต่างที่ใช้ตั้งค่าพอร์ตคือ

Baud rate : 2400 bps
Data and parity : 7 bits, even parity (E)
Stop bits : 1 bits

Data Format : จำนวนอักษระ 17 ตัวอักษร

คราวหน้าจะเข้าสู่ Access and VBA และ ActiveX ที่เราจะใช้ใน Project นี้กัน

วันพุธที่ 11 มกราคม พ.ศ. 2555

RS232 Communication Test by Hyperterminal : ตรวจสอบการสื่อสารด้วย Hyperterminal

ก่อนจะเขียนโปรแกรมรับค่าด้วย Microsoft Access ผมจะลองใช้โปรแกรมที่มาพร้อมกับ Windows เพื่อตรวจสอบว่ามีข้อมูลส่งมาจากตาชั่งเข้ามายังเครื่องคอมพิวเตอร์ของเราหรือไม่ โดยต่อสายต่างๆ ให้เรียบร้อย เช่น RS232, พาวเวอร์ตาชั่ง, เปิดตาชั่งให้เรียบร้อย เข้าไปที่ Start > Programs > Accessories > Communication > HyperTerminal
HyperTerminal ก็จะเปิดขึ้นมา หน้าแรกก็เป็นดังรูปข้างล่าง


ใส่ชื่อในช่อง Name: พอเป็นพิธี


เลือกพอร์ตที่เราเชื่อมต่อด้วย ในที่นี้ผมมีพอร์ตเดียวคือ COM1


ตรงนี้จะถูกถามจะตั้งค่าเป็นอย่างไรบ้าง ไม่สนใจ OK ทันที


ก็จะได้หน้าจอว่าง ๆ ดังรูปข้างล่าง


ทดลองเอาอะไรวางที่ตาชั่ง รอดูซิว่ามีอะไรโผล่มาในจอบ้าง ถ้าออกมาอย่างนี้เลยก็สบายล่ะ


ที่ด้านล่างหน้าจอของโปรแกรม HyperTerminal สังเกตุช่องที่สาม 2400 7-E-1 จดใส่กระดาษเอาไว้เลย เราจะเอา Code นี้ไปใช้ในภายหลัง

แต่ถ้าไม่ปรากฎ อะไรขึ้นมาเลย อย่าเพิ่งตกใจ อย่าเพิ่งจดอะไรใส่กระดาษไว้ เราอาจตั้งคุณสมบัติของพอร์ตยังไม่ถูกต้อง หรือยังตั้ง Option ที่ตัวเครื่องชั่งไม่เหมาะสมก็ได้ เสียเวลานิดหน่อย ลงทุนอ่านคู่มือเครื่องชั่งที่เราเอามาใช้งานกันก่อนดีมั๊ย จะได้แก้ไขปัญหาไปทีละประเด็น

MS Access VBA เขียนโปรแกรมติดต่อกับเครื่องชั่งผ่านพอร์ตสื่อสาร RS232 serial port : บทนำ


        เรื่องที่จะถ่ายทอดประสบการณ์ในครั้งนี้ เป็นการเขียนโปรแกรมเพื่อติดต่อกับเครื่องชั่งน้ำหนักทางพอร์ตสื่อสาร RS232 โดยผมผู้ถ่ายทอดคือ User ที่มิได้ร่ำเรียนคอมพิวเตอร์มาโดยตรง อาศัยคุณลุงกู (เกิล) แล้วก็เว็บไซต์ทั้งในและนอกประเทศที่เสนอความรู้ เอาไว้ให้ได้ศึกษา (เอาไว้วันหลังผมจะนำลิงค์เพิ่มเติมให้) ดังนั้นจึงเป็นการถ่ายทอดประสบการณ์จาก User สู่ User โดยผมใช้ Microsoft Access ซึ่งมีอยู่แล้ว (ย้ำว่ามีอยู่แล้ว ไม่ต้องซื้อเพิ่ม) ในชุดไมโครซอฟออฟฟิต เชื่อว่ามีอยู่ทุกเครื่องในสำนักงานของท่าน ถูกลิขสิทธิ์ ถูกกฎหมาย 100% เพียงแค่หาอะไรมาเพิ่มเติมอีกเล็กน้อย ไม่ต้องพึ่ง MSComm Control ที่มากับ Visual Basic 6 เวอร์ชั่น Professional และ Enterprise ใช้ของฟรี อย่างเช่นที่ผมใช้คือ XMCommCRC สามารถดาวน์โหลดมาใช้ได้ฟรี และถ้าไม่ต้องการให้มี Pop up window ให้มากวนใจก็จ่ายค่าสินสอด ในราคาไม่แพงเพียง 10US ก็จะได้น้องนางมาครองดังใจ ดูเนียนๆ เป็นมืออาชีพเข้าไปอีก แต่อย่างไรซะประสบการณ์ตรงนี้ คงไม่เหมาะกับมือ Office ใหม่ๆ อย่างแน่นอน ก่อนอื่น ผมขอพาชมอุปกรณ์ที่ผมใช้ในโปรเจคนี้กันก่อน

  • ตาชั่ง AND EK-3000i ดูราคาในเว็บประมาณ 14,000 บาท เครื่องยี่ห้ออื่นๆ ก็ใช้ได้ขอให้สามารถสื่อสารกันทาง RS232 ได้
  • สายต่อ RS232 ต่อระหว่างเครื่องคอมพ์กับตาชั่ง
  • XMCommCRC ดาวน์โหลดมาเตรียมไว้
  • MS Access + VBA Knowledge พอได้ค่าน้ำหนักจากเครื่องชั่งมา ใครจะเอาไปต้มยำทำแกงอะไรต่อใน Access ก็สะดวกโยธิน
  • Computer ที่มี Serial Port ถ้าใครใช้ Note book แล้วไม่มีพอร์ตก็คงต้องพึ่ง USB to Serial Converter ช่วยก็ใช้ได้ (ผมก็ใช้อย่างหลังนี่แหละ เดี่ยวนี้ไม่ค่อยมีใครใช้เครื่องตั้งโต๊ะกันแล้วนี่)

ดาวน์โหลด  XMCommCRC  ตามลิงค์ ติดตั้งให้เรียบร้อย ใจเย็นๆ ก่อนนะครับ เดี๋ยวตอนหน้า ผมจะมาต่อโดยเริ่มกันตั้งแต่พื้นฐาน คือการตรวจสอบด้วย Hyper terminal ของวินโดว์ว่ามีสัญญาณมาจากเครื่องชั่งแล้วหรือยัง ต่อด้วยการศึกษาคู่มือเครื่องชั่ง ซึ่งจะนำไปสู่การตั้งค่าพอร์ตที่ถูกต้อง สุดท้ายเราก็จะเขียนโปรแกรมรับค่าได้อย่างง่ายดาย ไม่สับสน อาการประมาณว่า "จับต้นชนปลายไม่ถูก" จะไม่เกิดขึ้น ถ้าใจเย็นๆ ผมรับประกันว่า จบบทความนี้คุณทำแบบผมได้อย่างแน่นอน ตาม Concept : Low Cost Programming