S7-1200 设计紧凑、组态灵活,TIA在库函数中嵌套了Modbus-RTU 和Modbus-TCP功能库,在做数据采集的项目中是非常好用的。
做过一个换热站设备运行监测的项目,需采集管网一次侧和二次侧的供水压力、温度以及ABB变频器的工作状态。现场各类变送器已经接到了原有的智能仪表上,因此采用1200plc通过MODBUS-RTU 与现场智能仪表和变频器通信是比较经济的方案,并且可通过MODBUS-TCP与远程上位机通信。<?XML:NAMESPACE PREFIX = O />
智能仪表及变频器作为从站,只需在设定中选择Modbus-RTU通信协议并且为设备分配不重复的站地址即可。1200 PLC作为主站必须配备RS485通信模块,其通信的基本原理是:首先程序开始运行时,调用一次Modbus库中的功能块MB_COMM_LOAD来组态RS485模块上的端口;其次调用库中的功能块MB_MASTER作为Modbus主站与设备进行通信。
1200PLC作为主站通信是由DATA_ADDR(从站中的起始Modbus地址)和MODE(读、写、诊断模式)参数一起确定实际Modbus消息中使用的功能代码。DATA_PTR(数据指针)指向要写入或读取的数据的CPU DB地址,该DB必须为“非仅符号访问”DB类型。在TIA V12以上平台中,将该DB属性中的“优化的块访问”选项取消。
PLC主站发送带有站地址标识的数据来寻址不同的从站,同时不同的从站通过响应带有站地址标识的数据给主站,以完成整个通信过程。这种轮询通信,可以根据发送和接收完成的标志来完成,也可以以固定的时间间隔进行轮询,实际应用时需要考虑CPU的性能以及轮循Modbus子站时间。程序编好后先用MODBUS调试工具测试一下,正常后再开始接线。
在接线时遇到一个小插曲:PLC及变频器的485接线端子B为正,A为负,很多厂家仪表的485接线端子是A为正,B为负,一开始通信始终不正常,当查看仪表说明书时才发现。
项目中我使用的是Modbus-TCP通过PLC上PN接口与上位机进行通信,Modbus-TCP使用开放式用户通信连接作为Modbus通信路径。在S7-1200 PLC的库函数中嵌套了Modbus-TCP功能块库, 它包含了Server 和Client的库函数, 编程时可以直接调用该库函数可实现与上位机的Modbus-TCP通信。
在该系统应用中S7-1200 PLC作为 Modbus Tcp Server (服务器),调用 “MB_SERVER”指令处理Modbus-TCP客户机的连接请求、接收Modbus功能的请求并发送响应,设置连接ID、IP端口等参数,使用起来比较简单。
S7-1200 PLC作为网络的服务器端,上位机可以按需建立连接访问PLC的数据区,这样在上位机对多个换热站的PLC连接中不会占用太多的资源。前提是PLC必需要有固定的IP才行,如果是动态拨号连接上位机,PLC端就需要作为客户端,通过修改MODE管脚的值改变发送或接收状态,按照主机的请求来按需向主机发送数据或主动接收主机的改写数据就比较麻烦了。
这是我在MODBUS通信协议项目应用中的一点小体会,一些观点或许过于幼稚,望各位同行多我指正,仅以此文起到抛砖引玉的作用。
plc发展到,已经有多种类型,而且功能也不尽相同。按照I/O点容量的多少可以将PLC分为三类:小型机、中型机、大型机。
1.小型机(含微型机),一般以处理开关量逻辑控制为主,其I/O点一般在128点以下,现在小型机还具有较强的通信能力和一定量的模拟量处理能力,这类PLC的特点是价格低廉、体积小巧,适合于控制单机设备和开发机电一体化产品。
2.中型机,一般I/O点数在128~2048点之间,不仅具有极强的开关量逻辑控制功能,而其他的通信联网功能和模拟量处理能力更强大。中型机的指令比小型机更丰富,中型机适用于复杂的逻辑控制系统以及连续生产线的过程控制场合。
3.大型机的I/O点数在2048点以上,具有计算、控制和调节功能,还具有强大的网络结构和通信联网能力,有些大型PLC还具有冗余功能。它的监视系统能够表示过程的动态流程,记录各种曲线,PID调节参数等,并配备多种智能板,构成多功能的控制系统。大型机适用于设备自动化控制,过程自动化控制和进程监控系统
以上内容摘自王永华先生《现代电气控制及PLC应用技术》北京航天航空出版社
4.在西门子工程师崔坚先生《西门子S7可编程序控制器--STEP7编程指南》机械工业出版社
里面对S7系列PLC介绍是:
S7-200系列是小型PLC系统,具有串行连接的模块化扩展功能,针对低性能的控制系统使用,适合大输入、输出点100左右的控制应用。
S7-300系列是中型PLC系统,具有模块化扩展功能,多可以扩展32个模块,适合大输入、输出点1000左右的控制应用。
S7-400系列是大型PLC系统,具有模块化扩展功能,可以扩展300多个模块,可以连接数万点输入、输出信号的控制应用。
5.以上小型、中型、大型等PLC,没有一个十分严格的界限,上面所提二个教材也称得上是官方的资料啦,也许楼主也曾看过,其实没有非常明确的划分。现在随着PLC技术的飞速发展某些小型PLC也具有中型或大型PLC的功能,比如通信功能,利用二个或多个PLC组网的方案,完全能够跨越上述I/O点数限制,这也是PLC的发展趋势。
1.S7-200系列是小型PLC系统,具有串行连接的模块化扩展功能,针对低性能的控制系统使用,适合大输入、输出点100左右的控制应用。
S7-300系列是中型PLC系统,具有模块化扩展功能,多可以扩展32个模块,适合大输入、输出点1000左右的控制应用。
S7-400系列是大型PLC系统,具有模块化扩展功能,可以扩展300多个模块,可以连接数万点输入、输出信号的控制应用。
2.即使强的CPU226PLC多只能带 7 个扩展模块,但CPU226PLC的总点数不能超过128 DI/128 DO,32 AI/32 AO,及所有扩展模块的5V电源消耗之和不能超过该CPU提供的电源额定。虽然现在新出品数字量64I/O点的模块,并不意味着多加此种模块可以扩大 S7-200 的大 I/O 点数。只可以改善因CPU连接的扩展模块个数受限而造成的I/O点受限的情况。这样减少了数字量I/O模块的个数,就可以腾出模块位置给其它扩展模块来使用。
3.虽然有时我们可以选用二个或多个200PLC组网的方案,通常使用PPI进行主从通信,S7-200支持网络读和网络写进行PLC之间的数据交换,但每条网络读写指令多能够读或者写16个字节的数据,每个CPU内多只能有8条网络读写指令同时激活,而对于高187.5K通信速率来说,要想实现900个多点通信,这样是完全不可能实现的。
1、即写操作
关于当即写(Immediat Write)功能,必需如下面举例所示,生成符号程序段。关于有时间约束的运用,能够以比每OB1扫描循环一次的正常状况快的速度,将一个数字量输出的当前状况发送到输出模板。当即写功用能够在扫描当即写逻辑程序级的一起,将一个数字量输出写入输出模板。不然,当 Q存储区运用 P存储状况更新时,必需等到下一OB1扫描循环完毕。
为了将一个输出当即写入输出模板,应运用外围输出(PQ存储区,而不运用输出(Q存储区。外围输出存储区能够作为一个字节、一个字或一个双字读取。因而,经过一个线圈元素,不能更新一个独自的数字量输出。为了将一个数字量输出的状况当即写入输出模板,包含有关位的Q存储器的字节、字或双字能够有条件地复制到相应的PQ存储器中 直接输出TPC1062K模板地址)
当心,因为 Q存储器的整个字节被写入输出模板,当进行当即输出时,该字节中的一切输出位都将被更新。
假如一个输出位在不该发送到输出模板中的整个程序中呈现中间状态(1/0当即写功用会造成危险状况(输出瞬时脉冲)
2、防治脉冲丢失
作为通常规划规矩,一个MT6100I程序中,外部输出模板只能认为是一个线圈。假如恪守该规划规矩,能够避免运用当即输出时的大多数潜在疑问。
1用高速计数器功用收集,只需保证高速计数高作业频率高于脉冲频率,就不会丢掉脉冲。
2用守时中止及脉冲收集子程序收集,只需保证收集时刻距离小于脉冲频率的倒数就不会丢掉脉冲。
3如果中止(有中止功用的输入)及脉冲收集子程序收集,也要保证中止响应速度足够快,才不会丢掉脉冲。
4假如脉冲频率不高,如每20次/s以下,通常的输入点直接进行收集,疑问也不大。
数据通过网络传输的速度是波特率,其单位通常是Kbaud或者Mbaud。波特率是指在给定时间内传输的数据是多少。例如,19.2Kbaud表示的1秒内传输19200位数据。在同一个网络中通讯的器件必须被配置成相同的波特率,网络的高波特率取决于连接在该网络上的波特率低的设备。
表1 S7-200支持的波特率
在网络中要为每一个设备指定一个唯一的地址. 唯一的地址可以确保数据发送到正确的设备或者来自正确的设备。S7-200支持的网络地址为0到126。对于有两个通讯口的S7-200,每一个通讯口可以有自己的站地址。
表2 S7-200设备的缺省地址
S7-1200 设计紧凑、组态灵活,TIA在库函数中嵌套了Modbus-RTU 和Modbus-TCP功能库,在做数据采集的项目中是非常好用的。
做过一个换热站设备运行监测的项目,需采集管网一次侧和二次侧的供水压力、温度以及ABB变频器的工作状态。现场各类变送器已经接到了原有的智能仪表上,因此采用1200plc通过MODBUS-RTU 与现场智能仪表和变频器通信是比较经济的方案,并且可通过MODBUS-TCP与远程上位机通信。<?XML:NAMESPACE PREFIX = O />
智能仪表及变频器作为从站,只需在设定中选择Modbus-RTU通信协议并且为设备分配不重复的站地址即可。1200 PLC作为主站必须配备RS485通信模块,其通信的基本原理是:首先程序开始运行时,调用一次Modbus库中的功能块MB_COMM_LOAD来组态RS485模块上的端口;其次调用库中的功能块MB_MASTER作为Modbus主站与设备进行通信。
1200PLC作为主站通信是由DATA_ADDR(从站中的起始Modbus地址)和MODE(读、写、诊断模式)参数一起确定实际Modbus消息中使用的功能代码。DATA_PTR(数据指针)指向要写入或读取的数据的CPU DB地址,该DB必须为“非仅符号访问”DB类型。在TIA V12以上平台中,将该DB属性中的“优化的块访问”选项取消。
PLC主站发送带有站地址标识的数据来寻址不同的从站,同时不同的从站通过响应带有站地址标识的数据给主站,以完成整个通信过程。这种轮询通信,可以根据发送和接收完成的标志来完成,也可以以固定的时间间隔进行轮询,实际应用时需要考虑CPU的性能以及轮循Modbus子站时间。程序编好后先用MODBUS调试工具测试一下,正常后再开始接线。
在接线时遇到一个小插曲:PLC及变频器的485接线端子B为正,A为负,很多厂家仪表的485接线端子是A为正,B为负,一开始通信始终不正常,当查看仪表说明书时才发现。
项目中我使用的是Modbus-TCP通过PLC上PN接口与上位机进行通信,Modbus-TCP使用开放式用户通信连接作为Modbus通信路径。在S7-1200 PLC的库函数中嵌套了Modbus-TCP功能块库, 它包含了Server 和Client的库函数, 编程时可以直接调用该库函数可实现与上位机的Modbus-TCP通信。
在该系统应用中S7-1200 PLC作为 Modbus Tcp Server (服务器),调用 “MB_SERVER”指令处理Modbus-TCP客户机的连接请求、接收Modbus功能的请求并发送响应,设置连接ID、IP端口等参数,使用起来比较简单。
S7-1200 PLC作为网络的服务器端,上位机可以按需建立连接访问PLC的数据区,这样在上位机对多个换热站的PLC连接中不会占用太多的资源。前提是PLC必需要有固定的IP才行,如果是动态拨号连接上位机,PLC端就需要作为客户端,通过修改MODE管脚的值改变发送或接收状态,按照主机的请求来按需向主机发送数据或主动接收主机的改写数据就比较麻烦了。
这是我在MODBUS通信协议项目应用中的一点小体会,一些观点或许过于幼稚,望各位同行多我指正,仅以此文起到抛砖引玉的作用
通常情况下WORD用于逻辑运算,INT用于数*算;
在使用梯形图或SCL等语言编程时区分较严格。
在使用语句表编程时系统不检测数据类型是否匹配,即WORD与INT在用法上没有什么区别(WORD可做数*算,INT也可作逻辑运算)。
PIW是一个16位数,系统默认为WORD数据类型,可在符号表中定义为INT数据类型;
通常情况下WORD用于逻辑运算,INT用于数*算;
在使用梯形图或SCL等语言编程时区分较严格
在使用语句表编程时系统不检测数据类型是否匹配,即WORD与INT在用法上没有什么区别(WORD可做数*算,INT也可作逻辑运算)什么区别(WORD可做数*算,INT也可作逻辑运算)。对于INT和WORD来说 其实它们都是16位的数据类型
如果你确实要转换的话,直接用MOVE即可
WORD数据长度为16位,这种数据可采用4种方法进行描述。
二进制:二进制的格式为2#,如2#101,取值范围为2#0~2#1111_1111_1111_1111,书写时每4位可用下划线隔开,也可直接表示为2#111111111111。
十六进制:十六进制的格式为W#16#,W代表WORD,表示数据长度为16位,#16#表示十六进制,数据取值范围为W#16#0~W#16#FFFF。
BCD码:BCD码的格式为C#,取值范围为C#0~C#999。BCD码是用4位二进制表示1位十进制数,4位二进制中的0000~1001组合分别表示十进制中的0~9,4位二进制中的1010~1111组合放弃不用。BCD码的高4位用来表示符号,十六位BCD码的取值范围为-999~+999。在STEP7的数据格式中,BCD码的取值只取正值,与高4位的符号无关。
无符号十进制数:无符号十进制数的格式为B#(×,×),取值范围为B#(0,0)~B#(255,255),无符号十进制数是用十进制的0~255对应二进制数中的0000_0000~1111_1111(8位),16位二进制数就需要两个0~255的数来表示,例如:
B#(12,254)=2#0000_1100_1111_1110
12 254
上面4种数据都是描述一个长度位16位的二进制数,无论你使用哪种方式都可以。例如,如果想得到二进制数0000100110000111,可以使用2#0000_1001_1000_0111,也可以使用W#16#987,还可以使用C#987或者B#(9,135)。在STEP7中,比较常用的是十六进制,即W#16#这种格式。
整INT数据类型长度为16位,数据格式为带符号十进制数,16位中高为符号位。正整数是以原码格式进行存储的,如+786,对应的二进制码为2#0000_0011_0001_0010,而负整数则表示为正整数的二进制补码,即对应正整数的二进制码取反后加1,例如负整数-786,对应的二进制码为2#1111_1100_1110_1110。将负零(1000_0000_0000_0000)定义为-32768因此取值范围为-32768~32767。0表示正,1表示负。
1.某些国外的小型plc的程序结构
这些PLC的用户程序由主程序、子程序和中断程序组成。在每一个扫描循环周期,CPU都要调用一次主程序。主程序可以调用子程序,小型控制系统可以只有主程序。中断程序用于快速响应中断事件。在中断事件发生时,CPU将停止执行当时正在处理的程序或任务,去执行用户编写的中断程序。执行完中断程序后,继续执行被暂停执行的程序或任务。它们的子程序和中断程序没有局部变量,子程序没有输入、输出参数。
2.西门子的S7-200的程序结构
过程映像输入/输出(I/Q)、变量存储器V、内部存储器位M、定时器T、计数器C等属于全局变量。S7-200的程序组织单元(ProgramOrganizationalUnit,简称为POU)包括主程序、子程序和中断程序。每个POU均有自己的64字节局部变量,局部变量只能在它所在的POU中使用。与此相反,全局变量可以在各POU中使用。
下面是子程序可以使用的局部变量:
1)TEMP(临时变量)是暂时保存在局部数据区中的变量。只有在执行该POU时,定义的临时变量才被使用,POU执行完后,不再保存临时变量的数值。
2)IN是由调用它的POU提供的输入参数。
3)OUT是返回给调用它的POU的输出参数(子程序的执行结果)。
4)IN_OUT是输入_输出参数,其初始值由调用它的POU传送给子程序,并用同一变量将子程序的执行结果返回给调用它的POU。
主程序和中断程序的局部变量中只有临时变量TEMP。
具有输入、输出参数和局部变量的子程序易于实现结构化编程,对于长期生产同类设备或生产线的厂家尤为有用。这些厂家的编程人员为设备的各组件或工艺功能编写了大量的通用的子程序。即使不知道子程序的内部代码,只要知道子程序的功能和输入、输出参数的意义,就可以通过程序之间的调用快速“组装”出满足不同用户要求的控制程序。就好像用数字集成电路芯片组成复杂的数字电路一样。
子程序如果没有输入、输出参数,它和调用它的程序之间没有清晰的接口,很难实现结构化编程。
子程序如果没有局部变量,它和调用它的程序之间只能通过全局变量来交换数据,子程序内部也只能使用全局变量。将子程序和中断程序移植到别的项目时,需要重新统一安排它们使用的全局变量,以保证不会出现地址冲突。当程序很复杂,子程序和中断程序很多时,这种重新分配地址的工作量非常大。
如果子程序和中断程序有局部变量,并且它们内部只使用局部变量,不使用全局变量,因为与其他POU没有地址冲突,不需作任何改动,就可以将子程序移植到别的项目中去。
3.西门子的S7-300/400的程序结构
S7-300/400将子程序分为功能(Function,或称为函数)和功能块(FunctionBlock)。
S7-300/400的功能与S7-200的子程序基本上相同。它们均有输入、输出参数和临时变量,功能的局部数据中的返回值实际上属于输出参数。它们没有专用的存储区,功能执行结束后,不再保存临时变量中的数据。
可以用全局变量来保存那些在功能执行结束后需要保存的数据,但是会影响到功能的可移植性。
功能块是用户编写的有自己专用的存储区(即背景数据块)的程序块,功能块的输入、输出参数和静态变量存放在指定的背景数据块中,临时变量存储在局部数据堆栈中。每次调用功能块时,都要指定一个背景数据块。功能块执行完后,背景数据块中的数据不会丢失,但是不会保存局部数据堆栈中的数据。
功能块采用了类似于C++的封装的概念,将程序和数据封装在一起,具有很好的可移植性。
S7-300/400的共享数据块可供所有的逻辑块使用。
4.IEC61131-3的程序结构
IEC61131-3是PLC的编程语言标准。IEC61131-3是世界上个,也是至今为止唯一的工业控制领域的编程语言标准。IEC
61131-3有三种POU:程序、功能块和功能。
功能是有多个输入参数和一个输出参数(返回值)的POU,返回值的名称与功能的名称相同,需要定义返回值的数据类型。调用具
有相同输入值的功能总是返回相同的结果。功能可以调用其他功能,但是不能调用功能块或程序。功能可定义的局部变量有VAR和VAR_bbbbb。
功能块是有多个输入/输出参数和内部存储单元的POU,功能块的输出参数值与其内部存储单元的值有关。功能块可以调用其他功能
块或功能,但是不能调用程序。
在调用功能块之前,必须在要调用功能块的POU中为每次调用声明功能块的实例,操作系统将为每次调用分配功能块专用的存储区
(类似于S7-300/400的背景数据块)。
功能因为没有内部存储区,调用时不需要实例化。
程序的行为和用途类似于功能块,程序具有输入和输出参数,而且可以具有内部存储区。程序通常包含有对功能和功能块的调用。
IEC61131-3定义了若干标准的功能和功能块。
5.S7-300/400与IEC61131-3程序结构的区别
1)S7-300/400的功能可以有多个输出参数,返回值也属于输出参数。IEC61131-3的功能只有一个返回值。
2)IEC61131-3的功能块用于保存局部变量的专用存储区是在声明功能块的实例时分配的,它对用户是不透明的,其他POU不能直接访问该存储区。
S7-300/400的功能块的局部变量(不包括临时变量)保存在它的背景数据块中。其他POU可以访问背景数据块中的变量。如果需要多次调用同一个功能块来控制同一类型的被控对象,每次调用都需要指定一个背景数据块,但是这些背景数据块中的变量又很少,这样在项目中就出现了大量的背景数据块。可以使用多重背景数据块来减少背景数据块的数量。但是需要增加一个用来管理多重背景的功能块。
3)S7-300/400的功能块的局部变量有临时变量和静态变量,IEC61131-3的功能块的内部变量Var相当于S7-300/400的静态变量。
4)S7-300/400将数据区划分为数据块来使用,数据块的大小与数据块中定义的变量的数据类型和变量的个数有关。IEC61131-3没有数据块的概念。
在西门子PLC S7-300中,有不同类型的通信资源,这些资源必须分开,却在一定程度上也相互影响。必须考虑到不同属性的CPU和CP模块,从而来计算大的通信数量。通信资源如下:
CPU的S7连接资源数
CPU的实例数目
CPU开放式通信资源数(例如TCON, TSEND块等)
CP的连接资源数
CP的实例数目
CPU和CP的S7连接资源数和开放式通信资源数限制了可用连接的大数目。
例如TCON, TSEND, TRCV和TDISCON块适用于CPU的开放式通信的。开放式通信的连接只有在运行时建立,是不需要被组态的。如果使用了比允许更多的连接,那么在运行时 TCON块会报错。S7连接资源数的限制只针对于S7连接。当然,这些还包括 PG连接,OP/HMI连接和S7标准通信连接。CP模块的连接可以是S7连接或开放式通信连接。CP模块的开放式通信连接需要通过NetPro配置,AG_SEND和AG_RECV块分别用于数据的发送和接收。实例数目限制S7连接同时进行发送和接收任务的可能性,换句话说,就是有多少个的PUT, GET, BSEND, BRCV, USEND和URCV块能够运行。
举例
针对于CPU 317-2 PN/DP(订货号:6ES7317-2EK14-0AB0)和CP343-1(订货号:6GK7343-1EX30-0XE0)的属性列出下面三种情况。
S7通信
开放式通信
通信实例数目
下面的表格列出了CPU 317-2 PN/DP和CP343-1的属性。
6ES7317-2EK14-0AB0CP343-1
6GK7343-1EX30-0XE0开放式通信资源数1616S7连接资源数3216S7连接资源的限制S7通信资源数大16个
S7标准通信资源数大30个
PG或OP连接资源数大31 个无限制通信实例数目3216
S7通信
对于CPU来说,多可以配置16个S7连接。PG,OP和S7标准通信共是16个连接资源。可以通过CP模块建立16个S7连接。并且,CP模块只要有一个S7连接或者PG/OP连接就占用CPU的一个S7连接。不论CP模块组态的是1个还是16个S7连接,仅占用CPU的一个资源。这个被占用的CPU的S7连接是已组态的S7连接,而不是额外的PG, OP和S7标准通信中的16个资源。
下表列出了S7连接的大数目。
开放式通信
在CPU中,可以使用TCON块建立16连接(TCP, ISO-on-TCP, UDP)。这个数目是不受其他通信服务的限制,且本身不影响任何其他类型的通信。CP模块可以配置16个开放通信连接。这些资源数是与 S7连接共享的。CP模块大可以建立16个连接(包括S7连接和开放通信连接)的开放通信不影响 CPU的通信资源。如果仅组态CP模块的开放通信连接,是不占用CPU的S7连接的。AG_SEND/AG_RECV块是用来读取/写入数据的。通过这种方式不使用任何CPU资源。功能块调用的大数量不受限制。
通信实例
在CPU中进行S7通信,可以同时运行多达32个实例。超过32个实例的话会报错。可以进行更多的S7连接任务,当一个S7连接的实例任务完成后可以使用另一个S7连接实例。CP模块可以多运行16个实例。例如可以发送和接收8组S7连接,或者,仅发送或者仅接收16组S7连接。但是不可能同时发送和接收16组S7连接。一种应用是等到这个任务完成后再去执行另一个S7连接。CP模块不支持这个功能,16个实例数目就是大值。
S7通信和开放式通信并行
S7通信和开放式通信是可以同时运行的。CPU的这些资源也不会彼此影响。对于CP模块,这两种通信服务是共享资源的。1个CP模块多可以运行16个实例。
通常情况下WORD用于逻辑运算,INT用于数*算;
在使用梯形图或SCL等语言编程时区分较严格。
在使用语句表编程时系统不检测数据类型是否匹配,即WORD与INT在用法上没有什么区别(WORD可做数*算,INT也可作逻辑运算)。
PIW是一个16位数,系统默认为WORD数据类型,可在符号表中定义为INT数据类型;
通常情况下WORD用于逻辑运算,INT用于数*算;
在使用梯形图或SCL等语言编程时区分较严格
在使用语句表编程时系统不检测数据类型是否匹配,即WORD与INT在用法上没有什么区别(WORD可做数*算,INT也可作逻辑运算)什么区别(WORD可做数*算,INT也可作逻辑运算)。对于INT和WORD来说 其实它们都是16位的数据类型
如果你确实要转换的话,直接用MOVE即可
WORD数据长度为16位,这种数据可采用4种方法进行描述。
二进制:二进制的格式为2#,如2#101,取值范围为2#0~2#1111_1111_1111_1111,书写时每4位可用下划线隔开,也可直接表示为2#111111111111。
十六进制:十六进制的格式为W#16#,W代表WORD,表示数据长度为16位,#16#表示十六进制,数据取值范围为W#16#0~W#16#FFFF。
BCD码:BCD码的格式为C#,取值范围为C#0~C#999。BCD码是用4位二进制表示1位十进制数,4位二进制中的0000~1001组合分别表示十进制中的0~9,4位二进制中的1010~1111组合放弃不用。BCD码的高4位用来表示符号,十六位BCD码的取值范围为-999~+999。在STEP7的数据格式中,BCD码的取值只取正值,与高4位的符号无关。
无符号十进制数:无符号十进制数的格式为B#(×,×),取值范围为B#(0,0)~B#(255,255),无符号十进制数是用十进制的0~255对应二进制数中的0000_0000~1111_1111(8位),16位二进制数就需要两个0~255的数来表示,例如:
B#(12,254)=2#0000_1100_1111_1110
12 254
上面4种数据都是描述一个长度位16位的二进制数,无论你使用哪种方式都可以。例如,如果想得到二进制数0000100110000111,可以使用2#0000_1001_1000_0111,也可以使用W#16#987,还可以使用C#987或者B#(9,135)。在STEP7中,比较常用的是十六进制,即W#16#这种格式。
整INT数据类型长度为16位,数据格式为带符号十进制数,16位中高为符号位。正整数是以原码格式进行存储的,如+786,对应的二进制码为2#0000_0011_0001_0010,而负整数则表示为正整数的二进制补码,即对应正整数的二进制码取反后加1,例如负整数-786,对应的二进制码为2#1111_1100_1110_1110。将负零(1000_0000_0000_0000)定义为-32768因此取值范围为-32768~32767。0表示正,1表示负。