qq240559043
干就完了
級別: 略有小成
|
M0 :=(D0=1 AND NOT X5 AND X7 AND X8) OR D2=1 OR D5=1 OR D12 =1; IF M0= TRUE AND LDP(TRUE,M1) THEN D100 :=D100+1; END_IF; IF M0= TRUE AND LDP(TRUE,M2) THEN D101 :=D101+1; END_IF; IF M0= TRUE AND LDP(TRUE,M3) THEN D102 :=D102+1; END_IF; IF M0= TRUE AND LDP(TRUE,M4) THEN D103 :=D103+1; END_IF; IF M0= TRUE AND LDP(TRUE,M5) THEN D104 :=D104+1; END_IF; IF M0= TRUE AND LDP(TRUE,M6) THEN D105 :=D105+1; END_IF; IF M0= TRUE AND LDP(TRUE,M7) THEN D106 :=D106+1; END_IF; 其實我看出來你想說什么了,是我的會我會用標簽的布爾數組,要加的數據也是數組; 用FOR去寫就好了。我覺得你一定會用變址,因為你的思想已經被束縛了 |
---|---|
|
ayusecret
級別: 略有小成
|
拜托,你以為我給出的代碼是真實場景呀,能用一個If的情況下我為什么要寫那么多IF,而且你以為真實情況下是M4,M5,M6,M7情況下可以用For循環? 我的設想是用一個If帶后面所有上升沿,和梯形圖一樣,懂?我覺得你才是思想被束縛的人,能用IF盡量用IF |
---|---|
|
暴躁小白兔
級別: 探索解密
|
我咋記得說明書上提到過,ST文本中慎用脈沖信號,不保證準確性 |
---|---|
|
17625606414
級別: 家園常客
|
跟ST沒關系,跟怎么寫有關系 |
---|---|
|
ayusecret
級別: 略有小成
|
可能我對ST用法理解不到位,但你能幫忙分析下以下結果么,為啥M1 On,D0+1,M2,M3常On且不受指令影響可以強制On/Off. 這個寫法對應的梯形圖究竟是長啥樣的能幫忙寫下嗎 |
---|---|
|
烽火御龍天
級別: 略有小成
|
圖片:
剛剛測試了一下 可以這樣子寫呀 |
---|---|
本帖最近評分記錄: |
ayusecret
級別: 略有小成
|
不行,有問題,你把IF M0 THEN改成IF SM412 THEN,就知道你的值一直在加,和梯形圖的執行效果不一樣 |
---|---|
|
攻城獅老王
工控人一名,歡迎騷擾。
級別: 略有小成
|
可以用個布爾數組
|
---|---|
|
bnnyygy
bnnyygy
級別: 家園常客
|
通用寫法 IF ib_IN and vb_b=FALSE THEN 上升沿執行語句; END_IF; vb_b:=ib_IN; 以上就是取ib_IN的上升沿。 下降沿類似,理論上支持ST的PLC都可以通用。 |
---|---|
本帖最近評分記錄: |
ayusecret
級別: 略有小成
|
很遺憾,還是有問題。可以自己驗證下,D0還是會自增 代碼1: M0:=TRUE; ib_IN:=SM412; IF ib_IN AND vb_b=FALSE THEN IF LDP(SM400,M0) THEN INC(SM400,D0); END_IF; END_IF; vb_b:=ib_IN; 代碼2: M0:=TRUE; ib_IN:=SM412; IF ib_IN AND vb_b=FALSE THEN INC(LDP(SM400,M0),D0); END_IF; vb_b:=ib_IN; |
---|---|
|
bnnyygy
bnnyygy
級別: 家園常客
|
奧,不好意思,仔細看了一下,你是想在IF里面用 上升沿指令 LDP? 考慮通用性,一般我都用我那個通用寫法,不會用PLC自帶的 上升沿指令之類的。 只要支持ST,歐姆龍,西門子,匯川我用著目前好像沒發現什么問題,三菱感覺ST比較羸弱,所以很少使用,一般都是小工程用用FX系。 麻煩的程序邏輯還是建議用梯形圖,ST還是偏向數據處理計算。 |
---|---|
|