用BCB連歐姆龍的PLC怎麼下指令就是不會動 |
答題得分者是:pedro
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
各位前輩好~ 小弟最近寫了一個BCB程式,
希望能跟歐姆龍的CQM1系列PLC溝通, 該系列PLC的指令格式為 @ | 機台號碼 | head code | (要下的relay) | FCS |* | CR | 小弟手邊有一支同事用VB寫的測試程式可以成功連結 最後送出去的地方如下 Form1.MSComm1.Output = SXD$ Chr$(13) 其中SXD$跟我用BCB下的指令一模一樣,假設都是 @00WR0036000141* 而我的BCB也是使用MSComm1元件,參數的設定都檢查過跟PLC一致 問題來了.... 我實在是不知道C 要怎樣表現最後這個CR (VB-->Chr$(13)) 嘗試過很多方式如 @00WR0036000141*\r @00WR0036000141*\13 @00WR0036000141*\0xd @00WR0036000141*\\0xd PLC就是不理我(我另外一邊有開PLC程式軟體監控36號ch是否有被寫入) 只好上來向各位前輩求救~!!!! 請問各位前輩我最後這個送給MSComm1.Output的字串到底應該寫成怎樣呢?? 感謝!!!!!! |
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
我想可能您的指令格式有問題,或是鮑率協定設錯
我在2003年曾用delphi開發類似的專案 當時我有寫一支測試工具可用,應該可確定PC-->PLC指令是否接受 http://delphi.ktop.com.tw/download.php?download=upload/4947bccf53ef3_ComExample.exe 目前我已經很久沒碰此領域,沒有環境可測,而且很久沒有用BCB的語法, 或許有熱心人士願意幫你轉譯BCB的語法, 提供這核心的部份給您參考 我使用CPort這個元件組2.64版 [code delphi] // 9600:e,7,2 @00RD01000002*#13 procedure WriteCommand(cmd:string); begin cmd:=MakeFCS(cmd); FPortDevice.WriteStr(cmd #13); end; function MakeFcs(cmd: string): string; var l: Integer; q: Byte; star: Char; lengs: Integer; i: Integer; fcsd: string; begin l:=Length(cmd); star:=cmd[l]; lengs:=l-1; q:=0; for i:=1 to lengs do q:=ord(cmd[i]) xor q; fcsd:=IntToHex(q,2); if length(fcsd)=1 then fcsd:='0' fcsd; delete(cmd,l,1); Result:=cmd fcsd '*'; end; procedure WriteCh(addr:Integer;value:WORD); const cmd='@00WR0100F000*'; var send:string; address:string; hex:string; begin if assigned(FPortDevice) then if FPortDevice.Connected then begin FBusy:=True; FbGetIt:=False; FResponseLength:=8; FCommandType:=ctWriteCh; FResponseMsg:=''; // if addr>255 then exit; send:=cmd; FAddr:=Addr; address:=format('%0.4d',[addr]); send[6]:=address[1]; send[7]:=address[2]; send[8]:=address[3]; send[9]:=address[4]; hex:=IntToHex(value,4); send[10]:=hex[1]; send[11]:=hex[2]; send[12]:=hex[3]; send[13]:=hex[4]; WriteCommand(send); FAddr:=Addr; end; end; [/code] ===================引 用 chang1981 文 章=================== 各位前輩好~ 小弟最近寫了一個BCB程式, 希望能跟歐姆龍的CQM1系列PLC溝通, 該系列PLC的指令格式為 @ | 機台號碼 | head code | (要下的relay) | FCS |* | CR | 小弟手邊有一支同事用VB寫的測試程式可以成功連結 最後送出去的地方如下 Form1.MSComm1.Output = SXD$ Chr$(13) 其中SXD$跟我用BCB下的指令一模一樣,假設都是 @00WR0036000141* 而我的BCB也是使用MSComm1元件,參數的設定都檢查過跟PLC一致 問題來了.... 我實在是不知道C 要怎樣表現最後這個CR (VB-->Chr$(13)) 嘗試過很多方式如 @00WR0036000141*\r @00WR0036000141*\13 @00WR0036000141*\0xd @00WR0036000141*\\0xd PLC就是不理我(我另外一邊有開PLC程式軟體監控36號ch是否有被寫入) 只好上來向各位前輩求救~!!!! 請問各位前輩我最後這個送給MSComm1.Output的字串到底應該寫成怎樣呢?? 感謝!!!!!! |
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |