2009年12月27日 星期日

[c#] 單一執行緒與委派 應用介紹-[Thread and Delegate]

單一執行緒與委派 應用介紹-[Thread and Delegate]

//產生紅色球球
bool flg1, flg2,flg3;

private void button1_Click(object sender, EventArgs e)
{

flg1 = true;
Thread th1 = new Thread(readtst);
th1.Start();

}

//執行緒目標
public void readtst()
{
while (flg1 == true)
{
textBox1.BeginInvoke(new creatball(rdball ));
Thread.Sleep(10);
}
}

//委派目標 (執行緒委派目標值傳回到form的物件)
private delegate void creatball( );
private void tst()
{
textBox1.AppendText("read ball" +DateTime .Now .ToLongTimeString ()+ "\n");
}

//委派目標 - 產生紅色球球
public void rdball()
{
Ball aBall;
aBall.pt = new Point(rd.Next(20, this.ClientSize.Width - 20), rd.Next(40, this.ClientSize.Height - 20));
aBall.color = Color.Red;

lock (this)
{
ballList.Add(aBall);
textBox1.AppendText("Read"+DateTime .Now .ToLongTimeString ()+ "\n");
}

this.Invalidate();
}

[c#] 由函式反向傳遞直給飲用者 應用介紹-[public void mystr(out string x)]

由函式反向傳遞值給引用者 應用介紹-[public void mystr(out string x)]

//函式引用者取值
private void button1_Click(object sender, EventArgs e)
{
string x;
mystr(out x);
textBox1.Text = x;
}

//反向送出函式
public void mystr(out string x)
{
x = "read";
Console.WriteLine(x);
}

2009年12月26日 星期六

[c#] delegate and winform object 應用介紹-[delegate]

delegate and winform object 應用介紹-[delegate]

//如何使用delegate把對象傳回到windows form

//傳回到windows form 物件
private void button1_Click(object sender, EventArgs e)
{
textBox1.BeginInvoke(new creatball(tst));
}

//委派對象
public delegate void creatball();
public void tst()
{
textBox1.AppendText("aaaa");
}

2009年9月6日 星期日

[c#] interface 應用介紹-[interface]

interface 應用介紹-[interface]


1.) interface 語法:


using System;using System.Collections.Generic;

using System.Text;


namespace areaFace

{
interface AreaInterface
{

void triangle(int x,int y); //三角形
int circle(int x, int y); //圓形 ,帶回傳值
void square(int x, int y); //方形
}
}

2.) interface實做:

using System;
using System.Collections.Generic;using System.Text;

namespace areaFace
{
public class AreaClass:AreaInterface
{
//圓circle面積公式: 圓面積=半徑×半徑×3.14
//正方形square面積公式: 長x寬=正方
//梯形面積: 上底*高/2 +下底*高/2=(上底+下底)*高/2
//三角形triangle面積: 底×高÷2

//圓面積
private int circlradius1;
private int circlradius2;
public int circlarea;

//圓面積建構子
public AreaClass(int circlradius1, int circlradius2)
{
//呼叫圓面積涵式
circlarea = circle(circlradius1, circlradius2);
}

//圓面積實做
public int circle(int x ,int y)
{

//圓circle面積公式: 圓面積=半徑×半徑×3.14
int circlearea;
circlarea = x * y;
Console.WriteLine(circlarea); //打印

return circlarea; //回傳
}

public void square(int x, int y)
{
//未完
}

public void triangle(int x, int y)
{
//未完
}

}
}

3.) 實做測試:
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;using System.Drawing;using System.Text;

using System.Windows.Forms;


namespace areaFace

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}


private void Form1_Load(object sender, EventArgs e)

{
AreaClass ar = new AreaClass(10, 20);

MessageBox.Show(ar.circlarea.ToString () );

}

}

}

2009年7月30日 星期四

2009年6月11日 星期四

[xml & HMI] xml & HMI 應用介紹-[XML觀念]

xml & HMI 應用介紹-[XML觀念]

XML簡介:
1.) XML是用來建立描述結構化資料標示語言的語言。
2.) 與資料無關的格式。
3.) 開放,可讓人讀取的資料格式,看起來像是HTML。
4.) 能避免瀏覽器或是其他中介軟體,自行增加特定的HTML標籤。
5.) 具擴展性,不像HTML有固定的格式。
6.) 有助於伺服器,瀏覽器,以及應用程式之間的資料傳輸。
7.) 經由建立DTD(Document Type Definition,文件類別定義),可用來定義其他領域(如:數字\化學\音樂等等)相關的語言。
8.) XML是由SGML經過Web最佳化之後,產生的子集合。
9.) XML允許在Web上自訂及驗證文件格式的標籤。
10.) 事實上,XML是以標籤的型態來撰寫結構化文件的架構。
11.) XML可以自行建立標示語言的文法或規則。
12.) XML用於描述資料,其重點在於資料內容的組織。而HTML則用於呈現資料,重點在瀏覽器上的展現方式。

差異說明:
1.) HTML的缺點,導致XML的誕生 (為何XML興起?)
2.) 各大瀏覽器廠商均推出自己的標籤(在HTML標準規格之外),造成不相容。
3.) HTML只能呈現文字方式,卻不能有意義的標示語言,沒有邏輯上的意義。
4.) 不能呈現良好的樹狀階層架構。
5.) 只能使用在瀏覽器之中。不能支援應用程式間的訊息交換。搜尋結果不精確。
6.) 不能指定網頁的集合(不能將網頁組成一分文件)。
7.) 單向連結限制太多,無法將分散的文件組織成為複合文件。
XML與HTML的比較 (Coding與技術方面的比較) (但* XML不是用來取代HTML的)
HTML XML
1.) 有固定的標籤 。 // 無固定標籤,可自訂標籤 。
2.) 元素及屬性的名稱不分大小寫 。 // 元素及屬性的名稱大小寫有別 。
3.) 標籤用來展現元素的外觀 。 // 標籤用於組織資料,呈現樣式可獨立於元素之外 。
4.) 應用沒有延展性 。 // 應用具有延展性 。
5.) Client端比較限於瀏覽器 。// Client端可以使用到XML parser的應用程式 。
6.) 標籤不包含資料的知識 。// 標籤在語意上可表示資料的意義 。
7.) 有標準規範的封閉性語言 。// 可以自訂標籤的開放性語言 。
8.) 較容易學習 。// 入門容易,出師難 。
9.) 不分大小寫 。// 大小寫有別 。
10.) 像
這種空標籤不需要特別的寫法 。// 空標籤需要特別的語法,例如:

11.) 忽略多餘的空白字元 。// 內容中的空白有意義 。

XML基本規則 通常我們對一份XML資料,會有以下幾點的要求

必須以XML文件宣告為起始 XML的文件宣告是非常重要的,就像我們有時候會再HTML文件中作Meta Data的宣告一樣,XML的文件宣告相當簡短,只有一行,他主要是在宣告這份XML文件的格式版本、文件編碼以及一些其他的外部資訊,他的格式也相當簡單,如下所示:


續..........................

2009年5月15日 星期五

[HMI] PanelExpress Macro 實踐匈牙利命名法Tag管理介紹-[如何管理好你的macro及占用的內部點記憶體]

PanelExpress Macro 實踐匈牙利命名法Tag管理介紹-[如何管理好你的macro及占用的內部點記憶體]

說明: (管理精神)
為何要管理? (看以下圖片表示)

1.)當你的專案越來越大的時候,巨集越寫越多的時候該怎麼辦?
2.)當你的專案是多人共同開發的時候該怎麼辦?
3.)當你的專案過幾年之後還要修改macro一堆看不懂也查不出頭緒該怎麼辦?


點圖放大收看外觀-1-[定義變數表及Tag名稱] & [左下角為macro管理名稱右上角為tag table]

點圖放大收看外觀-2-[Macro內容呼叫子程式採用匈牙利的命名法]-[呼叫上張圖片左下角Macro名稱執行段落程式]

點圖放大收看外觀-3-[匈牙利變數Tag name 表示]-[綠色字部分表示註解]


點圖放大收看外觀-4-[每段程式之前一定有助解聲明程式執行大綱和維護者是誰一些"summary"資料]




點圖放大收看外觀-5-[完整的註解有利於自己有小管理也利於專案轉移他人讀取]



*為何我想制訂管理的動機,因為三年多來做了很多專案,雜亂的macro讓我的工作很無效率,專案轉移交時,不斷重演解釋的戲碼,浪費了我很多時間,但也增進大家感情.

*養成良好的程式編寫管理習慣,規劃出制度,可以免除"屍體"(管理無章的程式碼),纏著你,讓你無法再執行開發新的專案.

*此精神出自於我的老師.(人要管理好"自己"也要管理好自己的"碼",一段碼可以看出一個人的"個性"有沒有重視"Team work"精神)

2009年5月6日 星期三

[ASCII] ASCII簡表0~127 & 128~255 Code-[jpg檔]

[ASC] ASCII簡表0~127 & 128~255 Code-[jpg檔]

點圖放大收看外觀-[0~127 code]

點圖放大收看外觀-[128~255 code]

待續..........JIS Code 和文碼

2009年5月5日 星期二

[OPC Server] OPC Server -[觀念導讀 part_1]

[OPC Server] OPC Server -[觀念導讀 part_1]

什麼是OPC概念:
OPC是OLE for Process Control的縮寫,即把OLE應用於工業控制領域。OLE原意是對象鏈接和嵌入,隨著OLE 2的發行,其範圍已遠遠超出了這個概念。現下的OLE包容了許多新的特徵,如統一數據傳輸、架構化存儲和自動化,已經成為獨立於計算機語言、作業系統甚至硬體平台的一種規範,是面向對象程式設計概念的進一步推展。OPC建立OLE規範之上,它為工業控制領域提供了一種標準的數據訪問機製。
工業控制領域用到大量的現場設備,在OPC出現以前,軟體開發商需要開發大量的驅動程式來連接這些設備。即使硬體供應商在硬體上做了一些小小改動,應用程式就可能需要重寫;同時,由於不同設備甚至同一設備不同單元的驅動程式也有可能不同,軟體開發商很難同時對這些設備進行訪問以優化操作。硬體供應商也在嘗試解決這個問題,然而由於不同客戶有著不同的需要,同時也存在著不同的數據傳輸協議,因此也一直沒有完整的解決方案。 自OPC提出以後,這個問題終於得到解決。
OPC規範包括OPC伺服器和OPC客戶兩個部分,其實質是在硬體供應商和軟體開發商之間建立了一套完整的“規則”,只要遵循這套規則,數據交互對兩者來說都是透明的,硬體供應商無需考慮應用程式的多種需求和傳輸協議,軟體開發商也無需了解硬體的實質和操作過程。


點圖放大收看外觀


OPC的優越性是顯而易見的︰
1.) 硬體供應商只需提供一套符合OPC Server規範的程式組,無需考慮工程人員需求。
2.) 軟體開發商無需重寫大量的設備驅動程式。
3.) 工程人員在設備選型上有了更多的選擇。
4.) OPC擴展了設備的概念。只要符合OPC伺服器的規範,OPC客戶都可與之進行數據交互,而無需了解設備究竟是PLC還是儀表,甚至在數據庫系統上建立了OPC規範,OPC客戶也可與之方便地實現數據交互。

opc web side:

http://www.opcfoundation.org/

2009年4月30日 星期四

[OMRON PLC] CX-CX-Programmer 指令介紹-[如何使用"自由通訊"協定整合集合式電錶應用例_Prat 1]

點圖放大收看外觀 -泛用型PLC [PC-USB程式編輯] & [COM1 422&485與電錶連線] & [COM2與PC或HMI連線監控]
點圖放大收看外觀 -km100集合式電錶 [業界最小鋁軌式]

點圖放大收看完整程式 -km100集合式電表通訊命令字串- [9-1]

點圖放大收看完整程式 -km100集合式電表通訊命令字串- [9-2]

點圖放大收看完整程式 -km100集合式電表通訊命令字串- [9-3]

點圖放大收看完整程式 -字串收送指令TXD-RXD-及相關通訊操作其標- [9-4]

點圖放大收看完整程式 -轉碼取值- R相電壓(瞬時電壓)[V] & T相電壓(瞬時電壓)[V] & R相電流(瞬時電流)[A] [9-5]

點圖放大收看完整程式 -轉碼取值- T相電流(瞬時電流) [A]& 有效電力(瞬時值) [KW] &無效電力(瞬時值) [Kvar]- [9-6]

點圖放大收看完整程式 -轉碼取值-功率因數 [Cos θ ] & 頻率 [HZ] & 積算電力量 [kWh]- [9-7]

點圖放大收看完整程式 -轉碼取值-任意積算電力量(kWh) & Alarm Code -[9-8]


點圖放大收看完整程式 -PLC通訊設定-接收緩衝區byte數 -[9-9]

CX-CX-Programmer 指令介紹-[如何使用"自由通訊"協定整合集合式電錶應用例_Prat 1]

指令語法:
TXD
RXD
HEX

指令說明:
1.) TXD 傳送相對應相關集合式量測電力電錶byte指令,送出封包.
2.) RXD 接收相對應相關集合式量測電力電錶byte指令,接收封包.
3.) HEX 接收封包ASCII 轉 HEX Code轉碼指令.
4.) A392.13 為傳送預備旗標.
5.) A392.14 為訊buf 收到資料,准許接收buf資料旗標.
6.) A394 Buf Counter Byte Number.

補充說明: (如果要作多站連線?)
a.) 這個程式樣本km100站號為0,改變站號,以及BCC總何檢查即可.
b.) 可自行設計Bcc總何檢查Function 來使用.
c.) 使用Index+ polling 觀念般一到不同記憶體佔存區DM即可.
d.) 可在加入通訊出錯retry或中斷提示設計.(圖[9-9]內建 Send Delay功能,可以省略設計!!)

2009年4月23日 星期四

[OMRON PLC & HMI] CX-Programmer & PM Designer 利用PLC Scan Time Index控制 & 配方應用介紹-[使用可變長度讀寫PLC配方記憶體,PLC並做0.06秒快速刷記憶體變更300個暫存器]

圖一: 宣告設定PM人機配方長度與筆數,在做實際存取筆數設定宣告.
(點圖放大檢視)

圖二: 書寫相關PLC索引記憶體刷除程式.(點圖放大檢視)

圖三: 檢視PLC記憶體區段有無存取及刷除.(點圖放大檢視)

CX-Programmer & PM Designer 利用PLC Scan Time Index控制 & 配方應用介紹-[使用可變長度讀寫PLC配方記憶體,PLC並做快速刷記憶體變更300個暫存器]

PLC程式設計概念:
1.)

2.)

3.) 目前以20ms作累加索引速度,當採用常時ON和去掉@ ,則隨PLC Scan Time做Index速度刷除動作.(最快可達0.2ms,須依CPU執行速度而定).

續...

2009年4月19日 星期日

[HMI] PM Designer & PanelExpress Macro 指令介紹-[File Stream IO 讀寫人機內存到USB或硬碟產生文字檔_Part 1]


PM Designer & PanelExpress Macro 指令介紹-[File Stream IO 讀寫人機內存到USB或硬碟產生文字檔_Part 1]


指令語法: (產生文字檔到USB ,PE軟體則產生在AP本身資料夾裏)

$U2999 = "test.txt"

$U3000 = OPEN_FILE($U2999,1)//寫檔
$U2000 = WRITE_FILE($U3000, $N1000, 30)
$U2000 = CLOSE_FILE($U3000)

指令說明:

1.) "test.txt"為檔案名稱

2.) $U2999為檔案名稱的register

3.) OPEN_FILE($U2999,1) 為建立stream , 1為產生檔案.

4.) WRITE_FILE($U3000, $N1000, 30) 為寫入檔案內容,從人機記憶體start address $N1000 寫入30筆.

5.) 寫入後的資料如照片中的樣本.

[HMI]: PanelExpress Macro 指令介紹-[如何使用Runtime軟體呼叫windoes底下的應用程式_Prat 2]


PanelExpress Macro 指令介紹-[如何使用Runtime軟體呼叫windoes底下的應用程式_Prat 2]

指令語法: (帶回傳值)
$U499= RUNW("D:\book.txt")//開啟指定路徑軟體檔案,帶回應狀態到$U499
指令說明:
1.) 在Run("字串型態路徑檔名") ,如上例,開啟D槽底下的book.txt檔案,系統也會相對應開啟此應程式.
2.) 如照片中說明一樣,按鈕按下使用on巨集,一次呼叫此指令,就開啟book.txt檔案了.
3.) 如果開啟案不存在,等同開檔失敗,則會回傳ErrorCode 十進制65535到$U499,可供做流程判定設計.

[HMI]: PanelExpress Macro 指令介紹-[如何使用Runtime軟體呼叫windoes底下的應用程式_Part 1]

PanelExpress Macro 指令介紹-[如何使用Runtime軟體呼叫windoes底下的應用程式_Part 1]

指令語法: (不帶回傳值)
RUN("D:\book.txt") //開啟指定路徑軟體檔案
指令說明:
1.) 在Run("字串型態路徑檔名") ,如上例,開啟D槽底下的book.txt檔案,系統也會相對應開啟此應用程式.
2.) 如照片中說明一樣,按鈕按下使用on巨集,一次呼叫此指令,就開啟book.txt檔案了.

2009年3月31日 星期二