大家好,本人是plc新手,来询问一下如何使用SCL语言输出一个脉冲信号。
输入是一个普通的脉冲信号,比如M0.0, M0.1 ... M0.7,其中任意一个。外加两个BOOL信号,start和reset。
输出要是DWORD信号,QW地址,显示在数字输出(DI)卡上。每次分别显示在不同的LED上。从Q0.0到Q1.7,总共16个bit, 依次循环显示。
如下:
0000 0000 0000 0001
0000 0000 0000 0010
0000 0000 0000 0100
...
...
0100 0000 0000 0000
1000 0000 0000 0000
0000 0000 0000 0001
0000 0000 0000 0010
....
我使用了FOR语句加SHL语句,但是效果不是很好。
请问各位大神有没有好的建议,或者相关的编程信息。
多谢大家了!!
楼主最近还看过
FUNCTION_BLOCK FB8
VAR_INPUT
Takt: BOOL; // Takt-Signal input, such as M0.0 to M0.7
Start: BOOL;
Reset: BOOL;
END_VAR
VAR
Takt_old: BOOL;
BitNr : INT;
currTime: S5TIME;
biVal: WORD;
actFlag: BOOL;
END_VAR
VAR_TEMP
Word_Temp: WORD;
Key_Bit AT Word_Temp: ARRAY[0..15] OF BOOL;
END_VAR
VAR_OUTPUT
OutputWord: WORD; // Output assigns in QW Address
END_VAR
FOR BitNr:=0 TO 15 DO
IF Takt AND NOT Takt_old THEN // detect the rising edge of Takt Input
//Key_Bit[BitNr]: = Takt;
//OutputWord: = Word_Temp;
//currTime:=S_ODT (T_NO:=T10, S:=TRUE, TV:=T#1S,
// R:=FALSE; BI:=biVal,
// Q:=actFlag);
OutputWord := SHL(IN:=OutputWOrd, N:=1);
END_IF;
IF BitNr = 15 THEN
BitNr := 0;
END_IF;
END_FOR;
END_FUNCTION_BLOCK
以上是我的代码。但是如何执行
Key_Bit[BitNr]: = Takt;
和
currTime:=S_ODT (T_NO:=T10, S:=TRUE, TV:=T#1S,
R:=FALSE; BI:=biVal,
Q:=actFlag);
这两行代码呢—
多谢大家的指教!!
IF #start AND NOT #stop THEN
// Statement section
#run_status:=TRUE ;
ELSIF #stop THEN
#run_status:= FALSE;
END_IF;
IF NOT #run_status THEN
// Statement section IF
#lamp := 1;
#Word_temp := 1;
#word_temp2 := 1;
END_IF;
IF #Word_temp=16#800000 THEN
// Statement section IF
#Word_temp:=1 ;
END_IF;
#R_TRIG_Instance(CLK:=#clock,
Q=>#run_status_rise);
IF #run_status_rise AND #run_status THEN
// Statement section IF
#word_temp2:=SHL(IN:=#Word_temp, N:=1) ;
END_IF;
#Word_temp := #word_temp2;
#lamp := #Word_temp;