Home ICONICS (SCADA)
SCADA for fun : สคริปต์ส่งเมล์ง่ายๆ PDF Print E-mail
Wednesday, 01 August 2012 19:16


GENESIS32 scada สามารถส่งเมล์ได้อยู่แล้ว เช่นใน TrendWorX32 สามารถส่งรายงานทางอีเมล์ให้ผู้รับเป็นต้น แต่ในวันนี้มีสคริปต์ส่งเมล์ที่สามารถนำไปประยุกต์ใช้ได้ตามความต้องการง่าย ๆ

ความต้องการ

1. ต้องมี .NetFrameWorX ติดตั้งไว้

2. ต้องมี PoweShell ของวินโดวส์ติดตั้งไว้ สำหรับ Windows XP/2003 ดาวน์โหลดที่นี่ | สำหรับ Windows Vista | สำหรับ Windows 7 จะมีการติดตั้งไว้อยู่แล้ว

3. กรณีใช้SMTPของGmailจะต้องเปิดการใช้งานอ็อปชั่น "แอพที่มีความปลอดภัยน้อย" เพื่ออนุญาตให้โค้ดเรียกใช้SMTPของGmailได้ โดยให้ล็อกอินGmailเสียก่อนแล้วไปที่ลิงค์นี้

หลักการ

เราจะใช้ให้ GENESIS32 เรียกใช้ PowerShell ของวินโดวส์เพื่อทำการส่งเมล์โดยเราสามารถระบุข้อมูลที่จะส่งได้ การใช้ PowerSell เราจะเรียกผ่านไฟล์ PowerShell ที่มีนามสกุล ps1 ดังนัั้นเราจะใช้ scada เขียนไฟล์นี้ขึ้นมาก่อน ดังนั้นก่อนอื่นให้เตรียมโฟลเดอร์สำหรับเก็บไฟล์นี้ไว้ก่อนเช่นสร้าง Folder ชื่อ testmail ไว้ใน C:\

 

ขั้นตอน

จากนั้นเปิดโปรแกรม GraphWorX32 ขึ้นมาแล้วเอา PocessPoint ไปวาง โดยลิงค์ ProcessPoint กับ OPC tag หรือ Data Source อื่นเช่น Data Mining ที่ติดต่อข้อมูลจาก Database ก็ได้

image

 

ถัดจากนั้นเอาปุ่มสำหรับส่งเมล์มาวางแล้วใส่ Dynamic Pick เลือกเป็น Run Script โดยคลิ้ก Create… แล้วตั้งชื่อ Script เช่น Test

image

 

จะพบหน้าโค้ด VBA

 

ให้ก้อปปี้โค้ดจากลิงค์นี้ ไปใส่ในโค้ดของเราตามรูป

-----------------------------

 

image

--------------------------------

 

แล้วเปลี่ยน

 This e-mail address is being protected from spambots, you need JavaScript enabled to view it
  เป็นชื่อ gmailของเรา

 

โดยใช้กรอกส่วนข้อมูลที่สำคัญในโค้ด ชื่ออีเมล์ (ในตัวอย่างนี้Gmail นะครับ ส่วนของเมล์อื่นท่านต้องใช้ SMTP ของเมล์เซิร์ฟเวอร์นั้น)

 

 This e-mail address is being protected from spambots, you need JavaScript enabled to view it
  เป็นอีเมล์ผู้รับ
subject เป็นหัวเรื่อง และ 
****Message**** เป็นข้อความ โดยให้ระบุ username และ password เป็น user และ password ของ gmail ของเรา

 

Username และ Password ที่เราใช้จริงให้กรอกในโค้ดแทนคำว่า username และ password เช่น This e-mail address is being protected from spambots, you need JavaScript enabled to view it เป็นusername, 12345 เป็น passwordเป็นต้น

 Print #1, "$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("" This e-mail address is being protected from spambots, you need JavaScript enabled to view it "", ""123456"")"

 

ในการทดสอบขอให้ล็อกอินเข้าวินโดวส์ด้วย USer ระดับ Admin ด้วยนะครับเพราะโค้ดนี้ใช้ความสามารถของ PowerShell หลังทดสอบสามารถใช้ User ธรรมดาอื่น ๆ ได้ครับ

เข้าโหมด Runtime แล้วคลิ้กปุ่มเพื่อส่งเมล์ดูก่อน (ปุ่มนี้สามารถเปลี่ยน Caption หน้าปุ่มได้)

จะพบหน้า Popup ของ Command Prompt ปรากฏขึ้นมาสองหน้าต่าง ให้พิมพ์ Y ในหน้าต่างที่มีตัวหนังสือที่มี Y[YES] และ N[No] ถามเราแล้ว Enter

เมื่อเข้าไปดูในอีเมล์ผู้รับจะมีข้อความส่งมาดังรูป

image

 

ให้กลับเข้าโหมด Configure แล้วไปเอาเครื่องหมาย Remark คือ ‘ พิมพ์(ย้ำว่าให้พิมพ์ไม่ใช้ Copy จากเว็บนี้ครับ)ไว้ข้างหน้าโค้ดดังรูป

 

image

 

ที่ทำเช่นนี้เพราะหลังจากทดสอบเราไม่ต้องการเปลี่ยน Policy ในการใช้ PowerShell อีกแล้ว จะได้ไม่มีหน้าต่างให้เราตอบ Y ในครั้งต่อ ๆ ไปอีกนั่นเอง

หรือจะใช้โค้ดแบบด้านล่างนี้แทนก็ได้โค้ดด้านบนก็ได้

 

 

retval = Shell("powershell Set-ExecutionPolicy unrestricted", vbMinimizedNoFocus)
retval = Shell("powershell ""C:\testmail\MyTest.ps1""", 1)

 

จากนั้นเข้าโหมด Runtime แล้วคลิ้กส่งเมล์ทดสอบอีกครั้ง จะปรากฏ Popup ของ Command Prompt ขึ้นมาแต่จะไม่ถามอะไรเราอีกเมื่อส่งเมล์เสร็จ Popup จะปิดไปเอง

 

 

ประยุกต์ส่งข้อมูล OPC tag

ถ้าเราต้องการส่งข้อมูลเช่นค่า OPC tag ให้เอาโค้ดของเราปแทนบรรทัด

 

Print #1, "$Body = ""****Message****"""
ให้เป็น
 Print #1, "$Body = """ & ThisDisplay.GetPointObjectFromName("ICONICS.Simulator.1\SimulatePLC.Random").Value & """" 

 

หรือ

 Print #1, "$Body = ""OPC Tag vaule = " & ThisDisplay.GetPointObjectFromName("ICONICS.Simulator.1\SimulatePLC.Random").Value & """" 

 

เมื่อส่งเมล์จะได้ผลลัพธ์เป็น

image

 

โอเย้ !

ก้าวต่อไป ลองดาวน์โหลดตัวอย่างไฟล์ส่งเมล์ตามช่วงเวลาด้านล่างไปทดสอบ 

>>ดาวน์โหลด ตัวอย่างไฟล์ส่งเมล์ตามระยะเวลา (เปิดด้วยGraphWorX32 V9.1xขึ้นไป) 

นอกจากนี้เรายังสามารถประยุกต์ส่งเมล์เมื่อเกิดAlarmเกิดขึ้นได้โดยใช้เงือนไขAlarmตามที่ต้องการ เมื่อเงื่อนไขเป็นจริงค่อยสั่งให้สคริปต์ทำงาน 

Last Updated ( Thursday, 22 October 2015 11:04 )
 

สิ่งที่น่าสนใจ

Bargraph Indicators
Digital Indicators
Field Indicators