發表文章

目前顯示的是有「Visual C# 2010」標籤的文章

USB NetPower 8800 SDK 從 C++ 轉成 C# - Part 3

因為改 C++ 成 C#,最後再加把勁把程式改完整一點, 改完後的程式會在 Windows 登出或關機時自動將 USB NetPower的插座斷電,如果在把程式加入啟動中,Windows 開機時會自動將 USB NetPower 供電,關機或登出時,自動斷電。 完整 Source Code: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Configuration; using System.IO.Ports; namespace WindowsFormsApplication1 {     public partial class Form1 : Form     {         public const int FILE_ATTRIBUTE_NORMAL = 0x00000080;         public const uint GENERIC_READ = 0x80000000;         public const uint GENERIC_WRITE = 0x40000000;         public const int OPEN_EXISTING = 3;         // public const UInt32 INVALID_HANDLE_VALUE = 0xffffffff;         private const uint FILE_FLAG_OVERLAPPED = 0x400...

USB NetPower 8800 SDK 從 C++ 轉成 C# - Part 2

圖片
今天繼續 USB NetPower 8800 SDK 從 C++ 轉成 C# - Part 1 未完成的工作,先用 Google尋找一下有關PL2303的資料,結果找到了這一家 萬平科技網 ,這家公司主要是提供 USB to(轉) Serial(UART/TTL/RS232/RS485)的應用開發工具,這家的網路上有提供 PL2303 HXD原廠的4 * GPIO sample code及使用手冊 ,下載 sample code 並執行 PL2303 4 GPIO Test.exe,畫面如下: PL-2303 4 GPIO Test 很順利開啟連接埠,接著試用 GP0 及 GP1 等功能,發現 Net Power 只有用到 GP1,當 GP1 的值設成是 1 時插座供電,設成0時插座斷電: 測試 GP0 及 GP1 測到這我已經大概了解 C++ 對這 NetPower 所作的動作,現在就要來把 C++ 改成 C# ,這裡我是用 CreateFile 的 方式,由於 C# 已經不像 C++ 有提供 CreateFile 所以要用 Dllimport : [DllImport("kernel32.dll")]         private static extern IntPtr CreateFile(         string lpFileName,         uint dwDesiredAccess,         int dwShareMode,         IntPtr lpSecurityAttributes,         int dwCreationDisposition,         uint dwFlagsAndAttributes,         IntPtr hTemplateFile          ); ...

Visual C# 2010 開發 Modbus CRC 演算

圖片
   在 MODBUS 的 RTU 通信協議下,每個傳輸的指令後都要加 2 個 Bytes 的 CRC,CRC的說明如後: CRC Checksum 算法   CRC 的 C# SOURCE ,這一段是我在網路上找到的,我把原始碼上加了說明:  private void GetCRC(byte[] message, ref byte[] CRC) // message : Modbus指令 ; CRC : 2 Byte Checksum         {             ushort CRCFull = 0xFFFF; // CRC 的初值設成 0xFFFF             byte CRCHigh = 0xFF, CRCLow = 0xFF; // CRC 的 High byte 和 Low byte             char CRCLSB; // CRC Least signficant bit             for (int i = 0; i < (message.Length) - 2; i++)             {                 CRCFull = (ushort)(CRCFull ^ message[i]); // exclusive or                  for (int j = 0; j < 8; j++)                 {   ...

Visual C# 2010 Serial Port 設定

圖片
    最近一下子太多案子都是要 Rs232,所以先寫一個標準的 RS232 設定,好讓所有的系統共用。    首先,構想是把 RS232 的各項設定值直接放在 Properties.Settings.settings 中 ,所以先在 Visual C# 2010 專案中的 Properties.Settings.settings 中加入: serial_Port serial_Baudrate serial_Parity serial_Databits serial_Stopbit    為了方便,每個變數的型態都是 String,如果是數值變數讀進來時會先用 Int32.TryParse(String, out numValue) 測試 String 是否能轉成 Integer,如果 Parse 可以再執行 ToInt32。 整個程式如後: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace WindowsFormsApplication1 {     public partial class Form1 : Form     {         private string RxString;         public Form1()         {             InitializeComponent();         }       ...

Visual C# 2010 開發 Modbus Poll - 測試環境架設篇

圖片
  程式設計師最痛苦的事就是自己寫過的程式不見了,雖然曾經有經驗,但是對於很多複雜的運算不件就很痛苦了, Modbus 就是其中之一,很久前就寫過了,但是要重新寫一遍還是很痛苦。   不管怎樣,先把測試環境架起來再說,首先下載一個虛擬 Com Port (Null Modem) 的程式,com0com 應該是不錯的選擇,這次我下載的是 com0com-2.2.2.0-i386-fre.zip。 解壓縮安裝後就會看到 裝置管理員當中多了: com0com裝置   開啟2個超級終端機(如果是 Wwindow 7 可能要找一個類似超級終端機的程式),把連線Port 設成: 連線 Port 一個設成 CONCA0 另一個設成 CONCB0   把兩個終端機的通信協議設成一樣,如果從一邊輸入而另一邊就可以看到輸入資料的話,那就表示com0comg 是可以運作的。 再來用 Visual C# 快速寫一段模擬終端機的程式,我用我自己原本寫過的  Window 7 - 列印發票軟體 / Visual C# 2010 express 序列埠 (RS232) - 1  快速完成一個模擬終端機,還有一件事一定要記得,如果是要用 C# 的 serial.portname 去設定 serial port,請先執行com0com的 setup ,把 Null Modem 的 Port Name 改成 COM3 和 COM4,否則你一執行 serialPort1.Open(); 就會有錯誤產生 - "The given port name does not start with COM/com or does not resolve to a valid serial port.",這應該是 Microsoft 開的一個不好笑的玩笑,用 system.io.ports 的  SerialPort.GetPortNames() 可以得到的名稱,而用在 Net 的 serialPort1.PortName 中卻不能用。 簡易的終端機程式畫面如下: 簡易的終端機 程式如下: using System; using Syste...

Visual C# 2010 簡易開發多國語言程式

圖片
  寫過很多次多國語言的程式,但是每一次自己都沒有紀錄下來,這一次決定寫一篇,除了自己紀錄外也供大家分享。   首先要確定自己的需求,多國語言有幾種寫法,這次要採定使用設定檔的方式,也就是說不用在程式執行時變換語言種類,只能在程式起始時讀取設定檔確定使用語言的種類。   先在要使用多國語言的 Form 上把會使用到的物件先都擺上: Label、Button、Menu。 先都設定好 Default 的語言,再來要修改 Form 的屬性 Localizable to True ,如下圖: Change Localizable from False to True 接著再把 Language 設定成所需使用的語言: Chinese (Traditional, Taiwan),修改 Lable、Button等的Text ,系統會自動產生相對應的 Form1.zh-TW.resx 如下: Form1.zh-TW.resx 在程式一開始Using的後面加上: using System.Threading; using System.Globalization; using System.Resources; 並在 Form1 的 InitializeComponent(); 前加上: Thread.CurrentThread.CurrentCulture = new CultureInfo(""); Thread.CurrentThread.CurrentUICulture = new CultureInfo(""); 雙引號中間沒資料就是用 Default Language, 如果雙引號中間是 "zh-TW" 就是使用繁體中文如: Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-TW"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-TW"); 再從專案中 Properties下的 Settings.settings 加一個 La...

Visual 2010 C# 自動登入遠端 IP Camera

圖片
    今天又接到一個新任務, 為 IP Camera 撰寫遠端監控程式, 現在 IP Camera 無論是有線無線的使用量都很大,要能連接 IP Camera 最先要能解決的就是自動登入,目前多半的 IP Camera 都有一個小型的 Web Server 方便大家遠端設定及連線,所以要設定應該就是用 Http Web 的 Protocol 來聯就可以。 我目前要測的這一款 IP Camera,還可以遠端遙控及夜視功能,不過問題一步一步解決,下面就是我要處理的 IP Camera: Wifi IP Camera     首先先連進去看Ip Camera 自己用瀏覽器如何顯示畫面,並找出產生圖像的位置,這台 Ip Camera 是產生 MJPEG,所以應該可以假設產生圖樣的程式是 *.cgi,果然沒錯用 Chrome 瀏覽器中的檢查元素就找到了: 找到負責圖像顯示的videostream.cgi     先打開 Visual 2010 C#,開啟一個 Window Application Form,為了方便測試,先設一個按鈕及文字方塊用來顯示傳回的資訊,HttpWebRequest 是定義在 System.Net 中,所以要先加一行:            Using System.Net; 接著定義:            HttpWebRequest req;            HttpWebResponse resp = null;            Uri url = new Uri("http://192.168.1.***/videostream.cgi"); //*** 是為隱藏 IP 位置            req = (HttpWebRequest)HttpWebRequest.Create(url);...

在 Visual C# 2010 用 DATASET 讀取 XML 檔案

圖片
  今天又有新的需求進來,客戶希望能在 XML 檔中 存取一些公司的基本定義資料及設定資料庫的路徑,這樣子程式在一開啟的時候可以先詢問客戶要處理哪一家公司的資料,應該是想用同一個系統處理多家公司的資料,而每一家公司的資料是放在單獨的資料庫裡。   XML 的檔案格式如下: <? xml version="1.0" encoding="big5"?> <公司集合> <公司>   <名稱>輕鬆工作家股份有限公司</名稱>   <統一編號>00000000</統一編號>   <資料庫>c:\database\00000000.mdf</資料庫> </公司> </公司集合>   但一開始給使用者的檔安希望是一個由程式產生的XML 檔如下: <? xml version="1.0" encoding="big5"?> </公司集合>   程式片段如下:  XmlDocument xmlDoc = new XmlDocument();                          XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "big5", null);                          XmlElement rootNode = xmlDoc.CreateElement("公司集合");                          xml...

在 Visual Studio 2010 C# 使用 Sqlite

圖片
  現在的每一個系統,幾乎都需要一個資料庫,使用 sqlite 的原因是因為 Android 的手持上是使用 sqlite, 所以先在 internet 上 Google 一下 "ADO NET 4.0 Sqlite",  立刻得知要先去 Download SQLite-1.0.66.0setup.exe, 你可以直接從此 下載 。   網頁的畫面大概如下   接著執行 SQLite-1.0.66.0-setup.exe, 畫面如下   接著設定存放位置 接著再按 2 次 "Next>" 就會開始安裝了   接著選擇要支援開發工具及版本   最後系統顯式安裝完成畫面,按 "Close" 完成安裝   接著用 Visual C# 2010 Express 開一個新專案, 我是取用 SQLiteTest, 我先測試Bindingsource, 在 DataSource 中選擇 Add Project Data Source  接著畫面出現選擇 Data Source Type: 選擇 Database 並按 "Next >",繼續選擇 Data Model, 選擇 DataSet 並按 "Next >",繼續選擇 Choose Your Data Connection: 按下 New Connection , 看到: 按下 " Change" 就會看到 "Change Data Source": 在 Data source 的選項中可以看到SQLite Database File,選擇 SQLite Database File 並按下 "OK" : 接著按下 "OK", 可怕的事發生了: 趕快再 "Google 一下",找到一篇文章 For VS C# 2010 you need to add following lines to C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\VCSExpress.exe....