西门子 S7-200 SMART 库众多,除标准库外官方的其他库或第三方库都缺乏应用介绍,本文档对 S7-200 SMART 数据类型及库的使用做出介绍,希望可以方便使用
- 针对 S7-200 SMART V2.8+ 固件整理
- 所有内容均从公开资源获取,如果您刚好需要整理好的库,扫码打赏请作者喝杯柠檬水备注内容获取
1. 输入输出映象区
- I:数字量输入(DI),访问方法:I0.0-I31.7,共计32x8,最多256个DI
- Q:数字量输出(DO),访问方法:Q0.0-Q31.7 ,共计32x8,最多256个DQ
- AI:模拟量输入 ,访问方法:AIW0-AIW110,共计111个,只读
- AQ:模拟量输出,访问方法:AQW0-AQW110,共计111个,只写
无法为IO分配地址,只能自动分配,具体科通过双击目录树CPU查看
2. 数据存储区
- V 区,变量存储区,也是DB0;区域大小:VB0到VB8191,共计8192个,可通过位、字节、字、双字等访问,举例 VB0.0,VB0,VW0,VD0等,这些访问的是啥,看 数据访问排布
- M:位存储区,可以按位、字节、字或双字来存取M区数据,M0.0到M31.7
- T:定时器存储区,用于时间累计
- C:计数器存储区,用于累计其输入端脉冲电平由低到高的次数
- HC:高速计数器,独立于 CPU 的扫描周期对高速事件进行计数,高速计数器的当前值是只读值,仅可作为双字(32 位)来寻址
- AC:累加器,可以像存储器一样使用的读/写器件,可以按字节、字或双字访问累加器中的数据
- SM:特殊存储器,提供了在 CPU 和用户程序之间传递信息的一种方法。 可以使用这些位来选择和控制 CPU 的某些特殊功能, 可以按位、字节、字或双字访问 SM 位 ,SM0.0到SM1699.7
- L:局部存储区,用于向子例程传递形式参数,LB0到LB63
- S:顺序控制继电器,用于将机器或步骤组织到等效的程序段中,实现控制程序的逻辑分段。 可以按位、字节、字或双字访问 S 存储器
3. 数据访问排布
可以看出,VW100包括VB100和VB101;VD100包括VW100和VW102,即VB100,VB101,VB102,VB103这4个字节。这些地址是互相交叠的。当涉及到多字节组合寻址时,遵循“高地址,低字节”的规律。
4. 数据类型
S7-200 SMART 没有数据类型的概念,只有存储区的概念;无法通过声明变量及数据类型的方式去指定数据类型及运算方法。如VD0 + VD4 = VD8,既可以是浮点数做加法,也可以是双整数做加法,指令不管结果,需要编程人员保证,建议在所有变量前面绑定前缀,以清晰运算过程,防止错误调用
S7-200 SMART 没有 double 双精度数据表示和处理方法,只能将其转化为单精度数据再做各类运算
5. 间接寻址
间接寻址是指用指针来访问存储区的数据。指针以双字的形式存储其它存储区的地址,只能将 V 存储单元、L 存储单元或累加器寄存器(AC1、AC2、AC3)用作指针。S7-200 SMART CPU 允许指针访问下列存储区: I、Q、V、M、S、AI、AQ、SM、T(仅限当前值)和 C(仅限当前值)。不能使用间接寻址访问单个位或访问 HC、L 或累加器存储区。
要创建指针,必须使用“移动双字”指令,将间接寻址的存储单元地址移至指针位置。;用“&”符号加上要访问的存储区地址可建立一个指针,当指令中的操作数是指针时,应该在操作数前加上“*”号。
0. 位运算
- 输入:与、或、非(NOT), 能流上升沿和下降沿(上下沿共计1024个),自带的上升沿、下降沿数量有限,且无法在子程序中调用(原因请参考 SMART200 Easyplus 子程序调用常温问题),如果子程序需要上升沿,则推荐使用 LGF_EdgeDetector.
- LGF_PositiveEdge,检测上升沿,需要提供历史存储位
- LGF_NegativeEdge,检测下升沿,需要提供历史存储位
- 输出:线圈、线圈取反、复位、置位、RS/SR,ALT/ALTP 交替取反指令
- 字取反,对于INV_B/W/D对字节、字、双字取反
- 字AND/OR/XOR/NAND/NOR/NXOR 与、或、异或、与非、或非、同或
- 位移:SHL_B/W/DW 左移N个位,SHR_B/W/DW 右移N个位
- 循环位移:ROL_B/W/DW 循环左移N个位,ROR_B/W/DW 右移N个位
- 交换:SWAP,用于交换字 IN 的最高有效字节和最低有效字节
- ENCO编码和DECO解码,将整数与与位字节的最低位进行映射,只能处理8位整数
- 复杂的多位连锁信号,LBC_InterLock8,对于给定的8个输入,指定7个运算(1 与,2 与非,3 或非,4 或),生成逻辑输出信号
1. 比较运算
比较指令可以对两个数据类型相同的数值进行比较。您可以比较字节、整数、双整数和实数。
对于不同数据类型,在比较符后面加比较的数据类型,除此以外,其他数据类型无法比较
- B 无符号短整数
- W 有符号整数
- D 有符号双整数
- R有符号实数
- S 字符串
如:==B,<>W,>R
2. 赋值与转换运算
- 数值传送,根据数据长度不同分为,MOV_B、MOV_W、MOV_DW、MOV_R 传送字节、字、双字和实数,而不会更改源存储单元中存储的值
- 批量传送,根据数据长度不同分为,BLKMOV_B、BLKMOV_W、BLKMOV_DW 传送 N 个字节、字、双字,而不会更改源存储单元中存储的值,N 取值范围是 1 到 255
- 数值类型转换操作,
- B_I/I_B, 8位整数与16位整数之间转换
- I_DI/DI_I,16为整数与32位整数之间转换
- DI_R/ROUND/TRUNC,32位整数与32位浮点数之间转换,包括四舍五入和截断转换
- DF_R,64位浮点数到32位浮点数转换,只为让PLC可以处理该部分数据
- BCD_I/I_BCD/BCD_DI/DI_BCD, bcd格式到16位和32位整数之间的转换
- 数值与字符及字符串之间的转换
- ATH/HTA, 这两个指令可以将8位数字与ASCII 字符之间转换,且为批量转换
- ITA, 将16位整数转换为 ASCII 字符
- DTA, 将32位整数转换为 ASCII 字符
- RTA,将32位浮点数转换为 ASCII 字符
- I_S/S_I,I_S 将16位整数转换为字符串
- DI_S/S_DI,DI_S 将32位整数转换为字符串
- R_S/S_R,R_S 将32位浮点数转换为字符串
- MUX 多路复用
- LBC_MUX,基于S1,S2两个位,输出4路信号
- OF_RampFuncton,斜坡跟随,给定一个输入,输出会从min斜坡跟随到输入值结束
- OF_ConditionalRamp,条件斜坡,给定一个输入,输出会按照节奏跟随输入,直到相等,推荐去掉上一个
- 温度压力补偿 LBC_FlowCompensation,测量气体流量时,实测温度、压力与设计温度、压力不相符时,修正
3. 数学运算
- 加法:ADD_I/DI/R 16位/32位/浮点加法
- 递增:INC_B/W/DW 字节、字、双字递增
- 减法:SUB_I/DI/R 16位/32位/浮点减法
- 递减:DEC_B/W/DW 字节、字、双字递减
- 乘法:MUL_I/DI/R 16位/32位/浮点乘法
- 除法:DIV_I/DI/R 16位/32位/浮点除法
- MUL:两个整数的整数乘法指令将两个 16 位整数相乘,产生一个 32 位乘积
- DIV:带余数的整数除法指令将两个 16 位整数相除,产生一个 32 位结果,该结 果包括一个 16 位的余数(最高有效字)和一个 16 位的商(最低有效字)
- 实数求余数,OF_MOD_R,计算两个实数相除的商和余数
- 绝对值:ABS_I/DI/R,对输入 IN 处指定的值取绝对值,并将结果加载到存储器位置 OUT
- SIN/COS/TAN/ARC_SIN/ARC_COS/ARC_TAN,以弧度计算,数据类型只能是实数
- LN/EXP 求自然数的对数和指数
- SQRT 求平方根
- S_ITR/S_RTR/S_RTI 缩放操作,将浮点数映射到某个整数范围或反之
- LBC_SC_ITR/RTR/RTI 带有警告的模拟信号缩放操作
- LBC_DigitalSignal 带有保护的数字量处理库
- CTU/CTD 上升沿加计数和减计数,直到PV或0,CTUD 混合计数,直到PV
- LBC_ScopeLimit_Byte/Int/Dint/Real,限定输出值
- 随机数 RAND_B/I/DI/R 在指定范围内,生成随机数
- 低通滤波器 LPF,y(n) = cof*y(n-1) + (1-cof)x(n) ,参数N用于指定那个低通滤波器,防止输入突变很有效
- 多项式滤波 OF_PolyomSmooth,由于高频干扰的存在,采样到的数据曲线多为折线形状。为消除或者减弱干扰的影响,需要对采样数据进行平滑处理
- 平均值滤波,OF_FloatAve,求N个值的均值做出输出
- LBC_SinGenr 正弦波发生器
- PID 使用,PID向导组态
4. 数组运算
4.1 数组
数组就是普通的一维数组
- 取最大值/最小值,MIN_MAX_B/I/DI/R 求给定数组的最大值和最小值。 给定起始地址和长度,指令比较可用输入的值,然后将最小值和最大值的值及索引写入 MinValue, MinValueIndex, MaxValue 和MaxValueIndex 的输出,如果数组中有多个最小值或最大值,则会输出第一个最小值或最大值的索引号。数组的索引从 0 开始。
- 求算术平均值,AVG_B/I/DI/R,计算给定数组的平均值,并将其写入到 OUT 输出
- 冒泡排序,SORT_B/I/DI/R,排序给定一维数组,并写入到输出;Mode,0:按升序排序;1:按降序排序;
4.2 表
S7-200 SMART PLC中的表 TBL,是系统定义的一个特殊数据类型,一个TBL由表容量,数据长度,数据构成,数据类型必须是 WORD。一个容量为6的表格排布如下。
- 表头的TL,最大容量必须手工先行指定,再调用;数据长度EC,由系统管理,初始值应当为0;
- AD_T_TBL,添加一条数据到表格中,DATA 指向要添加的数据值,TBL指向表
- FIFO,先进先出指令将表中的最早(或第一个)条目移动到输出存储器地址,具体操作是移走指定表格 (TBL) 中的第一个条目并将该值移动到 DATA 指定的位置。 表格中的所有其它条目向上移动一个位置。 每次执行 FIFO 指令时,表中的条目计数值减 1。
- LIFO,后进先出指令将表中的最新(或最后一个)条目移动到输出存储器地址,具体操作是移走表格 (TBL) 中的最后一个条目并将该值移动到 DATA 指定的位置。 每次执行 LIFO 指令时,表中的条目计数值减 1。
- FILL_N,存储器填充指令使用地址 IN 中存储的字值填充从地址 OUT 开始的 N 个连续字。N 取值范围是 1 到 255。
- TBL_FIND,查表指令在表格中搜索与搜索条件匹配的数据。TBL 表的 EC 开始的地址,PTN 搜索的数据值,INDX 索引地址,CMD 1 = 相等 (=),2 = 不相等 (<>),3 = 小于 (<),4 = 大于 (>)
表可以求数值滑动平均,求序列斜率等
5. 通讯
- PUT/GET 通过以太网连接在 S7‑200 SMART CPU 之间进行通信,程序中可以有任意数量的 GET 和 PUT 指令,但在同一时间最多只能激活共 16 个 GET 或 PUT 指令。
- Modbus RTU 从站/Modbus TCP 服务器,通过库Modbus从站,可以访问CPU所有位置的数据,其对应关系如下
- 00001 至 09216 是映射到 Q0.0 至 Q1151.7 的离散量输出。
- 10001 至 19216 是映射到 I0.0 至 I1151.7 的离散量输入。
- 30001 至 30056 是映射到 AIW0 - AIW110 的模拟量输入寄存器。
- 40001 至 49999 和 至 是映射到 V 存储器的保持寄存器。
RTU 从站要使用MBUS_INIT初始化,配置数据区,然后插入MBUS_SLAVE 指令
- Modbus RTU 主站通讯,分为 4 步走(1)插入MBUS_CTRL/MB_CTRL2 指令初始化通讯参数;(2)分配Modbus库所需的V存储器地址 (3)插入一条或多条 MBUS_MSG / MB_MSG2 通讯指令,(4)硬件连接及测试
- 初始化 MBUS_CTRL/MB_CTRL2 指令,模式:1Modbus,0PPI,奇偶校验:0无 1奇2偶,端口:0本体RS485,1信号版,超时时间,ms
- 通讯 MBUS_MSG/MB_MSG2,通过first上升沿来控制N条MSG指令中某一条生效
- Modbus RTU 主站符号表,符号mModbusRetries 可以控制通讯出错的重试次数
- Modbus RTU 主站符号表,符号mModbusForceMulti 控制强制用多寄存器指令
- MBUS_CLIENT 主站符号表,符号mModbus_Unit_ID 控制从站地址
- MBUS_CLIENT 主站符号表,符号mBlocked_Proc_Timeout 控制连接时间
- MBUS_CLIENT 主站符号表,符号mReceiveTimeout控制超时时间
- MBUS_CLIENT 主站符号表,符号mConnected显示连接状态
- MBUS_CLIENT 主站符号表,符号mRetries 控制重试次数
- ModbusQueue,该程序库实现了 Modbus 轮询队列的产生,可以产生两种独立的队列,读队列和写队列,并可以根据需要实时操作写队列,也可以实现当设定值改变时实时写入的功
能。可以控制32个Modbus读写指令
6. 程序控制
- FOR-NEXT 循环,FOR 指令执行 FOR 和 NEXT 指令之间的指令。 需要分配索引值或当前循环计数 INDX、起始循环计数 INIT 和结束循环计数 FINAL
- JMP 跳转,可在主程序、子例程或中断例程中使用 JMP(跳转)指令。 JMP 及其对应的 LBL(标号)指令必须位于与主程序、子例程或中断例程相同的代码段中
- SCR 顺序控制, 就是一组特殊得标记和S寄存器,用来控制程序执行顺序,可以用普通程序替代
- 子程序,SBR_N 调用子程序,子程序可有0-16个参数,多大8个嵌套;子程序返回 RET
7. 定时器
- TON,接通延时定时器用于测定单独的时间间隔
- TONR,保持型接通延时定时器用于累积多个定时时间间隔的时间值
- TOF, 断开延时定时器用于在 OFF(或 FALSE)条件之后延长一定时间间隔,例如冷却电机的延时。
- 测量某个状态时间间隔 BGN_ITIME/CAL_ITIME
8. 系统
8.1 日期与时钟
- READ_RTC,读取实时时钟指令从 CPU 读取当前时间和日期,并将其装载到从字节地址 T 开始的 8 字节时间缓冲区中,存储格式为BCD码
- SET_RTC,设置实时时钟指令通过由 T 分配的 8 字节时间缓冲区数据将新的时间和日期写入到 CPU,设置格式为存储格式为BCD码
- OF_Clock_Integer 以十进制整数格式读写日期和时间
- READ_RTC_I 十进制格式的 PLC 时钟被保存在以此地址为起始地址的 8 个字节中
- SET_RTC_I 以十进制整数格式存储的日期时间设定为 PLC 时钟
- OF_SunVector 一个计算太阳位置的库
- sunPos_Calculation 用来计算太阳位置及日出日落时间
- OF_SunriseSunSet 一个计算日出日落的库
- SunriseSunSet_Time,比上面更直接的计算日出和日落时间
- LGF_ DateCaculator,用来计算日期或日期差的库
- LGF_DateDays,计算某一天是当年的第一天,从当年1月1日开始,并指示是否闰年
- LGF_DateDiff,计算两个日期之间的天数差
- LGF_Date em Sum,该库可以计算初始日期和当前日期之间的天数
8.2 CPU控制
- END ,有条件 END 指令基于前一逻辑条件终止当前扫描,相当于return,但是只能在主程序用
- STOP,有条件 STOP 指令通过将 CPU 从 RUN 模式切换到 STOP 模式来终止程序的执行。
- WDR,看门狗复位指令触发系统看门狗定时器,并将完成扫描的允许时间(看门狗超时错误出现之前)加 500 毫秒
- LBC_AvgScanTime,该库使用平均值求每 0.5s 内的扫描次数以得出平均扫描用时
9. 运控控制
请参考《S7-200 SMART EPOS 指令库应用》
10. 设备控制
10. 1 过程控制
- 设备顺序启停,LBC_MotFirstStartFirstStop/LBC_MotFirstStartLastStop 顺序启停,可以无状态管理一组风机或水泵的启停
- 多泵轮换,OF_MultiPumpSwitchover
10.2 对象控制
- 两位执行器,LBC_TwoWayActuator 两位执行器,具有报警检测的两位执行器
- 三位执行器,LBC_ThreeWayActuator 三位控制器,具有报警检测的三位执行器
- 双手操纵,LBC_TwoHandControl 双手操作,两个输入信号同时作用生效
- 电机启停及正反转控制,OF_MotorControl, LGF_Motor/PosRev_Motor,可以实现单台电机的远程、自动、故障、连锁等常规功能,推荐
- OF_MotorBasicControl
- 星三角电机程序,OF_StartDeltaStarter,实现星三角的PLC控制
- 正反转控制,OF_Cw_CCw_Control,实现正反转控制,与上面的库类似
扫码打赏,获取全部资源
到此这篇plc200指令表与解释(plc200指令大全)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/kjbd-jg/11541.html