产品描述
西门子模块6ES7321-1CH20-0AA0供应
S7-200 自由口通讯
自由口模式允许应用程序控制S7-200 CPU 的通讯端口,使用PC/PPI 电缆和自由口功能,可以将S7-200 连接到带有RS-232 兼容接口的多种设备,比如调制解调器。这里我们将介绍如何用S7-200 连接GSM 调制解调器发送短消息,并通过这个例子来介绍应用S7-200 自由口编程的一般原则时及应注意的问题。
在下面的例子中我们将用到:
1. PC/PPI 电缆(10 位;9 600 波特;DIP 开关设置:0 1 0 1 1)
2. 西门子 S7-200 CPU22X
3. TC35 Terminal GSM 调制解调器
4. 一个9 直通针转接头(用来连结PC/PPI 电缆与TC35 Terminal 调制解调器)
5. 一根九针直通电缆(用来连结计算机与TC35 Terminal 调制解调器)
6. STEP 7-Micro/Win V3.2 或高版本软件
一、 TC35 调制解调器AT 指令简介
要使用TC35 发送短消息需要使用TC35 的AT 指令,我们介绍如何用bbbbbbs 自带的级终端连接TC35 发送短消息。
1. 用九针直通的电缆将TC35 连接到计算机的串口上
2. 打开级终端(开始程序附件通讯级终端)
3. 为连接Connect to TC35T
4. 选择TC35 连接的串口COM1
5. 按照下图的参数设置端口。19 200 bps 为TC35 默认的端口波特率,如果该波特率已被改,请选择正确的波特率。
6. 在窗口中键入AT 回车测试与TC35 的连接,如果连接正确,TC35 将返回OK。
7. TC35 可以发送两种格式的短消息,普通文本格式和PDU 格式。应用普通文本格式时,
短消息内容以ASCII 码格式直接输入,操作比较简单,缺点是只能发送英文短消息;应用PDU 格式时,短消息内容以Unicode 格式输入,可以发送任何文字,缺点是短消息内容需要转换成Unicode 码,并且要把短消息按PDU 格式打包,操作比较复杂(编程复杂)。通过指令AT+CMGF=0 设置TC35 以PDU 格式发送短消息(默认),AT+CMGF=1设置TC35 以普通文本格式发送短消息。
8. 如何以普通文本格式发送短消息可以在S7-200 的网站上找到,这里我们将介绍如何发送中文短消息。要发送中文短消息把短消息内容转换成Unicode 码,并按照PDU 格式打
包发送给TC35。PDU 数据格式涉及手机开发的相关知识,我们不作详细介绍,这里指给出一个标准格式供大家使用。以下就是一个PDU 格式的数据包:
0001000D91683108214365F700080459296C14
其中,红色的数字(3108214365F7)代表对方的手机号码,在PDU 格式中,手机号码每两位需要对调。比如在上面这个例子里,对方的手机号码为,F 用来
7 后面的空位。蓝色的数字(59296C14)是短消息内容的Unicode 码,这里5929 代表“天”6C14 代表“气”。Unicode 码同样可以用来表示中一般英文字母和数字,方法是在英文或数字的ASCII前加00。紫色的数字(04)代表短消息的长度,它等于其后所有字符个数除以2。黑色的数字每次发送短消息时都是相同的,使用时可以照抄,但前提是所使用的SIM卡在使用前要用手机设置好短消息服务号码(+86)。汉字的Unicode 码可以通过编码转换软件得到,我们使用的是Megaton Technology 公司的一个编码转换软件
9. 在使用PDU 格式发送短消息时,还计算整个PDU 数据包的长度,PDU 数据包的长度等于(PDU 数据包字符数-2)/2,在上面的例子里:(38-2)/2=18。发送短消息时,我们先向TC35 发送AT+CMGS=<Length>回车(Length 是计算好的PDU数据包的长度),TC35 收到指令后返回一个“〉”符号,然后我们发送整个PDU 数据包并以组合键Ctrl+Z结束。
如果短消息被成功的发送,TC35 会返回+CMGS: x,其中“x”代表该模块以及发送的短消息个数,同时返回OK。
二、 设置TC35
在将TC35 连接到S7-200 之前我们先要对TC35 作一些设置,使其适合与PLC 通讯。
1. 通过指令AT+IPR=9600 设置TC35 的端口波特率为9 600 bps
2. 重新建立一个波特率为9 600 bps 的连接,用指令ATE0 禁止回波功能。回波功能使调制解调器将收到的指令回发给发送方,这项功能会给PLC 编程来来不便,当禁止回波功能后,TC35 只返回指令执行的结果,比如OK 等等
3. 键入AT&W0 回车将当前设置存为用户配置文件(掉电保持),再键入ATZ0 以用户配置文件重新启动。此后TC35 重新上电时将按照所作的设置启动。
三、 PLC 编程
现在,我们已经知道如何用AT 指令发送短消息,剩下的工作是用PLC 程序来发送这些AT指令。S7-200 的通讯端口为RS-485 接口,RS-485 接口为半双工接口,因此,编写PLC 程序的
关键是避免在通讯端口上同时发送和接收。我们下面将介绍一种标准的编程模式,按照这种模式编写自由口通讯程序可以有效的避免因同时发送和接收造成的通讯冲突,从而保证程序的正常运行。
四、 总结
这里我们总结以下自由口编程的一般原则:
1. SM0.1 触发端口初始化,连接发送完成和接收完成中断(中断事件9 和23)
2. SM0.0 触发RCV 指令
3. XMT 指令用上升沿触发,并在指令运行前先停止端口0 的接收(复位SM87.7,执行RCV 指令)
4. 在发送完成中断中,重新置端口0 为接收状态(置位SM87.7,执行RCV 指令),清空RCV 指令的接收缓冲区
5. 尽量减少在中断程序中编程,如果时间允许仅在中断程序中置标志位,然后在主程序中扫描该位执行具体的程序
6. 根据将要接收信息的不同,合理设置SMB87~SMB94
由于水平有限,又OEM开发所涉及的因素较多,文中不能点击,如有不妥请指正,并希望多的人使用OEM。
西门子PLC除基本逻辑运算指令、定时、计数等常用的开关量控制指令外,还包括大量的用于字节、字、双字逻辑处理,数学运算,程序控制,通信等指令。这些指令可以为用户的PLC功能开发、编程、使用提供方便,因此,习惯上将其称为功能指令。
一个PLC可以使用的功能指令数量有所不同,从某种程度上说,功能指令反映了CPU功能的强弱。为了分别说明,本书对S7系列PLC的功能指令作了如下分类与定义:
(1)字节、字、双字逻辑处理指令
字节、字、双字逻辑处理指令是指以字节、字或双字的形式进行的逻辑运算与处理,包括字节、字或双字的“与”、“或”、“异或”、“取反”运算等。
(2)比较指令
比较指令是对两个存储器内容或数据的比较,通常以字节、字或双字的形式进行。比较方式可以是“大于”、“小于”、“等于”、“大于等于”、“小于等于”、“不等于”等,比较结果将以二进制位的形式输出。
(3)装载、传送与移动指令
装载、传送与移动指令用于存储器间的内容交换,通常以字节、字或双字的形式进行。在本书中,对装载、传送与移动的定义如下:
装载:是指将存储器的内容或者特定的数据读入到累加器或地址寄存器中;
传送:是指将累加器或地址寄存器的内容移动到的存储器中;
移动:是指将某一存储器的内容或特定的数据移动到另一存储器中。
(4)移位指令
移位指令是对存储器本身内容所进行的调整,通常以字节、字或双字的形式进行。移位指令有左移、右移、循环移动等形式。
(5)代码转换指令
代码转换指令是指将一个存储器的存储内容以其他代码的形式存储到储器中的操作,通常以字节、字或双字的形式进行。常见的代码转换有二进制与BCD码间的转换、ASCII码与二进制数间的转换等。
(6)数学运算指令
代码转换指令是指将两个存储器间的内容进行四则运算、函数运算、增减“l”等处理后,移动到存储器中的操作,通常以字节、字或双字的形式进行。常见的代码转换有二进制与BCD码间的转换、ASCII码与二进制数间的转换等。
(7)程序控制指令
程序控制指令是指改变PLC内部指令的执行过程或PLC运行状态的操作。常见的有程序结束、程序跳转、程序中断、程序停止等。
(8)通信指令
程序控制指令是指用于控制PLC与外部设备间数据交换(通信)的指令。常见的有数据发送、数据接收等。
以上指令在PLC中的具体数量、用法等可能有所区别,应注意实际使用的PLC型号。此外,对于具体某一型号的PLC,还可能有其他特殊的功能指令。你可以查看我们的其他文章或通过站内搜索得到。
①变量V(仅S7-200):在S7-200中,PLC内部变量用英文字母V标记,其作用与内部寄存器类似,可用于寄存PLC程序中间运算结果,但可以使用的数量多。在PLC程序的执行过程中可以不断对内部变量V的内容进行新与改变。由于变量V的状态可以由所有的程序块共用,因此,它是一种公共变量(也称共享变量)。
由于S7-200中没有单的“数据块(DB)”存储区,内部变量V存储器的1部分被作为数据块DB1使用,它在不同的CPU中大小不等,可以是128~512字节。被作为数据块DB1使用的内部变量V,在PLC装载时可以像PLC程序一样复制到PLC的EEPROM中,而其余的内部变量V则只能保存在CPU的RAM中。
在S7-300/400中,不可以使用内部变量V,而是需要通过数据块DB来存储PLC的中间运算结果。
②局部变量L:PLC内部局部变量用英文字母L标记,其作用与公共变量类似,但它是一种共用的、动态变化的存储区域,其内容与含义随着所执行的逻辑块的不同而改变,它用于寄存仅在逻辑块内部使用的中间运算结果。
局部变量L与公共变量V的区别是:公共变量V在PLC程序中是通用的,即某一程序段或程序块的执行结果可以用于其他的程序段与程序块;而局部变量L的内容却是临时性、不固定的,只有在调用某一逻辑块时,在块的内部才有明确的含义,逻辑块一旦执行完成,其作用随之消失,因此,它随着所执行程序块的不同随时进行新与改变。
局部变量L的地址范围在理论上为LO.O~L63.7共64个字节,但实际可以使用的一般为LO.O~L59.7共60个字节。
①内部标志位M:西门子PLC中的“内部标志位”用英文字母M标记,作用相当于其他公司PLC中常说的“内部继电器”,它用于寄存PLC程序中间运算结果。在PLC程序中,内部标志位的内容可以随着程序的执行,在执行过程中不断进行新与改变。
②特殊内部标志位SM:PLC内部特殊标志位用英文字母SM标记,它与内部标志位的区别是:特殊标志位SM具有特殊的含义,它可以反映PLC内部的工作状态和控制信息,并可被PLC用户程序使用。
特殊标志位SM分为“只读”和“可读写”两部分。“只读”信号由PLC自动生成结果,在程序中只能使用其结果,而不能进行“写入”(或输出)操作。
③累加器AC:S7.200与S7—400有4个32位累加器ACCU0~ACCU3:S7—300有2个32位累加器ACCU0、ACCU1。累加器的内容同样只可以用字节、字或双字的形式进行处理,并以AC0~AC3作为地址。当以字节(或字)为单位存取累加器时,使用累加器的低8位或低16位。
④顺序控制继电器S(仅S7-200):在S7—200 PLC中,可以使用顺序控制继电器(SCR),它用英文字母S标记,用于组织PLC程序操作或进入相应的程序步。
⑤数据块DB/DI(仅S7—300/400):在S7—300/400系列PLC中,可以使用数据块DB来存储程序的处理结果或数据,数据块可以在DB(或DI)的地址下以十进制的形式来。
数据块的内容同样可以用二进制位、字节、字、双字的形式使用,对于二进制位,地址以DBX+.+(或DIX*.*)形式;对于数据块中的字节、字、双字,地址以DBB**、DBW**、DBD**(DIB¨+、DIW**、DID***形式。1本地数据堆栈区L是局部变量,L变量仅在调用它的子程序中有效。
不同子程序中的L变量可用同名。如,FC1中有L0.1,FC2中也有L0.1这个变量,而2者间没任何关系、也不会相互冲突。
2不需要做初始化
3 局部变量解释:
L 是局部存储器,作为暂时存储器或给子程序传递参数,L也可以L*.*(如L2.5 是BOOL 量,是二个字节的五位),LB,LW,LD来存取,但仅仅在它被创建的块中有效,它也可以在符号表中定义,但只能在各个POU自己的符号表中定义.
4. 全局变量和局部变量在符号寻址编程时,全局变量直接显示符号名,而局部变量在符号前会加上#,采用局部变量编程有很多优势:程序可以功能化移植(减少重复编程量),大程序方便协同作战(把任务分成各个功能块),这是SIEMENS的PLC比较优越性之处。
5 使用时请注意,一定要先赋值,后使用局部变量又称临时本地数据区(L堆栈),位于CPU的工作存储区用于存储程序块(OB、FB、FC)被调用时的临时数据,访问临时数据比访问数据块中的数据快。
“L是局部变量,只能在局部使用,不能在全局使用。”只是在这个程序块中可以使用的,使用结束后就会自动复位,它不能被其他的程序使用。临时变量的使用原则就是:先赋值,再使用
在S7-300CPU中,每一个级的局部数据区的大小是固定的。一般在组织块中调用程序块(FB、FC等),操作系统分配给每一个执行级(组织块OB,一般在OB块执行并调用其它FB、FC)的局部数据区的大数量为256B(字节),组织块OB自己占去20B或22B,还剩下多234B可分配给FC或FB。如果块中定义的局部数据的数量大于256字节,该块将不能下载到CPU中。在下载过程中提示错误信息:The?block?could?not?be?copied(该块不能被复制)。如果单击错误信息框中的Detail(详细)按钮,将弹出帮助信息:Incorrect?local?data?length(不正确的局部数据长度)。
在SIMATIC管理器中依次展开你的项目到Blocks(块),右击选中某个块,选择菜单bbbbbb?Properties(目标属性)选项。在块的属性对话框中,可以看到块所需要的局部数据字节数(Length长度:Local?Data(局部数据))。
在SIMATIC管理器中选中你的项目的Block(块(文件夹,执行菜单命令Options(选项)/Reference?Data(参考数据)/Display(显示),然后选择Program?Structure(程序结构),即可在参考表中查看局部数据的占用情况。
产品推荐