關於西門子PLC S7-300跟BCB連結問題 |
尚未結案
|
steve6912
一般會員 發表:5 回覆:14 積分:3 註冊:2006-07-05 發送簡訊給我 |
請問一下各位大大,不知道有沒有人用西門子S7-300這組PLC跟BCB做過連接,
因為我看講義,是用DELPHI做的,可是不管我怎麼試,就是讀不到他的值… 我現在只需要至少能讀到他裡面的值…不知道有沒有人可以幫我一下,感激不盡>"< 以下是我的程式碼…麻煩各位大大能給予指教或是跟我說一下可參考的資料…謝謝了^^ VARIANT* sa; wchar_t *a=L"S7:[S7_LINK1|VFD1|CP_H1_1:]DB98,CHAR2,1"; long * sb; long sc=100; long sd; sd=S7Data1->ReadVariable(StringToOleStr(a),s,sb,sc); Edit1->Text=sd; |
friendlly
高階會員 發表:22 回覆:144 積分:103 註冊:2003-04-08 發送簡訊給我 |
|
steve6912
一般會員 發表:5 回覆:14 積分:3 註冊:2006-07-05 發送簡訊給我 |
|
friendlly
高階會員 發表:22 回覆:144 積分:103 註冊:2003-04-08 發送簡訊給我 |
|
steve6912
一般會員 發表:5 回覆:14 積分:3 註冊:2006-07-05 發送簡訊給我 |
可是我這樣的寫法…是從delphi引用過來的…他在delphi下就可以執行…可以讀取到值… 但是移到了bcb就開始有問題…我不知道到底是哪裡出了問題@@ 一般PLC連線(Rs232 / 網路)...都有各廠牌特定的potocol.... 看你上面的程式..你並沒有傳送出要求回傳的命令......檢查看看... 是利用網路線,他也讓bcb可以建立一個s7data的元件…利用該元件的函式來連接… 而readvariable(*wchar_t,tagVARIANT*,long*,long) 則是這個元件的內建函式… |
steve6912
一般會員 發表:5 回覆:14 積分:3 註冊:2006-07-05 發送簡訊給我 |
|
friendlly
高階會員 發表:22 回覆:144 積分:103 註冊:2003-04-08 發送簡訊給我 |
|
steve6912
一般會員 發表:5 回覆:14 積分:3 註冊:2006-07-05 發送簡訊給我 |
===================引 用 文 章=================== 建議你把你的code貼出來這樣比較清楚 ===================引 用 文 章=================== 程式碼嗎…其實上面就是我的程式碼了… 不過我現在有更新過寫法~寫的部份… 這是寫的函式的需求…S7Data1->WriteVariable(wchar_t*,VARIANT,long,long) TVariant value; 這個部份是作用正常的…result如果為0,代表連結正確,我有試過改他的路徑…會有錯誤訊息; 再來是讀的部份…函式需求為…S7Data1->ReadVariable(wchar_t*,VARIANT*,long*,long) 我不知道為什麼VARIANT跟long會多"*"…以下是他的程式部份… TVariant value; 在這個部份…不管我路徑對還錯…result永遠都是零…似乎是沒有動作的跡象…我也試過用VARIANT* value跟long* state來宣告…結果一模一樣… 有可能是bcb不支援這個元件嗎…可是如果不支援…為什麼write又可以呢…我在想是不是需要送一個要求plc回傳的指令… 可是我不知道該怎麼做…plc我是第一次摸…bcb我也是第一次摸…麻煩大家幫我一下…謝謝了^^ |
friendlly
高階會員 發表:22 回覆:144 積分:103 註冊:2003-04-08 發送簡訊給我 |
1.你手上應該有potocol的格式,查一下發送命令的部份(通常都是發送命令到PLC要求回傳). 2.你的程式碼只有片段..這樣很難確認你的問題出現在哪.何況我沒有PLC s7-300
程式碼嗎…其實上面就是我的程式碼了… 不過我現在有更新過寫法~寫的部份… 這是寫的函式的需求…S7Data1->WriteVariable(wchar_t*,VARIANT,long,long) TVariant value; 這個部份是作用正常的…result如果為0,代表連結正確,我有試過改他的路徑…會有錯誤訊息; 再來是讀的部份…函式需求為…S7Data1->ReadVariable(wchar_t*,VARIANT*,long*,long) 我不知道為什麼VARIANT跟long會多"*"…以下是他的程式部份… TVariant value; 在這個部份…不管我路徑對還錯…result永遠都是零…似乎是沒有動作的跡象…我也試過用VARIANT* value跟long* state來宣告…結果一模一樣… 有可能是bcb不支援這個元件嗎…可是如果不支援…為什麼write又可以呢…我在想是不是需要送一個要求plc回傳的指令… 可是我不知道該怎麼做…plc我是第一次摸…bcb我也是第一次摸…麻煩大家幫我一下…謝謝了^^ |
steve6912
一般會員 發表:5 回覆:14 積分:3 註冊:2006-07-05 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
===================引 用 文 章=================== 再來是讀的部份…函式需求為…S7Data1->ReadVariable(wchar_t*,VARIANT*,long*,long) 我不知道為什麼VARIANT跟long會多"*"…以下是他的程式部份… TVariant value; 在這個部份…不管我路徑對還錯…result永遠都是零…似乎是沒有動作的跡象…我也試過用VARIANT* value跟long* state來宣告…結果一模一樣…
我是不懂PLC等硬體上的東西,但純從程式碼上來看,我覺得有一些些的問題。即然你說在delphi上是可以跑的,那理論上在bcb上也沒問題。但是,從你的function來看,它像是個com元件,而delphi與bcb在實作com有很大的不同,bcb用的是ATL的實作方法,尤其在參數上在delphi用的是OleVariant,在BCB上則是TVariant。在此我提出幾個想法: 4/ 你提到「似乎是沒有動作的跡象」,那也只是似乎…我覺得該要查的是value與state的值的變化來決定…
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
steve6912
一般會員 發表:5 回覆:14 積分:3 註冊:2006-07-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |