PC+PLC的解決方案-[PAC]
以下是筆者個人自己的見解,進請批評或指教,感謝.
寫這篇文章之前,我想說一段自己的故事,身在自動控制領域9年的人生中,在25歲退伍的時候,筆者一直鎖定觀察PAC市場的發展,在工作中使用各大日系PLC非常的順手,順勢也對自己人生佈局了PC程式語言撰能力,和英文語言能力補上過去消耗自己人生的專業知識.
在這段時間當中,因為不斷面對應用例的挑戰,使用PLC和HMI及其他Device解決各種應用例,其中體會到發現越來越難處理了,就算解決了自己也不滿意這樣的架構,也更深刻體會到PLC的封閉性,但由於常常聽到PLC與PC對抗的正負面消息,於是正式轉向PAC架構的解決方案,把PLC和PC兩大特色與問題綜合掉的商品.
由於因為本土廠商就有再生產PAC商品,所以去了解其中特性,但覺得很可惜,因為遷就在硬體平台零組件方面開發與發展,阻礙了PAC商品的特性開發美意,本來是個美好的夢想產品,卻變成有待開發改版升級的產品,反觀歐美市場,卻發現大膽的設計,讓PAC有更大想像力和發揮空間,能發揮多大的力量和價值,全都由使用者的應用開發團隊自己掌握,應用上可以創造很一般的應用例,也可以創造讓人贊嘆的應用例,其中的發揮空間,非常的強大,正好於是剛好遇上金融大海嘯,企業的解體與改組,我決定放下一切,改變自己的人生,走別人不敢走的路,抱著虛心請益PAC的心,投入PAC的世界,我也沒想到一個做PLC背景的人有這麼大的勇氣,走進須具備PC與PLC兩大能量和在亞洲市場是處女第未開發的商品.
筆者會在斟酌時間介紹 PAC軟體核心揭開更多知識分享給大家
以下即時核心系統品牌,全都符合IEC 61131-3語法規範,俗稱OPEN PLC,
[CoDeSys, TwinCAD, KW-Soft, winAC]
這些核心系統,都受國內外知名控制器,互相爭奪合作,加持在自己的商品硬體上,並且提供更優於PLC的解決方案,不管是在速度性能,應用例,整合度,都有更上一層樓的表現和發揮空間.
勇於改變自己或許就是機會!!
PeterShen
2010年4月13日 星期二
2010年4月5日 星期一
[c#] 事件2Human 應用介紹-[Event 2Human ]
事件 應用介紹-[Event]
//人員 事件類別
namespace even_tst
{
delegate void weightEvent(int weight);
class Human
{
private int 身高;
private int 體重;
public static int 人數;
public event weightEvent Wei;
public Human()
{
身高 = 180;
體重 = 65;
人數++;
}
public Human(int 身高,int 體重)
{
this.身高 = 身高;
this.體重 = 體重;
人數++;
}
//存取子方式-設定重量並判斷
public int Weight
{
get
{
return 體重;
}
set
{
if (value > 100)
if (Wei != null)
Wei(value);
體重 = value;
}
}
public void 秀身高體重()
{
Console.WriteLine("身高={0},體重={1},人數={2}", 身高, 體重, 人數);
}
//設定重量並判斷
public void set體重(int x)
{
if (x> 100)
if (Wei != null)
Wei(x);
體重 = x;
}
}
}
///////////////////
//測試程式
//////////////////
namespace even_tst
{
class Program
{
static void Main(string[] args)
{
test事件1();
Console.ReadLine();
}
//
public static void test事件1()
{
Human p1 = new Human();
//指定 Danger事件由 TooFast方法來處理
p1.Wei += new weightEvent(Too胖);
p1.set體重(150);
p1.Weight = 200;
}
static void Too胖(int x)
{
Console.WriteLine("目前的體重 {0},超過 100,請減肥!!!", x);
}
}
}
//人員 事件類別
namespace even_tst
{
delegate void weightEvent(int weight);
class Human
{
private int 身高;
private int 體重;
public static int 人數;
public event weightEvent Wei;
public Human()
{
身高 = 180;
體重 = 65;
人數++;
}
public Human(int 身高,int 體重)
{
this.身高 = 身高;
this.體重 = 體重;
人數++;
}
//存取子方式-設定重量並判斷
public int Weight
{
get
{
return 體重;
}
set
{
if (value > 100)
if (Wei != null)
Wei(value);
體重 = value;
}
}
public void 秀身高體重()
{
Console.WriteLine("身高={0},體重={1},人數={2}", 身高, 體重, 人數);
}
//設定重量並判斷
public void set體重(int x)
{
if (x> 100)
if (Wei != null)
Wei(x);
體重 = x;
}
}
}
///////////////////
//測試程式
//////////////////
namespace even_tst
{
class Program
{
static void Main(string[] args)
{
test事件1();
Console.ReadLine();
}
//
public static void test事件1()
{
Human p1 = new Human();
//指定 Danger事件由 TooFast方法來處理
p1.Wei += new weightEvent(Too胖);
p1.set體重(150);
p1.Weight = 200;
}
static void Too胖(int x)
{
Console.WriteLine("目前的體重 {0},超過 100,請減肥!!!", x);
}
}
}
[c#] 事件1Car 應用介紹-[Event 1Car]
事件 應用介紹-[Event]
//Car 事件類別
namespace even_car
{
//事件委派
delegate void DangerEvent(int Speed);
class Car
{
private int m_speed;
//宣告事件
public event DangerEvent Danger;
public int Speed
{
get
{
return m_speed;
}
set
{
if (value >200)
if (Danger != null)
{
Danger(value);
}
m_speed = value;
}
}
}
}
//測試程式
namespace even_car
{
class Program
{
static void Main(string[] args)
{
test事件();
Console.ReadLine();
}
static void test事件()
{
Car Benz = new Car();
//指定Danger事件由ToolFast方法來處理
Benz.Danger += new DangerEvent(ToolFast);
//車子速度屬性指定
Benz.Speed = 300;
}
static void ToolFast(int vSpeed)
{
Console.WriteLine("目前的速度{0},高過200,請減速!!", vSpeed);
}
}
}
//Car 事件類別
namespace even_car
{
//事件委派
delegate void DangerEvent(int Speed);
class Car
{
private int m_speed;
//宣告事件
public event DangerEvent Danger;
public int Speed
{
get
{
return m_speed;
}
set
{
if (value >200)
if (Danger != null)
{
Danger(value);
}
m_speed = value;
}
}
}
}
//測試程式
namespace even_car
{
class Program
{
static void Main(string[] args)
{
test事件();
Console.ReadLine();
}
static void test事件()
{
Car Benz = new Car();
//指定Danger事件由ToolFast方法來處理
Benz.Danger += new DangerEvent(ToolFast);
//車子速度屬性指定
Benz.Speed = 300;
}
static void ToolFast(int vSpeed)
{
Console.WriteLine("目前的速度{0},高過200,請減速!!", vSpeed);
}
}
}
2010年3月12日 星期五
SIEMENS-PC-Base MicroBox-[ Motion VS Vision 影片 ]
SIEMENS-PC-Base MicroBox-[ Motion VS Vision 應用例 ]
應用介紹:
系統利用西門子高速,極高運算力的PC-Base 系統,精簡配線通訊總線IO系統,搭配使用通訊總線運動控制器,與影像辨識1000fps 高速分色辨識自由落體,並使用同步非同步,winAC-RTX windows 即時核心技術,做完美的結合.
點選下方play鍵播放收看影片,並且注意分色轉盤的快慢速度變化.
(其中軟硬體精隨另行備載)
應用介紹:
系統利用西門子高速,極高運算力的PC-Base 系統,精簡配線通訊總線IO系統,搭配使用通訊總線運動控制器,與影像辨識1000fps 高速分色辨識自由落體,並使用同步非同步,winAC-RTX windows 即時核心技術,做完美的結合.
點選下方play鍵播放收看影片,並且注意分色轉盤的快慢速度變化.
(其中軟硬體精隨另行備載)
2010年1月26日 星期二
[c#] 如何處理例外錯誤狀況 應用介紹-[try-catch-finally]
如何處理例外錯誤狀況 應用介紹-[try-catch-finally]
1.) NG程式
//錯誤程式,程式直接當掉(原因被除數不得維0)
private void button1_Click(object sender, EventArgs e)
{
int a = 0;
int b =100/a;
Console.WriteLine("b is {0}", b);
Console.WriteLine("End of job ");
}
2.) 攔截NG程式
//try-catch-finally語法(程式不會當掉,但提報錯誤)
private void button2_Click(object sender, EventArgs e)
{
int a = 0;
try
{
int b = 100 / a;
Console.WriteLine("b is {0}", b);
}
//錯誤攔截訊息
catch (Exception err1)
{
Console.WriteLine("Divided by zero ");
Console.WriteLine("Divided by zero {0}",err1 );
MessageBox.Show(err1.ToString ());
}
//最後一定會執行
finally
{
Console.WriteLine("End of job");
}
3.) 自行判斷NG錯誤跳轉攔截錯誤訊息(throw 使用)
//自行判斷錯誤跳轉攔截錯誤訊息(程式不會當掉,但提報錯誤)
private void button3_Click(object sender, EventArgs e)
{
int a = 100, b = 0;
try
{
if (b == 0)
{
//跳轉呼叫丟出錯誤
throw new ArithmeticException("Div by zero");
}
else
{
int c = a / b;
Console.WriteLine("Resoult is " + c);
}
Console.WriteLine("After divide2");
}
//
catch (ArithmeticException error)
{
Console.WriteLine("Caught!{0}",error );
}
===========================================
自訂錯誤類別-待續
1.) NG程式
//錯誤程式,程式直接當掉(原因被除數不得維0)
private void button1_Click(object sender, EventArgs e)
{
int a = 0;
int b =100/a;
Console.WriteLine("b is {0}", b);
Console.WriteLine("End of job ");
}
2.) 攔截NG程式
//try-catch-finally語法(程式不會當掉,但提報錯誤)
private void button2_Click(object sender, EventArgs e)
{
int a = 0;
try
{
int b = 100 / a;
Console.WriteLine("b is {0}", b);
}
//錯誤攔截訊息
catch (Exception err1)
{
Console.WriteLine("Divided by zero ");
Console.WriteLine("Divided by zero {0}",err1 );
MessageBox.Show(err1.ToString ());
}
//最後一定會執行
finally
{
Console.WriteLine("End of job");
}
3.) 自行判斷NG錯誤跳轉攔截錯誤訊息(throw 使用)
//自行判斷錯誤跳轉攔截錯誤訊息(程式不會當掉,但提報錯誤)
private void button3_Click(object sender, EventArgs e)
{
int a = 100, b = 0;
try
{
if (b == 0)
{
//跳轉呼叫丟出錯誤
throw new ArithmeticException("Div by zero");
}
else
{
int c = a / b;
Console.WriteLine("Resoult is " + c);
}
Console.WriteLine("After divide2");
}
//
catch (ArithmeticException error)
{
Console.WriteLine("Caught!{0}",error );
}
===========================================
自訂錯誤類別-待續
2010年1月19日 星期二
[c#] String字串處理Split 應用介紹-[Split]
String字串處理Split 應用介紹-[Split]
//split
private void button_Click(object sender, EventArgs e)
{
char[] del = new char[] { ',','/' }; //多符號分離
//char del = ','; //單符號分離
string line = "datalog_mo1_0,2010/1/19下午 01:47:52,691,1,40197574905.7755";
string[] split = line.Split(del);
foreach (string s in split)
{
listBox1.Items.Add(s); //送到目標 listbox檢視
}
}
//split
private void button_Click(object sender, EventArgs e)
{
char[] del = new char[] { ',','/' }; //多符號分離
//char del = ','; //單符號分離
string line = "datalog_mo1_0,2010/1/19下午 01:47:52,691,1,40197574905.7755";
string[] split = line.Split(del);
foreach (string s in split)
{
listBox1.Items.Add(s); //送到目標 listbox檢視
}
}
2010年1月2日 星期六
[SIEMENS SCL FC ] 由函式FC回傳演算計算 應用介紹-[SCL-FC ][IEC 61131-3]
由函式FC回傳演算計算 應用介紹-[SCL-FC][IEC 61131-3]
FUNCTION SQUARE : INT //帶回傳值
FUNCTION SQUARE : INT //帶回傳值
(*********************************************************
This function returns as its function value the square of the
input value or if there is overflow, the maximum value that
can be represented as an integer.
***********************************************************)
//know_how_protect //程式保護
//變數宣告in類型
VAR_INPUT
value : INT;
END_VAR
//程式開始
BEGIN
IF value <= 181 THEN
SQUARE := value * value; //計算含式
ELSE
SQUARE := 32_767; // overflow, 設定最大值並回傳當成錯誤碼
END_IF;
END_FUNCTION
訂閱:
文章 (Atom)