西门子S7-200PLC自由口实例代码

合集下载

S7-200通过自由口控制Modbus变频器正负转 频率写入 等

S7-200通过自由口控制Modbus变频器正负转 频率写入 等

S7-200通过自由口控制Modbus变频器正负转频率写入等西门子S7-200通过自由口需要控制英威腾变频器的正负转停止和故障复位,运行频率控制以及分二次读取运行速度等12条变频器信息。

程序略微变动适应所有Modbus RTU需要控制。

下面是程序,可以直接导入程序后写入PLC试验ORGANIZATION_BLOCK 主程序:OB1TITLE=BEGINNetwork 1// 主程序,初始化并查执各变频器指令// 一.功能介绍// 该程序专为英威腾CHF系列变频器编写。

英威腾CHF系列变频器内置国际标准的MODBUS通信协议。

程序运行时,变频器作为MODBUS协议从站接收来自CPU224 PLC 的通信指令,实现起停、频率给定、监控等功能。

// CHF系列矢量变频器在与CPU224通信前须做好以下准备工作:// 1.确认己安装好CHF系列变频器的通讯卡,并将卡上的端口跳线置于RS485端;// 2.用一根带9针阳性插头的串口通信电缆连接在CPU224 PLC的自由通信口端,电缆另一端的第5、3、8线分别接在CHF变频器RS485通讯卡的GND、485+、485一端子上,其余线屏蔽不用;// 3.预先设置变频器以下参数:// PC.00=1 //变频器通讯地址为1// PC.01=3 //通讯波特率9.6K// PC.02=1 //通讯数据偶校验8位数据位1位停止位// P0.03=2 //变频器的运行指令采用通讯方式// P3.01=7 //变频器的A频率设定采用通讯方式(注意P3.04/P3.05对P3.01通讯频率的影响)// 二.程式结构说明// 该程序由1个主程序3个子程序及2个中断程序组成。

子程序里包含了变频器的起停、复位、查询功能指令,由主程序调用。

中断程序为发送及接收指令提供中断支持。

// main //主程式,初始化并查执各变频器指令// sbr0 //CRC校验子程序// sbr1 //通讯端口初始化子程序// sbr2 //发送变频器写入06/读取03指令,共8个字节// intO //接收完成中断程序// int1 //发送完成中断程序LD SM0.1CALL SBR1 //调用初始化子程序,使能PORT0自由口模式Network 2// 接收完成后延时10mS M4.4接通,运行下一次发送数据LDN M4.0AN M4.1TON T35, 1 // 通讯完成后延时10mS M4.4=1,允许下一次通讯,A T35= M4.4 //主要是为了Modbus RTU二次通讯中间3.5字符间隔时间Network 3// 如果发送或接收超时,延时0.2秒复位M4.0/M4.1,这里暂时设置5秒是为了方便调试LD M4.0O M4.1TON T199, 50A T199R M4.0, 2 //发送或接收超过0.2秒没有完成,复位发送/接收Network 4 // 调用Modbus06写入指令,通讯成功,这里暂时不用,可以作打手频率设定,不知道是否支持广播写入,广播写入主要是变频器故障复位和三个打手频率设定.给棉变频器如果需要用PID控制没有必要用PLC的PID// 当VW110≠VW300时把VW110写入变频器,VW110范围(+10000~-10000)÷10000×50Hz// 地址为变频器地址;字节为发送的字节数量=8个字节;指令=03为读取指令,06为写入指令;数据地址=2000H为英威腾变频器设置频率的地址;数据内容为写入2000H的内容,范围+10000~0~-10000// 运行命令权限最高,如果运行命令没有完成,程序将会一直执行下去,直到运行命令完成LDN M8.1 //没有发送运行命令,当运行命令发送过程中不能够发送频率写通讯AW<> VW300, VW110 //发送的数据VW110与通讯完成返回的数据不等A M4.4 //允许发送S M8.0, 1 //发送为写运行速度命令,为了接收信息时保存到VW300用CALL SBR3, 1, 8, 6, 16#2000, VW110 //把VW110数据写入到变频器地址1的2000H寄存器Network 5// 控制变频器正负转停止和故障复位同时有几个输入时执行最后的指令LD SM0.0LPSA I5.1 //运行命令MOVW 1, VW304LRDA I5.3 //反转命令MOVW 2, VW304LRDA I5.2 //停车命令MOVW 5, VW304LPPA I5.4 //故障复位命令MOVW 7, VW304Network 6 // 设定英威腾变频器1000H通信控制命令,来控制变频器正负转和停止等操作命令// 控制变频器运转英威腾变频器地址1000H 01正转运行02反转运行03正转点动04反转点动05停车06自由停车07故障复位08点动停车LDW<> VW304, VW302 //运行命令VW304与接收的返回信息比较,不相等将一直发送下去A M4.4S M8.1, 1 //为了把返回信息的保存到VW302寄存器CALL SBR3, 1, 8, 6, 16#1000, VW304 //把命令内容VW304写入到英威腾变频器的1000H 地址Network 7 // 调用Modbus读取,不要读取范围以外的内容,不然会报错误// 读取变频器状态3000H 运行速度3001H 设定速度3002H 母线电压3003H 输出电压3004H 输出电流3005H 运转速度// 当有其他重要的读写命令时该通讯暂停// 分2次读取英威腾变频器3000H~3005H 3008H~3013H信息,本来英威腾变频器说明书说可以连续读取16条信息,不过我读取16条信息返回数据没有CRC校验内容,不知为何,本来是试验程序,有时需要连续读取多条信息,就试验读取2次12条信息LDN M8.0AN M8.1 //程序没有发送写频率和运行命令时才能够读取变频器数据A M4.4LPS //调用查询变频器INCB VB270 //启动T37延时断开计时器A V270.0S M8.2, 1MOVW 16#3000, VW272 //读取3000H开头的连续6条信息LRDAN V270.0S M8.3, 1MOVW 16#3008, VW272 //读取3008H开头的连续6条信息LPPCALL SBR3, 1, 8, 16#03, VW272, 6END_ORGANIZATION_BLOCKSUBROUTINE_BLOCK 初始化:SBR1TITLE=通讯端口初始化子程序// 该程序在PLC的第一个扫描周期运行,主要是设置CPU224自由端口的通信格式、数据接收格式及复位各寄存区(参见西门子S7-200编程手册)。

s7200自由口通信例子

s7200自由口通信例子

S7-200自由口通讯程序(2012-03-26 13:53:59)转载▼分类:PLC标签:s7200自由口通讯杂谈S7-200自由口通讯程序2010-02-08 16:14MAIN: S7200自由口通讯程序LD SM0.1CALL SBR_0:SBR0 //初始化子程序LD SM0.7= SM30.0SBR_0: 初始化子程序LD SM0.0MOVW +2, VW8 //PLC自由口地址,此处每台机器需设不同的地址LD SM0.0MOVB 9, SMB30 //通讯参数,波特率9600,自由口通讯MOVD &VB100, VD40MOVW +10, VW54MOVB 12, VB150MOVB VB9, VB151MOVD &VB151, VD60MOVB 6, SMB34ATCH INT_0:INT0, 10ATCH INT_1:INT1, 8ENIINT_0: 中断程序入口LD SM0.0DTCH 10MOVD VD40, VD46MOVW +10, VW44MOVW +10, VW54ATCH INT_2:INT2, 8 //接受中断起用服务程序INT2INT_1: 延时转向INT0LD SM0.0MOVB 5, SMB34ATCH INT_0:INT0, 10INT_2: 接受地址,并判断LDB= SMB2, VB9 //地址和本机相符MOVW VW8, AC0MOVB 255, SMB34ATCH INT_3:INT3, 8 //起用中断服务INT3,接受包ATCH INT_5:INT5, 10 //起用延时监控服务INT5CRETILDB= SMB2, VB9 //地址和本机不符NOTATCH INT_0:INT0, 10 //返回中断入口ATCH INT_1:INT1, 8INT_3: 主接受服务程序,同时做异或校验LD SM0.0XORW SMW1, AC0MOVB SMB2, *VD46INCD VD46DECW VW44LD SM1.0 //完成预定的接受字节数ATCH INT_4:INT4, 8 //起用通讯数据处理主程序INT_4: 通讯数据处理主服务程序LD SM0.0BMB VB100, VB152, 6 //接受报头拷贝到发送报头LD SM0.0DTCH 8 //暂停响应接受中断INCD VD46MOVB SMB2, *VD46XORW SMW1, AC0ANDW 16#FF, AC0 //检查异或校验LDN SM1.0 //异或校验错误MOVB VB100, AC0MOVB 16#80, AC1ORW AC0, AC1MOVB AC1, VB152MOVB 16#1, VB158MOVW +10, VW54JMP 3 //校验错误,向PC返回错误码LD SM1.0 //异或正确MOVW +4, VW34ATCH INT_8:INT8, 8 //起用服务程序INT8响应接受中断,接受包尾LD SM0.0 //数据处理LPSAB= VB101, 0 //V寄存器MOVD &VB0, VD50LRDAB= VB101, 1 //Q寄存器MOVD &QB0, VD50LRDAB= VB101, 2 //I寄存器MOVD &IB0, VD50LRDMOVW +0, VW56LRDMOVW VW102, VW58LPP+D VD56, VD50LDB= VB100, 0 //PLC向PC发送数据MOVB VB104, AC0MOVB VB105, AC1MUL AC1, AC0BMB *VD50, VB158, AC0+I +8, AC0MOVW AC0, VW54-I +2, VW54MOVB AC0, VB150LDB= VB100, 1 //PLC从PC接受数据BMB VB106, *VD50, VB105MOVW +10, VW54MOVB 12, VB150LBL 3LD SM0.0MOVB 50, SMB34ATCH INT_6:INT6, 10 //延时起用INT6,置位发送电平MOVD VD60, VD66MOVB *VD66, AC0MOVB 0, VB250 //发送数据异或校验次数监视LBL 0 //发送数据异或校验LD SM0.0INCD VD66MOVB *VD66, AC1XORW AC1, AC0INCB VB250LDB= VB250, 150 //若校验次数超过150次,退出MOVB 6, SMB34ATCH INT_7:INT7, 10CRETILD SM0.0DECW VW54LDN SM1.0 //若发送校验未完成预定的次数,跳转到循环0 JMP 0LD SM0.0INCD VD66MOVB AC0, *VD66LD SM0.0MOVB VB150, AC0+I +4, AC0MOVB AC0, VB150INT_5: 接受时间监控服务程序LD SM0.0MOVD VD40, VD46MOVW +10, VW44MOVB 5, SMB34ATCH INT_1:INT1, 8ATCH INT_0:INT0, 10INT_6:发送数据LD SM0.0MOVB 250, SMB34ATCH INT_7:INT7, 10 //起用发送时间监控ATCH INT_7:INT7, 9 //发送中断(发送完成时触发)起用服务程序INT7 A SM4.5XMT VB150, 0INT_7: 结束中断服务程序LD SM0.0DTCH 9 //关闭发送中断MOVB 6, SMB34ATCH INT_0:INT0, 10 //返回中断入口ATCH INT_1:INT1, 8INT_8: 接受包尾,正常情况下本中断服务程序连续调用四次,接受四个0XFF,程序本身不做任何处理CRETI。

s7-200 编程实例

s7-200 编程实例

s7-200 编程实例English Answer:S7-200 is a programmable logic controller (PLC) manufactured by Siemens. It is widely used in industrial automation systems for controlling and monitoring various processes. In this article, we will discuss a programming example using S7-200.Let's consider a simple scenario where we want to control the operation of a motor based on the input from a sensor. We will use ladder logic programming to achieve this.First, we need to configure the input and output modules of the S7-200 PLC. Connect the sensor to an input module and the motor to an output module. Assign appropriate addresses to these modules.Next, we will write the ladder logic program. Open theprogramming software for S7-200 and create a new project. Add a new ladder logic network and start programming.In ladder logic, we use various instructions to control the flow of the program. For example, we can use a normally open (NO) contact to represent the sensor input and a normally closed (NC) contact to represent the motor output. We can use an output coil to control the motor.The ladder logic program will have the following structure:Start the program.Read the sensor input.Based on the sensor input, control the motor output.End the program.To read the sensor input, we can use a normally open contact connected to the input module. If the sensor isactive, the contact will close, indicating a logic 1. Otherwise, it will remain open, indicating a logic 0.Based on the sensor input, we can use a normally closed contact to control the motor output. If the sensor is active, the contact will open, de-energizing the outputcoil and stopping the motor. If the sensor is inactive, the contact will close, energizing the output coil and starting the motor.Finally, we need to end the program by adding an end instruction.Once the ladder logic program is complete, we can download it to the S7-200 PLC and put it into operation. The PLC will continuously scan the program and execute the instructions based on the input and output conditions.This is a basic example of programming the S7-200 PLC. It demonstrates how to control a motor based on a sensor input using ladder logic. With the flexibility and versatility of the S7-200 PLC, more complex automationtasks can be achieved.中文回答:S7-200是由西门子制造的可编程逻辑控制器(PLC)。

s7-200自由口通信

s7-200自由口通信

S7-200自由口通讯一、基础知识介绍(名词理解,原理,工作机制)1、S7-200CPU的通讯口可以设置为自由口模式(如何设置成自由口模式?)。

选择自由口模式后,用户程序可以完全控制通讯端口的操作(如何控制通讯端口的操作),通讯协议也完全受用户程序控制(如何控制通讯协议)。

S7-200 CPU处于自由口通信模式时,通信功能完全由用户程序控制,所有的通信任务和信息定义均需由用户编程实现。

2、S7-200CPU上的通讯口在电气上是标准的RS-485半双工串行通讯口。

此串行字符通信的格式可以包含:○一个起始位。

○7或8位字符(数据字节)。

○一个奇偶校验位,或没有校验位。

○一个停止位。

○通信波特率可以设置为1200,2400,4800,9600,19200,38400,57600,115200 bit/s。

凡是符合这些格式的串行通信设备,都可以和S7-200 CPU通信。

借助自由口通信模式,S7-200 CPU 可与许多通信协议公开的其他设备、控制器进行通信,其波特率为1200~115200bit/s。

自由口通信是一种基于RS485 硬件基础上,允许应用程序控制S7-200 CPU 的通信端口、以实现一些自定义通信协议的通信方式。

3、自由口通讯(顾名思义很自由)可以通过用户程序灵活控制,没有固定模式。

S7-200 可通过自由口通讯协议访问下列设备:– 带用户端软件的PC机,– 条形码阅读器,– 串口打印机,– 并口打印机,– S7-200,– S7-300 with CP 340– 非Siemens PLC,– 调制解调器。

S7-200 CPU 通信端口是RS485 标准,因此如果通信对象是RS232 设备,则需要使用RS232/PPI 电缆。

4、“请求-响应”工作机制:S7-200 CPU可以作为主站先向从站发送数据请求,然后等待从站的数据响应,也可以作为从站,首先等待主站发送过来的数据请求,然后根据请求的内容,按规则把相关数据返回给主站。

S7-200通过自由口主动发送命令的例子

S7-200通过自由口主动发送命令的例子

这是一个S7-200通过自由口主动发送命令的例子用于PLC-单片机。

以后我再写一个PC-PLC的例子如下:MAINNETWORK1LD I0.1EUCALL SBR_1NETWORK2LD M0.6CALL SBR_2SBR-0NETWORK1LD SM0.0 //首先写入要发送的命令MOVB 6, VB80 //发送长度MOVD 16#57303554, VD81 //W01T0MOVW 16#300D, VW85NETWORK2LD SM0.0ATCH INT_0, 25 //当口1接收到字符时引起中断ENINETWORK3MOVD &VB420, VD181 //指针指向接收缓冲区//接收初始化//P为起始字//回车为结束字符//超过1S终止接收//接收的最大字符数//忽略SMW192SBR-1LD SM0.0XMT VB80, 1SBR-2NETWORK1LDB= VB420, 16#50 //起始字符正确AB= VB431, 16#0D //结束字符正确S M18.0, 1 //置正确标志位NETWORK2LD M18.0STR VB424, 1, VD450 //数据保存LD SM0.0MOVD 16#00000000, VD420 //复位信息正确标志MOVD 16#00000000, VD424 //关闭本子程序MOVD 16#00000000, VD428R M18.0, 1R M0.6, 1INT-0NETWORK1LDB= SMB2, 16#50 //当首字符正确时,置开始接收标志位MOVD &VB420, VD181 //装载地址指针NETWORK2LD SM0.0 //接收字符MOVB SMB2, *VD181INCD VD181NETWORK3LDB= SMB2, 16#0D //当接收的字符是回车时MOVD &VB420, VD181 //重新装载地址指针S M0.6, 1 //调用数据处理程序。

s7-200自由口通信

s7-200自由口通信

通信要求:1起始位,1停止位,无检验,9600函数要求:1、起始符02,结束符03,16进制数据通讯;通讯地址范围A-Z(41-5A)2、校验算法,异或校验,校验位两个字节,高在前,低在后,分别用XH XL表示校验的高低字节;校验从开始字符后的第二个字符开始计算,运算到结束符前的校验的高校验位前字符;进行字节异或运算,最后异或的字节再拆开两位发送,如果最后的校验和为32;那么需要拆分成33,32进行发送。

发送函数要求:格式:02 ADD 43 XH XL 03;传入参数地址A-Z接受函数要求:格式:02 ADD 63 ** ** ** ** ** ** ** ** XH XL 03;返回参数:整数字符其中返回数据也属于ASCII码数据,需要转换成整形数据,并且小数点位置会动态变化,根据小数点的位置不同,动态计算数据。

发送数据:02 41 43 30 32 03接受数据:02 41 63 2B 30 30 30 2E 30 30 30 32 37 03 (0.0)需要返回0绿色表示起始位和停止位紫色表示传输数据的地址位(41是16#41,也就是地址A的ASCII的16#值)黄色表示传输的有效数据(2B是“+”的16#值,30是“0”的16#值,2E是“.”的16#“2B 30 30 30 2E 30 30 30”在PLC中相当于一个字符串“+0 0 0 . 0 0 0”,进制,<用于数据的解析>)红色表示校验数据的高低位,异或校验拆分后的值(如结果为16#27,则分成32<2的ASCII 码的16#值>,37<7的ASCII码的16#值>)程序思路:通信过程为一发一收通信首先发送规定指令,发送完成,PLC产生中断,中断号9(s7-200的PORT0口),中断程序则准备数据的接受当接受数据完成时,要判断数据是否为有效的数据,我们需要将数据包一步一步剥开,接受的数据是放在了一个连续的位置上(《RCV,VB100,0》数据在从VB101开始的位置存储),然后将数据包中的数据从地址位41(以此为例子)开始到黄色区域接受进行异或校验,得到16#27,将16#27进行高低位分离,同时转换成相应的ASCII的16#值(分离方法很多,s7-200中用HTA指令,一步到位,高低分离同时也转成相应的ASCII的16#值,小技巧)现在就要验证数据的有效性了,校验位数据和地址位(发送和接收一致)是否有效。

s7-200 编程实例

s7-200 编程实例

s7-200 编程实例English Answer:S7-200 Programming Example.In this programming example, we will discuss how to program the S7-200 PLC (Programmable Logic Controller). The S7-200 PLC is a popular choice for small to medium-sized automation projects due to its compact size and ease of use.To begin programming the S7-200 PLC, we need to use a programming software called STEP 7-Micro/WIN. This software allows us to create and edit the ladder logic program that will control the PLC.Once we have installed the STEP 7-Micro/WIN software,we can connect our PC to the S7-200 PLC using a programming cable. This cable is usually provided with the PLC or canbe purchased separately. The cable connects to the programming port on the PLC and the serial or USB port onthe PC.Once the connection is established, we can open the STEP 7-Micro/WIN software and create a new project. In the project, we can define the hardware configuration of the PLC, such as the number and type of input and output modules.Next, we can start programming the PLC by creating ladder logic diagrams. Ladder logic is a graphical programming language that represents the control logic in a relay ladder diagram format.For example, let's say we want to program the S7-200 PLC to control a motor. We can create a ladder logic diagram that includes an input contact to monitor a start button, a coil to control the motor, and a timer to control the motor's running time.In ladder logic, we can use various instructions such as contacts, coils, timers, counters, and arithmetic operations to create the desired control logic. Theseinstructions can be easily dragged and dropped from the software's instruction library.Once the ladder logic program is created, we can download it to the S7-200 PLC using the programming cable. The program is stored in the PLC's memory and will be executed in real-time to control the connected devices.After downloading the program, we can test and debug it using the software's simulation mode. This allows us to verify the program's functionality without actually connecting the PLC to the physical devices.Once we are satisfied with the program's performance, we can disconnect the programming cable and connect the PLC to the actual devices. The program will then control the devices based on the defined logic.Overall, programming the S7-200 PLC is astraightforward process using the STEP 7-Micro/WIN software and ladder logic programming. It provides a flexible and reliable solution for a wide range of automationapplications.中文回答:S7-200编程实例。

西门子S7-200自由口与上位机通讯实例

西门子S7-200自由口与上位机通讯实例

西门子S7-200自由口与上位机通讯实例西门子S7-200自由口与上位机通讯实例S7-200自由口与上位机通讯读取温度值的程序PLC主程序网络1// 设置控制方式为自由口通信方式,启动接收字符中断// PLC首次扫描自由口通信,波特率为9600,数据位8,停止位1,无校验初始化RCV,允许RCV,有结束符,检查空闲时间结束符为A空闲时间为5MS一次接收的最大字符为6个启动通信口,接收完成中断全局允许中断接收数据LD SM0.1MOVB 16#09, SMB30MOVB 16#B0, SMB87MOVB 16#0A, SMB89MOVB 6, SMB94ATCH INT_0, 23ENIRCV VB199, 0网络2// 检测温度送VW0 //转换成实际温度值从工作站编号送到输出缓冲区检测温度送输出缓冲区LD SM0.0MOVW AIW0, VW0/I +54, VW0MOVW AIW2, VW2/I +54, VW2MOVW 1, VW300MOVW VW0, VW302MOVW VW2, VW304网络3// 设置温度控制上限和下限//LD SM0.0MOVW +350, VW4MOVW +450, VW6网络4// 检测温度低于下限,则输出加温// LDW< VW0, VW4A SM0.5S Q0.0, 1网络5// 检测温度高于上限,则输出降温// LDW> VW0, VW6A SM0.5R Q0.0, 1网络6//准备传送参数//发送字节数据,送VB99发送检测温度数据,送VW100发送工作站编号数据,送VW102 LD SM0.0MOVB 6, VB99MOVW VW300, VW100MOVW VW302, VW102MOVW VW304, VW104网络7// 传送数据//LD SM0.5XMT VB99, 0中断程序网络1//通信口接收数据完成后的中断//// SMB86 等于16#20,表示PLC收到结速符//收到结束符,把收到的数据传到VB400中断有条件返回否则继续接收LDB= SMB86, 16#20MOVB VB200, VB400CRETINOTRCV VB199, 0\\*******************************\\VB源程序Dim x1, k1, k2Dim p11, p22 '定义变量Dim aa() As Byte '定义数组Private Sub Command1_Click() '开始监控,定时器1有效Timer1.Enabled = TrueEnd SubPrivate Sub Command2_Click() '退事程序,定时器1无效Timer1.Enabled = FalseCls '清屏Unload MePrivate Sub Form_Load() '初始化Timer1.Enabled = False '定时器1无效Timer1.Interval = 100 '定时器1时间为0.1STimer2.Enabled = True '定时器2有效Timer2.Interval = 1000 '定时器2时间为1SPicture1.ScaleMode = 0 '定义纵横坐标/doc/073575364.html,mPort = 1 '设定端口号MSComm1.Settings = "9600,n,8,1" '设定通讯波特率MSComm1.InputLen = 6 '输入缓冲区为6个字符MSComm1.InBufferSize = 256 '接收缓冲器大小MSComm1.OutBufferSize = 256 '输出缓冲器大小MSComm1.InputMode = comInputModeBinary '以二进制传输MSComm1.OutBufferCount = 0 '清空发送缓冲区MSComm1.InBufferCount = 0 '清空接收缓冲区End SubPrivate Sub Timer1_Timer() '定时器1有效,触发接收事件MSComm1.PortOpen = True '打开端口ReDim aa(0 To 5) '定义动态数组k1 = 0 '识别PLC站号,为1If k1 = 0 Then MSComm1.Output = "1" + Chr(10) + Chr(13) '发送Do While MSComm1.InBufferCount = 0 '准备接收数据Loopaa = MSComm1.Input '接收数据存入数组If aa(0) > 64 Then GoTo xxx:k2 = Int(aa(0) * 255 + aa(1) * 1)Select Case k2p11 = Int(aa(2) * 255 + aa(3) * 1)p22 = Int(aa(4) * 255 + aa(5) * 1)Case ElseEnd Selectk1 = k1 + 1If k1 > 2 Then k1 = 0xxx:MSComm1.PortOpen = FalseEnd SubPrivate Sub Timer2_Timer() '绘制各中频炉的温度曲线x1 = x1 + 1 '时间增加为1SPicture1.PSet (x1, p11), vbRed '绘制1#炉的温度曲线,为红色Picture1.PSet (x1, p22), vbBlue '绘制2#炉的温度曲线,为黄色Text1.Text = Str(p11) '输出1#炉温度值Text2.Text = Str(p22) '输出2#炉温度值Text3.Text = Str(x1) '输出监控时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 引言plc,omron公司的cjm1系列的plc,西门子公司的s7-200系列plc等都提供了自由口通讯模式。

自由口通讯是指plc提供了串行的通讯硬件,和用于定制通讯协议的相关指令,在控制系统中,当要和plc连接的控制设备的通讯协议已知时,可以在plc中进行编程定制通讯协议,和控制设备进行数据通讯。

本文主要介绍西门子s7-200的自由口和计算机的串口进行的通讯,计算机中采用visual basic进行编程,从而实现计算机与可编程控制器的直接控制。

该通讯方式具有效率高、容易实现、通讯硬件简单、容易配置等特点在工业控制领域中被广泛应用。

2 s7-200通讯指令及特殊字节采用自由口通讯方式时,s7-200上的rs485口完全由用户控制,可以与任何协议已知的设备进行通讯,在这种情况下通讯协议完全由用户制定,为此,s7-200提供了用于进行通讯协议定制的特殊标志位以及相关的通讯指令。

2.1 特殊标志字节s7-200用于自由口通讯模式定义的特殊标志字节有smb30和smb130,smb30用于s7-200的端口0的通讯,smb130用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb130为例,介绍其组成。

smb130各位的含义如下:pp:两位用于选择通讯的校验方式当这两位的组合是:00无校验01 偶校验10 无校验11 奇校验d:这一位用于选择通讯的数据位数d=1时7个数据位,d=0时8个数据位bbb:用于选择自由口通讯是的波特率,这三位的组合和通讯波特率的关系如下:000 ——38400bps001 ——19200bps010 ——9600bps011 ——4800bps100 ——2400bps101 ——1200bps110 —— 600 bps111 —— 300 bpsmm: 用于通讯协议的选择,当这两位的组合是:00 ppi从站模式01 自由口通讯模式10 ppi主站模式2.2 接收信息的状态字节s7-200在自由口通讯时用于接受信息的状态有smb86和smb186,smb86用于s7-200的端口0的通讯,smb186用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb186为例,介绍其组成。

smb186各位的含义如下:n=1时:表示禁止接收信息r=1时:表示接收信息结束e=1时:表示收到结束字符t=1时:表示接收信息超时错误c=1时:表示接收信息字符超长错误p=1时:表示接收信息奇、偶校验错误2.3 接收信息的控制字节s7-200在自由口通讯时用于接受信息的控制字节有smb87和smb187,smb87用于s7-200的端口0的通讯,smb187用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb187为例,介绍其组成。

smb187各位的含义如下:en=0时:禁止接收信息en=1时:允许接收信息sc=0时:不使用起始字符开始sc=1时:使用起始字符做为接收信息的开始ec=0时:不使用结束字符结束ec=1时:使用结束字符做为接收信息的结束il=0时:不使用空闲线检测il=1时:使用空闲线检测c/m=0时:定时器是字符定时器c/m=1时:定时器是信息定时器tmr=0时:不使用超时检测tmr=1时:使用超时线检测bk=0时:不使用中断检测bk=1时:使用中断检测2.4 其它和自由口通讯有关的特殊字节(见表1)2.5 自由口通讯的指令(1) 发送指令xmt 其指令格式如图所示:发送指令用于激活发送数据缓冲区tbl中的数据,数据格式如下所示,数据缓冲区中的第一个数据是指定要发送的数据的总字节数,最大为255个,从第二个数据开始是依次要发送的数据。

port指定用于发送的端口,在发送完缓冲区中的最后一个数据时产生中断事件。

(2) 发送指令rcv其指令格式如图所示:接收指令rcv 用于从指定的端口接收数据,并将接收到的数据存储与其参数tbl所指定的缓冲区内,缓冲区的第一个字节指示接收到的字节数量,第二个字节指示接收的起始字符,最后一个字节指示的是结束字符,起始字符和结束字符之间的是接收到的数据,同发送缓冲区一样,接收缓冲区的最大数量也是255个字节。

(3) 与自由口通讯有关的中断(见表2)3 plc自由口通讯的程序设计3.1 自由口通讯的初始化子程序(见图1)图1(a)图1(b)图1(c)图1(d) 3.2 自由口通讯的发送子程序(见图2)图2(a)图2(b) 3.3 自由口通讯的接收程序(见图3)图3(a)图3(b)3.4 自由口通讯的开始接收中断服务程序(见图4)图4 自由口通讯的开始接收中断服务程序3.5 自由口通讯的接收完成中断服务程序(见图5)图5 自由口通讯的接收完成中断服务程序4 vb中的串行口通讯组件介绍4.1 vb中串行通讯控件的引用在vb的标准工具箱中并没有用于串行通讯的控件,在使用时需要引用,引用的方法是在vb界面中的下拉菜单中选择[工程]/部件,在出现的可选文件中选择msccomm32.ocx,选择引用后在vb的标准工具箱中就会出现vb下的串行口通讯控件。

如果无法按照上述的方法在部件中成功地引用组件,也可以使用该程序中的浏览功能,到windows/system目录下去找msccomm32.ocx,并打开该文件。

4.2 vb中串行通讯控件的属性(1) commport:该属性用于设置vb应用程序所使用的串行口号,其设置值为1~16,对应计算机的com1~com16号端口。

(2) settings:该属性用于设置串行口的通讯参数,其格式为“bbbb,p,d,s”其中bbb为通讯的波特率,波特率范围为300~19200 bps;p为奇偶校验方式,其设置方法是e代表偶校验,o代表奇校验,n代表无校验;d为通讯的数据位数,通常是8位或7位;s代表停止位,停止位的设定值有1、1.5、2。

例如,setting属性的设置为,mscomm。

settings= 9600,n,8,1表示通讯波特率为9600,无校验,8个数据位,1个停止位。

(3) portope:在使用串行口进行通讯前必须先打开串行口,该属性用于串行口的打开与关闭,其设置值为true或false,分别代表串行口的打开与关闭。

(4) input:该属性的作用是从输入缓冲器中将数据读入到程序中,并清除缓冲区中已被读走的内容。

(5) output:该属性的作用是从程序中写数据到输出缓冲器中,写入到输出缓冲器中的内容由串口发送出去。

(6) inputlen:该属性指定由串行口读入的字符串长度,vb所写的程序可以使用该属性将存放在输入缓冲器中读入,但欲指定所读入的字符的长度则可以通过该属性来设置,默认值是0,在默认情况下,input指令一次读取所有输入缓冲区中的数据。

(7) rthrehold:该属性用于设置当输入缓冲器中接收到的字符数等于该属性的设定值时,引发接受事件on -comm事件。

当mscomm.rthreho -ld=0时不会产生oncomm事件。

(8) inbuffercount:该属性是指已接收到的并放在输入缓冲器中等待读取的字符的数量。

在使用时可把该属性设置为0用来清除输入缓冲器。

(9) inputmode:该属性用于设置由input属性取回的数据的形式。

该属性设置值如表3。

4.3 vb中串行通讯控件的事件(1) commevent属性用于传回下列所述的值之一,来表示不同的通讯错误或事件,通讯错误的返回值如表4所示。

(2) 通讯事件的返回值如表5所示。

4.4 visual basic中用于串口通讯的程序代码(1) 在form1的代码的公共部分定义变量:dim rcvlenth as integer定义接收数据长度的整形变量dim rcv() as byte定义接收数据的动态数组dim send(50) as byte定义发送数据的动态数组(2) 在form1——load的代码中对mscomm1控件进行设置:private sub form_load()rcvlenth=0mport=1 指定计算机通讯的端口号mscomm1.settings = "9600,n,8,1" 设置通讯波特率及校验方式mscomm1.inputmode= cominputmodebinarymscomm1.rthreshold=1mscomm1.inputlen=0mscomm1.outbuffercount=0if not mscomm1.portopen then mscomm1.portopen = trueend sub(3) 在mscomm1的oncomm()事件中加入以下代码,用于接收数据:private sub mscomm1_on-comm()dim i as intgerdim rcvtemp() as byteredim preserve rcv (mscom-m1.inbuffercount) as byteselect case -meventcase comevreceivercvtemp=mscomm1.inputfor i=lbound(rcvtemp) to ubound(rcvtemp)rcvlenth=rcvlenth + 1rcv(rcvlenth)=rcvtemp(i)next iend selectend sub(4) 在timer1_timer()事件中加入如下代码用于定时的发送数据:private sub timer1_timer()dim i as intgerfor i=1 to 50mscomm1.output = send(i)next iend sub(5) 程序界面如图6所示。

图6 程序界面5 结束语s7-200的自由口通讯方式,使用户可以通过plc指令自己定义通讯协议,从而与任何公开通讯协议的rs-422或rs-232c接口设备进行通讯,使通讯范围大为增加,控制系统配制更加灵活。

本文也介绍了采用vb进行串行口通讯的控件和编程方法。

采用本文叙述的方法,可以组成一个上、下位机控制管理系统,将plc的信息转换成各类画面显示,并可以对plc的参数进行实时修改,达到管理、控制一体化。

相关文档
最新文档