全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2994
推到 Plurk!
推到 Facebook!

希望有人能幫我解答…我已經困擾好久了…

尚未結案
steve6912
一般會員


發表:5
回覆:14
積分:3
註冊:2006-07-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-19 08:31:16 IP:220.229.xxx.xxx 未訂閱

現在在研究怎麼將西門子S7-300的數據傳到BCB來顯示…用過VB.NET跟DELPHI…都可以…唯獨就是BCB搞不出來…

以下是DELPHI的原始碼…

procedure TForm1.Timer1Timer(Sender: TObject);
var
sa:Olevariant;
sb:longint;
sc:longint;
begin
sb:=1;
sc:=100;
S7Data1.ReadVariable('S7:[S7_LINK1|VFD1|CP_H1_1:]DB101,CHAR0,1',sa,sb,sc);
Label1.Caption:=IntToStr(sa);S7Data1.ReadVariable()
end;

procedure TForm1.Button1Click(Sender: TObject);
var
sa:Olevariant;
sc:longint;
begin
sc:=100;
sa:=StrToInt(Edit1.Text);
S7Data1.WriteVariable('S7:[S7_LINK1|VFD1|CP_H1_1:]DB101,CHAR0,1',sa,sc);
end;

end.

其中的S7DATA1是西門子S7軟體衍生出來的控制項…

不知道有沒有人能幫我轉成BCB碼…因為我怎麼轉…就是沒東西…希望大家幫個忙…謝謝大家…

chiehjj
初階會員


發表:21
回覆:63
積分:26
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-30 11:01:58 IP:61.60.xxx.xxx 未訂閱
可不可以傳您的程式碼上來看看
steve6912
一般會員


發表:5
回覆:14
積分:3
註冊:2006-07-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-31 11:20:32 IP:220.229.xxx.xxx 未訂閱

我的程式碼嗎…如果是delphi就如上面所po的…如果是bcb的話如下…

OleVariant sa;
long sc=100;
sa=StrToInt(Edit1->Text);
S7Data1->WriteVariable(StringToOleStr(L"S7:[S7_LINK1|VFD1|CP_H1_1:]DB98,CHAR0,1),sa,sc);

以上是寫的階段…這一階段是成功的…以下是讀的階段…這一段就無法讀出我要的值了…

VARIANT sa;
AnsiString temp;
temp=1;
long* sb; //sb=1
sb=(long*)temp.ToInt();
long sc=100;
long sd ;
sd=S7Data1->ReadVariable(StringToOleStr(L"S7:[S7_LINK1|VFD1|CP_H1_1:]DB98,CHAR0,1"),&sa,sb,sc);
S7Data1->Connect();
Edit2->Text=IntToStr(???);

問號的地方是因為我還不知道該放什麼東西進去…順便寫一下他的函式需求…

WriteVariable(wchar_t*,tagVARIANT,long)

ReadVariable(wchar_t*,tagVARIANT*,long*,long)

這是bcb的函式需求…

下面是delphi的需求…

WriteVariable(WideString,OleVariant,Integer)

ReadVariable(WideString,OleVariant,Integer,Integer)

麻煩回答一下了…謝謝^^

chiehjj
初階會員


發表:21
回覆:63
積分:26
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-08-02 16:09:32 IP:202.39.xxx.xxx 未訂閱

以前s7用prodax作為與pc通訊設定用, 它是用dll方式, 與您用的物件方式不太依樣, 現在您用的通訊元件我沒用過,

不知是 s7內建的還是額外買的,

不過您的ReadVariable(StringToOleStr...)要不要先改成OlestrToString

steve6912
一般會員


發表:5
回覆:14
積分:3
註冊:2006-07-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-08-03 08:05:50 IP:220.229.xxx.xxx 未訂閱

===================引 用 文 章===================

以前s7用prodax作為與pc通訊設定用, 它是用dll方式, 與您用的物件方式不太依樣, 現在您用的通訊元件我沒用過,

不知是 s7內建的還是額外買的,

不過您的ReadVariable(StringToOleStr...)要不要先改成OlestrToString

感謝您的回覆…不過不知道改成OleStrToString的用意為何呢…能告訴我一下嗎…謝謝^^

steve6912
一般會員


發表:5
回覆:14
積分:3
註冊:2006-07-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-08-03 11:57:59 IP:220.229.xxx.xxx 未訂閱

他的格式裡面要求的是wchar_t*…我不知道為什麼你會覺得要改成OleStrToString呢…因為我試過改了之後…

會不能執行…麻煩幫我解惑一下…謝謝^^

chiehjj
初階會員


發表:21
回覆:63
積分:26
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-08-04 08:54:44 IP:59.126.xxx.xxx 未訂閱
您所謂搞不出來是資料讀的值不對還是無法執行?
我以前遇到的問題通常是資料格式不符所導致,也就是plc的資料與pc的資料不對稱
依我的看法是read參數值不符合函數需求 , OlestrToString僅是建議您試試改變參數格式的設定而已
delphi與builder的ReadVariable函式似乎有所不同
WideString是二個byte的unicode與ansistring還是有不同的
建議您再試試改變參數格式再多試試幾次
steve6912
一般會員


發表:5
回覆:14
積分:3
註冊:2006-07-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-08-04 15:19:17 IP:220.229.xxx.xxx 未訂閱
感謝你的回覆…我是讀出來的值不對…怎麼用都不對… 我貼一下二者所需的格式好了…(可是write的格式也不一樣…竟然可以寫= =?) result:=S7Data1.ReadVariable(WideString,OleVariant,long,long)<----這是delphi的格式… result=S7Data1->ReadVariable(wchar_t*,tagVariant*,long*,long)<----這是bcb的格式… 再來是寫的格式… result:=S7Data1.WriteVariable(WideString,OleVariant,Integer)<----這是delphi的格式… result=S7Data1->WriteVariable(wchar_t*,tagVariant,long)<----這是bcb的格式… 我的寫入程式…就如同之前所貼的…是可以正常寫入的…這就表示我在wchar_t*的宣告應該沒有錯… 而所寫入的值跟我進西門子s7 scout(即他本身的opc server程式)裡面的值是一樣的…而且程式這邊一變動…s7 scout裡也會跟著變動… 我現在是覺得…我對應的目標應該是正確的…因為既然可寫入…表示目標正確…但是對於tagVARIANT*跟long*這二個項目…我就不是很了解了…我的程式愈改愈少東西…現在的程式如下: Variant sa; long* sb; long sc=100; long sd=1; sb=&sd; *sb=sd; long se; se=S7Data1->ReadVariable(StringToOleStr(S7:[S7_LINK1|VFD1|CP_H1_1:]DB98,CHAR0,1"),sa,sb,sc); 我不知道這樣把sb宣告成固定為1的語法對不對…當我輸出sb的時候…是為1沒錯…如果sb也沒問題…就是sa有問題了… 格式前面的result就是我程式中的se…說明中有提到…如果se為零就是沒有錯誤…如果真是這樣… 那我輸出se時…是為零沒錯… 那或許就是sa的格式有錯…可是我還是搞不懂tagVARIANT*的*所代表的意義…我如果用OleVariant跟Variant來宣告…都是可以的…連用VARIANT*來宣告也可以…我被愈搞愈混了…不知道該怎麼輸出…格式才會正確呢… 麻煩chiehjj幫我回答一下了…感謝你的回覆^^
steve6912
一般會員


發表:5
回覆:14
積分:3
註冊:2006-07-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-08-04 15:21:21 IP:220.229.xxx.xxx 未訂閱
怎麼會沒有排版…我打的時候排的很好呀…不好意思…麻煩你辛苦幫我看一下了…不然用引言回覆來看…好像就會正常了…麻煩你了…
chiehjj
初階會員


發表:21
回覆:63
積分:26
註冊:2002-12-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2006-08-18 08:39:09 IP:221.169.xxx.xxx 未訂閱

如果您還沒有試出來, 建議您到西門子的網站,那裡會有專家幫您解答

https://support.automation.siemens.com/

steve6912
一般會員


發表:5
回覆:14
積分:3
註冊:2006-07-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2006-08-18 14:00:05 IP:211.20.xxx.xxx 未訂閱

謝謝你了,我原本不敢去那邊留是因為我的英文實在很差= =

不過現在已經豁出去了…只希望有人能看的懂我那亂七八糟的英文了…

呵呵…希望能解決了…

系統時間:2024-05-02 10:06:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!