ST按钮点动控制灯的应用
//梯形图 内嵌ST框插入(Ctrl+B)
//ctrl+鼠标滚轮可以放大缩小画面
//键盘调到大写
//:=1; END_IF; 自动缩进功能
//IF M0=1 THEN
Y0:=1;
END_IF;
当 M0等于1时,Y0永久置1
//新建触摸屏
//位 点动 按下为1 松开为0
//F4编译 调试模拟
//启动触摸屏 模拟器启动
//没有安装GX Simulator?
可能是模拟器连接方法设置不匹配
工具→模拟器→设置→选择匹配的GX模拟器
转换+全部编译 编译输出错误 红色 少了英文;
图标 监视开始 监视停止 回到编辑状态
ST语言语法讲解
Y0:=1 :=是赋值语句 类似C语言== 梯形图SET Y0 置位
IF M0=1 THEN
Y4:=1;
ELSE
Y4:=0;
END_IF;

Y4:=M0; 直接对应赋值 好耶!(运算结果赋值给左边)
本节讲了if else语句应用 还有赋值语句:=


ST电机的启保停控制的应用
//启动保持停止(自锁 保持状态 置位 复位 SET RST)
//都是点动开关m0 m1 开、关 单独的
IF M0=1 THEN
Y0:=1;
END_IF;
IF M1=1 THEN
Y0:=0;
END_IF;
本节课结束

ST电机正反转控制应用
// 灯 中间继电器 交流接触器 控制电机启动保持停止
//Y0 Y1 电机正、反转 3个信号 两个输出才行
/*
m0 m1 m2
正 反 停
*/
IF M0=1 THEN
Y1:=0;
Y0:=1;
END_IF;
IF M1=1 THEN
Y0:=0;
Y1:=1;
END_IF;
IF M2=1 THEN
Y0:=0;
Y1:=0;
END_IF;
(互锁)
//另一种方式互锁 利用输出的方式 正转状态中 按反转无效 必须先按停止才能再按反转
//垃圾设计 应该自动化一些,在按反转中自动先停止(这里是不是应该加一下停止多久?)
//手动界面控制需要这么做 用输出作为并列条件
IF M0=1 AND Y1=0 THEN
Y0:=1;
END_IF;
IF M1=1 AND Y0=0 THEN
Y1:=1;
END_IF;
IF M2=1 THEN
Y0:=0;
Y1:=0;
END_IF;
(互锁 并列条件 满足它且满足它 and 且 C语言逻辑符号&&它 其余或非 || !=)
本节课结束 ~

ST语言程序注释
// (*程序段注释1*)
方便日后自己他人理解 (比如一个月后.. 必要说明文档
本节结束


ST定时器的应用
//定时器 T0 T1 T100... 定时范围不同
//通常使用100ms毫秒做定时
//自动化程序中不建议应用
(影响机器工作节拍,通常用传感器做信号.
不会说我按下按钮之后需默认10秒气缸完成动作
这个默认就慢了 应该使用传感器实时感知...)
//OUT 线圈输出指令 _ T Ctrl+F1 帮助!使能?
M0延时启动正转
/*
OUT_T( ?BOOL_EN? , ?BOOL_TCoil? , ?ANY16_TValue? );
OUT_T( M0 , TC0 , 30 );
OUT_T( 使能(梯形图计时器前常开触点) , 指定定时器线圈(TC0也就是T0线圈) , 指定定时时间(100毫秒定时器指定10 就是1s));
*/
//TC0是T0的线圈,TS0就是定时器T0的触点
//M0是外部触发定时器的线圈,TS0是定时器是否对外接通状态0与1
(* 定时器的使用 *)
OUT_T(M0,TC0,30);
IF TS0=1 THEN
Y0:=1;
ELSE
Y0:=0;
END_IF;
//按钮按住延时启动
//读取
//TC TS TN
//线圈 触点 当前值
(* 定时器的使用 *)
OUT_T(M0,TC0,30);
IF TS0=1 THEN
Y0:=1;
ELSE
Y0:=0;
END_IF;
D0:=TN0;
**定时器不能写在if循环?的里面(绝对不能)
(*定时器的使用*)
IF M0=1 THEN
Y0:=1;
END_IF;
OUT_T(Y0,TC0,20);
IF TS0=1 THEN
Y0:=0;
Y1:=1;
END_IF;
OUT_T(Y1,TC1,20);
IF TS1=1 THEN
Y1:=0;
Y0:=1;
END_IF;
IF M2=1 THEN
Y0:=0;
Y1:=0;
END_IF;
//定时器循环? 前一个的输出作为后一个的输入.
//间隔显示电路
时间继电器? 总之本节课完成!


ST任意设置定时器定时时间的应用
//常数20 2s 改成存储时间的地址D0...
**PLC初始上电的一瞬间 M8002 梯形图上电初始化一瞬间
**属于上电一瞬间特殊脉冲指令 特殊辅助续电器
(*定时器的使用*)
IF M0=1 THEN
Y0:=1;
END_IF;
OUT_T(Y0,TC0,D0);
IF TS0=1 THEN
Y0:=0;
Y1:=1;
END_IF;
OUT_T(Y1,TC1,D0);
IF TS1=1 THEN
Y1:=0;
Y0:=1;
END_IF;
IF M2=1 THEN
Y0:=0;
Y1:=0;
END_IF;
IF M8002=1 THEN
D0:=20;
END_IF;
//数值输入 bin_16 有符号16位
//因为T0是100ms单位定时器,所以输入监视控件要做一定数据运算
//监视$$/10 写入$W*10 在触摸屏软件内(组态软件内做)
//本应该出现2,为什么会出现数字1,因为在控件数据运算上面的选项移位不小心选中了**要注意
(*定时器的使用*)
IF M0=1 THEN
Y0:=1;
END_IF;
OUT_T(Y0,TC0,D0);
IF TS0=1 THEN
Y0:=0;
Y1:=1;
END_IF;
OUT_T(Y1,TC1,D0);
IF TS1=1 THEN
Y1:=0;
Y0:=1;
END_IF;
IF M2=1 THEN
Y0:=0;
Y1:=0;
END_IF;
IF M8002=1 THEN
D0:=20;
END_IF;
D1:=TN0;
D2:=TN1;
本节课讲了可以实时修改定时器值并实时监视定时器数值
本节课结束


ST计数器的应用
//计数器与定时器类似。。
//m0按下5次才可以启动Y0
OUT_T 定时器 OUT_C 计数器 Ctrl+F1 帮助(提示代码范式)
/*
OUT_C( ?BOOL_EN? , ?BOOL_CCoil? , ?ANY16_CValue? );
OUT_C(M0,CC0,5); (*M0线圈通电5次*)
OUT_C(使能,计数器C0,计数次数);
*/
//CS0 触点
**记住要复位C0 RST Ctrl+F1 帮助
RST(使能条件 1,清除 C0)
//使能条件可以写1,也就是任何时候都使能,
PLC一上电就执行
// 当前值 CN0
//上升沿点动触发..
OUT_C(M0,CC0,5); //M0上升沿计数直到条件满足5
Y0:=CS0;//计数器接通y0
D1:=CN0;//显示当前计数
RST(M2,C0); //M2按钮清零计数器当前值

OUT_C(M0,CC0,D0);
IF M8002=1 THEN
D0:=5;
END_IF;
Y0:=CS0;
D1:=CN0;
RST(M2,C0);
//普通计数器c0 c1 c2 我们是不会使用的???
//代替它 下节讲 本节结束


ST实际工程中的计数器实现
//实际项目中不会使用c0123这样的普通计数器
(实现一个加计数 会有CC0线圈 CS0触点 .
流程对 但复杂 通常用+1 -1 指令去做计数器 比C0方便)
//PLC参数→软软件设置→数据寄存器→锁存起始D200-511
锁存(掉电自动保存)
**指令 INC DEC
//减计数 加计数
INC( M0 , D200 );
DEC(M1,D200);
一个严重问题*一直按的话会一直计数+1/-1 传感器
INCP( M0 , D200 );
DECP(M1,D200);
//加个P将连续执行型改成脉冲执行型!!!
计数器清零 按钮计数清零
/* 工程中经常采用这种方式 无论梯形图 还是ST语言 */
INCP( M0 , D200 );
DECP(M1,D200);
IF M2=1 THEN
D200:=0;
END_IF;
下节讲解D0:=D0+1;这种公式算式方式
36727 (D200是16位存储器)
超过这个数值怎么去处理
DINCP( M0 , D200 );
DDECP(M1,D200);
//前面加D 选择一个double就可以了
本节结束

posted on 2023-04-10 09:40  ihoi  阅读(453)  评论(0编辑  收藏  举报