西门子S7200PLC自由口实例代码

合集下载

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-200CPU通信口的自由口模式实现Modbus通信协议

S7-200CPU通信口的自由口模式实现Modbus通信协议

在组态王里点击“com1”(根据你在前面已经定的com口而定),然后在右边的界面上显示你所建立的文件,然后对你编译的主画面点反键,然后在下拉菜单中点击“测试---”(你的文件名),再随便在选项里输入一个你编写的程序里的标志位,看能不能显示你的PLC内的当前值,如果可以显示,就应该是通信上了。

通过 S7-200 CPU 通信口的自由口模式实现 Modbus 通信协议,可以通过无线数据电台等慢速通信设备传输。

这为组成 S7-200 之间的简单无线通信网络提供了便利。

详细情况请参考《S7-200系统手册》(2002 年 10 月或以后版本)的相应章节。

Modbus 是公开通信协议,其最简单的串行通信部分仅规定了在串行线路的基本数据传输格式,在 OSI 七层协议模型中只到 1,2 层。

Modbus 具有两种串行传输模式,ASCII 和 RTU。

它们定义了数据如何打包、解码的不同方式。

支持 Modbus 协议的设备一般都支持 RTU 格式。

通信双方必须同时支持上述模式中的一种。

Modbus 是一种单主站的主/从通信模式。

Modbus 网络上只能有一个主站存在,主站在 Modbus 网络上没有位置,从站的位置范围为 0 - 247,其中 0 为广播位置,从站的实际位置范围为 1 - 247。

Modbus 通信标准协议可以通过各种传输方式传播,如 RS232C、RS485、光纤、无线电等。

在 S7-200 CPU 通信口上实现的是 RS485 半双工通信,使用的是 S7-200 的自由口功能。

Modbus RTU 主站指令库(测试版)西门子针对 S7-200 最新推出支持 Modbus RTU 主站的协议库(测试版),用户可以将这个库添加到 Micro/WIN 软件中,并通过调用库指令,方便地实现 Modbus RTU 主站的功能。

注意:1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库只对 Port 0 口有效。

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-200PLC与PC自由口通讯的多种实现方法,

S7-200PLC与PC自由口通讯的多种实现方法,

首页我的图书馆主题阅读精彩目录精品文苑Tags会员浏览好书推荐S7-200PLC与PC自由口通讯的多种实现方法,应用案例,工控商务网(转载)金牧场收录于2007-07-30 阅读数:公众公开原文来源S7-200PLC与PC自由口通讯的多种实现方法出处:西部工控网 | 时间:2007-3-31 | 阅读:23次1 引言西门子S7-200PLC是德国西门子公司生产的小型PLC。

S7-200以其高可靠性、指令丰富、内置功能丰富、强劲的通讯能力、较高的性价比等特点,在工业控制领域中被广泛应用。

S7-200PLC的突出特点之一是自由口通讯功能。

如何实现S7-200PLC 与个人计算机的互联通信,是S7-200PLC应用的技术关键。

可编程控制器与计算机之间的通讯一般是通过RS-422口或RS-232C口进行的,信息交换的方式为字符串方式,运用RS-23 2C或RS-422通道,容易配置一个与计算机进行通信的系统,将所有软元件的数据和状态用可编程控制器送入计算机,由计算机采集这些数据,进行分析及运行状态监测。

用计算机改变可编程控制器设备的初始值和设定值,从而实现计算机与可编程控制器的直接控制,一旦确定了可编程控制器的控制指令,就能很方便地与计算机连接。

2 S7-200的自由口通讯模式S7-200支持多种通讯模式,如点点接口(PPI)、多点接口(MPI)、Rrof ibus DP等。

PPI等通讯协议主要用于西门子系列产品之间的通讯以及对PLC编程。

在自由口模式下,可由用户控制串行通讯接口,实现用户自定义的通讯协议。

用户可以用梯形图程序调用接收中断、发送中断、发送指令(XMT)、接受指令(RCV)来控制通信操作。

在自由口模式下,通信协议完全由梯形图程序控制。

S7-200CPU上的通信口是与RS-485兼容的9针D型连接器,PLC还提供了实现RS-485与PC机上RS-232C相连接的P C/PPI电缆,利用它可以方便地实现S7-200系列PLC与PC之间的硬件连接。

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自由口与上位机通讯实例西门子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) '输出监控时间。

S7-200系列PLC自由口通信知识分享(3)

S7-200系列PLC自由口通信知识分享(3)

S7-200系列PLC自由口通信知识分享(3)在前面的文章中与大家分享了自由口通信中的发送功能,那么进行就跟大家聊聊自由口通信中的接收功能,自由口通信中的难点就是在于接收功能的使用,当PLC通过通信端口把数据发送给下位设备后,下位设备会根据PLC发送过去的信息内容回传相应的数据给PLC,这时候PLC就需要使用接收功能进行数据的接收,S7-200系列PLC提供了一条接收指令(RCV)用于接收下位设备返回来的信息。

指令格式如下所示:当PLC接收完下位设备回传回来的数据后,PLC会产生相应的中断事件来告知编程人员信息接收完成,此时可以编写相应的程序提取有效数据,并对这些有效数据进行转换,转换成可读性的数据。

S7-200系列PLC提供了中断事件23和中断事件24分别作为端口0和端口1的接收完成中断事件号。

在PLC的信息发送过程中,PLC是主动方,会根据需要发送的数据个数进行数据的发送,当发送完成后,PLC会自动产生相应发送完成中断,而对于接收来讲,PLC是被动方,只负责数据的接收,当PLC的端口使能了接收功能后,PLC处于等待信息的接收状态,有数据过来就接收,但是接收的数据是否是有效的数据,什么时候接收完了PLC并不知道,此时就要求我们编程人员需要设置好消息的起始和接收条件,当起始条满足了,PLC 把接收到的数据放入到接收缓冲区中,当满足了结束条件,PLC关断接收功能,并产生接收完成中断。

用于判断消息的的起始和结束条件有很多种方式,但用的比较多可能就以下几种方式:今天我们先聊一聊通过起始符作为信息的起始和通过结束符作为信息的结束判断的过程及程序的设置,S7-200系列的PLC提供了两个系统存储区用于存储起始符(SMB88)和结束符(SMB89)(这里以端口0为例说明),因此若需要使用起始符和结束符做为消息的起始和结束的的判断,则需要把起始符和结束符分别放到SMB88和SMB89中。

当PLC在接收数据的过程中,会对接收的数据与起始符进行对比,如果与起始符不相等,这说明不是有效性的数据,不放入接收缓冲器中,会把接收到的数据丢弃,重新接收,若接收到的数据与起始符相等,则PLC会把接收到的数据放到接收缓冲区中,同时记录接收字符个数的存储器的值加1。

  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的参数进行实时修改,达到管理、控制一体化。

相关文档
最新文档