วันพุธที่ 27 มิถุนายน พ.ศ. 2561

การหา Scale ของ Display Window 10

เวลาทำการ Scale หน้า Screen ของ Window 10 เช่น 100,125,150% จะมีปัญหา ในการ map point widnow ไปยัง Screen จะต้องใช้ scale เช่น 125 คือ 1.25 คุณ กับ พิกัด เดิม 
ปัญหา คือ ไม่มี API โดยตรงในการหา Scale ต้องคำนวน

 Graphics g = Graphics.FromHwnd(IntPtr.Zero);
        IntPtr desktop = g.GetHdc();
        int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
        int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
        int logpixelsy = GetDeviceCaps(desktop, (int)DeviceCap.LOGPIXELSY);
        float screenScalingFactor = (float)PhysicalScreenHeight / (float)LogicalScreenHeight;
        float dpiScalingFactor = (float)logpixelsy / (float)96;
VERTRES = 10,
        DESKTOPVERTRES = 117,
        LOGPIXELSY = 90,

วันอังคารที่ 3 เมษายน พ.ศ. 2561

เรื่อง C++ Clr ทั่วไป และ การใช้ Using

การเปลี่ยน type ของ Array

array <double>^from,
pin_ptr<double> pf = &from[0];
จะเท่่ากับ double *pf

เปลี่ยน Char ก็เหมือนกัน


ในการใช้ using ของ C# Uจะทำลาย Deconstruct ของ Class ที่เรียกใช้ เพื่อคืน Memory เช่น
การ Open Close File

StreamReader sr = new StreamReader(...)
using(sr)
{
 ทำการ อ่านค่า
}
เมื่อจบ จะทำลาย Sr ไปโดยอัตโนมัติ สำหรับ Manage

ใน C++ standard

จะเป็น รูปของ Class
Class readR{
   public:
   readR();  // construct
  ~readR();  // deconstruct

}
เวลาเรียกจะ Auto
{
  readR sr ();

} . // ปิดวงเล็บ จะ delete เอง


ใน C++ dotnet หรือ clr จะต้องใช้ try กับ finally

StreamReader ^sr = gcnew StreamReader(..)
try{


}
finally
{
   delete sr;  // อย่าลืม

}

วันเสาร์ที่ 31 มีนาคม พ.ศ. 2561

C++ clr ไม่เห็น Bitmap resource ระหว่าง run

C++ Manage clr ในกรณีที่ Compile เป็น DLL ในบางครั้ง จะดึง Resource ที่ จะแสดง Image มาผิดชื่อ (งงๆอยู่ว่าทำไม) วิธี Fix ให้ระบุชื่อ Resource .resx โดยตรงเลย


Reflection::Assembly^ pxAssembly = Reflection::Assembly::GetExecutingAssembly();
String^ pxResName = pxAssembly->GetName()->Name + ".MyForm"; //Note: add your resourcefile name here, i.e. ".MyResourceFile" a it appears in solution explorer, without it's extension

Resources::ResourceManager^  resources = (gcnew Resources::ResourceManager(pxResName, pxAssembly));
this->button1->BackgroundImage = (cli::safe_cast<Drawing::Bitmap^>(resources->GetObject("PE1")));
เช่น Bitmap อยู่ใน Myform และ Resource ชื่อ Myform.resx ก็ให้ใส่ ชื่อลงไปเลยทดแทนที่ โปรแกรม Gen ให้

กรณีต้องการ จาก File โดยตรง
(cli::safe_cast<System::Drawing::Image^>(System::Drawing::Image::FromFile(L"c:/pestimate/ac-scale.bmp")));

หรือ


Resources::ResourceManager^  resources = (gcnew Resources::ResourceManager(this->GetType()->Assembly->GetName()->Name+ "."+ this->GetType()->Name, this->GetType()->Assembly));

ใช้ ComponentResourceManager
วิธีที่ถูกให้จดว่า เวลา Errror จะบอก ว่า Resource ที่ขาดไปชื่ออะไร แล้วไปแก้ใน
Logical name ของ .resx โดยกดที่ Mouse ขวา Property->Managed Resources->General และ แก้ที่ Logical name
<namespace>.<file>.resources ตามที่ Errorบอก





วันอังคารที่ 27 มีนาคม พ.ศ. 2561

วิธีทำให้ Windows Web service ทำงาน โดยไม่ต้องเป็น Admin

ใช้คำสั่ง netsh ที่ Run cmd โดย Adminstrator
ตัวอย่าง
netsh http add urlacl url=http://127.0.0.1:8080/ user=<ชื่อเครื่อง>\<username>

วันพุธที่ 14 มีนาคม พ.ศ. 2561

ปัญหาของ Boot Loader ของ Mega1280 กับ Mega2650

Mega2650 จะมี speed ในการ interface สูงกว่า Mega1280 2เท่า
ในการจะ Upload firmware จะมีปัญหา ต้อง แก้ Boot loader แต่ต้องใช้ ISPMKII ในการ update(ไม่มีทางอื่น)

เช่น

https://github.com/dcnewman/MightyBoardFirmware-2560-bootloader

การ Update Flash Arduino ด้วย AVR ISP mkII

ในหลายกรณีไม่ต้องใช้ ปรกติ จะบอร์ดใหม่จะมี Interface มาให้เช่น Mega8u2 แต่ถ้าไม่ได้จริงก็ต้องใช้ ใน update โปรแกรม ใน Arduino ควรจะใช้คู่กับ software Avr Studio 5.1 จะมี Arduino ครบหน่อย

ตัวอย่างเป็นของ ETT การต่อ จะใช้ 6 pin หรือ 10 pin  และมี หัวต่อ USB มาให้ต่อเข้า PC
โปรแกรม เวลา upload firmware , Tools->Avr Programming เลือก Tools และ Board ให้ถูก เช็กก่อน โดย Read ถ้าไม่ได้จะบอก

เลือก Firmware ที่ compile แล้ว program


วันอาทิตย์ที่ 4 มีนาคม พ.ศ. 2561

การสร้าง Gcode จาก Autodesk Fusion 360

Autodesk Fusion 360 เป็น โปรแกรม CAD parametric แบบ Free หรือเสียเงินก็ได้ ไม่แพง ปีละประมาณ หมื่น บาท แต่ เก่งมากและให้ CAM gcode ที่ใช้ง่าย หลายยี่ห้อ
วิธีใช้ จะแปลกๆ หน่อย คือ ไม่เก็บ File ใน เครื่องแต่ต้องเก็บบน Cloud (A360) ก็ดีไปเปิดที่ใหนก็ได้ ในมือถือก็ได้. File จะอยู่ สี่เหลี่ยม ทางซ้าย บน
สำหรับ CAM จะอยู่ใน Menu

ใน CAM โหมด สามารถ กำหนด ทิศทางการกัด ได้ทั้ง 2 ทิศ แต่ต้องตั้ง ดอก สว่านก่อน
ให้เลือกการกัด แลย แล้วค่อย เลือก ที่ เพิ่ม ดอกสว่าน กด +

การกัดมีหลายแบบ

 ที่แนะนำ มี 3 mode
1.Adaptive Clearing เป็นแบบ Auto ไม่ต้องคิด ตัดโดย รวม OK แต่มักจะช้า


2.Ramp เป็นการกัดแบบไม่ยกดอก จะกัดโดยลดระดับไปเรื่อยๆ กัดเร็วตัดขอบได้

3.Scallop กัดเป็นผิวงาน แบบนี้ กัดผิวงานอย่างเร็ว มีระยะระหว่างการกัดคงที่

กรณีที่ต้องกลับด้าน ให้แก้ที่ ทางเลือก โดยเลือก Flip Z แต่ต้องสังเกตุว่า ต้อง Flip X ด้วยหรือไม่ เพราะ
ในการกลับด้านบางครั้ง แกน Y จะกลับด้วย ถ้า ต้องการพลิกชิ้นงาน ตามแกน X หรือ Y

ในการออก Code "Preprocessor" สามารถ ออก Gcode ได้ 
Grb เป็นแบบ ที่ Basic ใช้ได้ เกือบทุก CNC

ถ้าต้องการการกลับ Gcode ด้าน ให้ใช้ Haas  A axis และ เลือกให้กลับทิศ Rotate A axis


ข้อดีคือ แกน Center จะอยู่ที่เดียวกัน เสมอ ให้ เจาะ Mark Center ใว้ก่อน จะดีเวลา กลับด้านจะง่าย
สำหรับ Gcode ที่เกิน ก็ไปลบเหลือเท่าที่จำเป็น (G90 G21..)
เวลาตั้งระดับก็ใช้ G92 Zxx ปรับระดับจาก ผิวงานเอา