pc8mcu
級別: 探索解密
|
TON_1(IN:= NOT TON_1.Q ,PT:= TIME#1S ); (*定義一個1S定時器*) IF TON_1.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) D0 := D0 + 1; IF D0>10 THEN D0 := 0; END_IF; IF D0 := 2 THEN Y0:=FALSE; END_IF; IF D0:=8 THEN Y0:=TRUE; END_IF; END_IF; 以上ST語句編譯通過,但定時器似乎不起左右,因為在2,7控制Y0口不起作用,,麻煩幫看一下,在下先謝謝了,!! |
---|---|
|
tingfenghu
級別: 工控俠客
|
沒用過ST,用過其它編程語言,好像沒有這種寫法。 這種多條件選擇,是不是應該用if……else if, switch……case,這類寫法。 ST語言,這兩種寫法。 [attachment=141363] [attachment=141364] [ 此帖被tingfenghu在2015-11-10 23:25重新編輯 ] |
|
---|---|---|
|
pc8mcu
級別: 探索解密
|
沒錯,樓上將多情況跳轉用 CASE ,這有點像C, C++ 還是講清楚上問題,用的是GW-Work2 環境選的是 FX2 ST結構化語言 剛開始TON_1()系統出錯,后來在左邊原件FB-模塊中選TON 彈出對話框,進行注冊OK即可用上 可用上面語句了,,但定時器不起作用,啥原因,請教了 |
---|---|
|
cvlsam
富士低壓,POD(觸摸屏),PLC專賣
級別: VIP會員
|
IF D0 := 2 THEN Y0:=FALSE; END_IF; IF語句條件使用賦值語句,我也是醉了。 IF D0=2 THEN Y0:= FALSE; END_IF; Good Luck ~ |
---|---|
|
pc8mcu
級別: 探索解密
|
TON_1(IN:= NOT TON_1.Q ,PT:= TIME#1S ); (*定義一個1S定時器*) D0 := 0; IF TON_1.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) D0 := 1 - D0 ; CASE D0 OF 1: Y0:=TRUE; 0: Y0:=FALSE; END_CASE; END_IF; 太謝謝了,我試上一段語句,意思想讓Y0 在1S 內交替亮,滅, 程序執行了,亮就不見滅,,我想是不是系統執行了一次定時就退出了,,,謝謝 對我 ST語言的知道,,,,謝謝" cvlsam"老兄 |
---|---|
|
pc8mcu
級別: 探索解密
|
TON_1(IN:= NOT TON_1.Q ,PT:= TIME#5S ); (*定義一個1S定時器*) IF TON_1.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) Y0:=TRUE; END_IF; TON_2(IN:= NOT TON_2.Q ,PT:= TIME#5S ); (*定義一個1S定時器*) IF TON_2.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) Y1:=TRUE; END_IF; 又試驗上面一段ST代碼,,可以運行,,本來我的意思是想程序是順序執行的, Y0 先亮,,Y1后亮實際情況是,Y0,Y1同時定時亮。更說明定時器用完就完了,不能循環使用,如何才能循環定時呢?謝謝 |
---|---|
|
pc8mcu
級別: 探索解密
|
TON_1(IN:= NOT TON_1.Q ,PT:= TIME#1S ); (*定義一個1S定時器*) IF TON_1.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) D0 := D0 + 1; // ---------經過反復實驗- IF D0>10 THEN //----------- D0 := 0; //----------- END_IF; //----------該段無法時間,因為這段代碼只運行一次,,不能循環???? END_IF; |
---|---|
|
pc8mcu
級別: 探索解密
|
TON_1(IN:= NOT TON_1.Q ,PT:= TIME#1S ); (*定義一個1S定時器*) D0:=0; IF TON_1.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) D0:= D0+1; IF D0>4 THEN D0:=0; END_IF; CASE D0 OF 1: Y0:=TRUE; 2: Y0:=FALSE; END_CASE; END_IF; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TON_1(IN:= NOT TON_1.Q ,PT:= TIME#1S ); (*定義一個1S定時器*) IF TON_1.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) Y0:=TRUE; END_IF; TON_2(IN:= NOT TON_2.Q ,PT:= TIME#2S ); (*定義一個1S定時器*) IF TON_2.Q THEN (*定時時間到,D0++,D0大于10,那么清零*) Y0:=FALSE; END_IF; ================================================================= 上段不能實現Y0 隔1 秒亮, 滅一次, 而 下面一段實現了 Y0 反復的亮滅 ,實現了循環,,能看一下原因,講一下原理嗎??謝謝 |
---|---|
|