西门子S7200PLC自由口实例代码
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自由口通信例子
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通信协议
在组态王里点击“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通过自由口主动发送命令的例子用于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自由口通讯的多种实现方法,
首页我的图书馆主题阅读精彩目录精品文苑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自由口通信
通信要求: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自由口与上位机通讯读取温度值的程序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)在前面的文章中与大家分享了自由口通信中的发送功能,那么进行就跟大家聊聊自由口通信中的接收功能,自由口通信中的难点就是在于接收功能的使用,当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。
自由口通讯程序
S7-200 自由口通讯程序说明,这个例子的PLC程序也是从别处借来,本人只是适当作了修理,另再写了VB的代码部分。
个为认为PLC程序写得不错,因为程序太长,请各位心看了。
//^^^^^^^^^^^^^^^^^^^^^^//PLC程序部分TITLE=程序注释//PLC在第一次扫描时执行初始化子程序,对端口及RCV指令进行初始化。
初始化完成后,运行RCV指令使端口处于接受状态。
//RCV会将以"g"开头"G"结尾的指令保存到接收缓冲区,并同时产生接收完成中断。
//RCVcomplete中断服务程序用来处理接收完成中断事件,它会将接收缓冲区中的十六进制ASCII码还原成数据并保存,同时置位Verify子程序的触发条件(M0.1)。
// Verify子程序首先复位本身的触发条件以防止子程序被重复调用,然后求出接收缓冲区中指令的BCC校验码并与指令中的BCC校验码进行比对。
如果相等则置BCC码校验正确的标志位(M0.0)为1;如果指令格式正确(指令的结束标志在接收缓冲区中特定的位置VB 133)而BCC码不相等,则发送代表BCC校验码错误的反馈信息;如果指令格式不正确(V B133中不是指令的结束标志),则返回代表指令格式错误的反馈信息。
// Read子程序的触发条件为:指令中的站地址与本机站地址相符、指令类型为读指令、B CC检验码正确。
当条件满足时,Read子程序被执行。
Read子程序首先禁止RCV,然后将指令所要读取的数据转换成十六进制ASCII码并写入发送缓冲区、计算BCC检验码、最后发送反馈信息。
// Write子程序的触发条件为:指令中的站地址与本机站地址相符、指令类型为写指令、B CC检验码正确。
当条件满足时,Write子程序被执行。
Write子程序首先禁止RCV,然后将指令中的数据写入目标寄存器,最后发送代表写入正确的反馈信息。
//PLC每接到一条指令后都会发送一条反馈信息,当反馈信息发送完成时,会产生发送完成中断,XMTcomplete中断服务程序用来处理发送完成中断事件。
200PLC自由口(MODBUS)通讯初级教程
200PLC自由口(MODBUS)通讯初级教程原创作者:杜天龙1、安装200PLC程序及S7_200PLCMODBUS库文件。
200PLC库文件下载地址:/share/link?shareid=232544846&uk=5372422712、新建200PLC程序(本例使用的PLC是CUP226),直接打开库,选择200从站里面的指令。
具体程序如下:3、如果你想更多的学习MBUS_INIT和MBUS_SLA VE的用法,请参考200PLC编程软件的帮助文件。
4、如果在编译完出现错误18的提示,那是因为没有为库分配存储区,分配存储区的方法如下,新手直接选择建议地址,这样可以避免地址重复。
这里给出的建议地址的起始地址为VB8。
那是因为我们在上面的程序中已经将VW0、VW2、VW4、VW6用掉了。
因VW为字,占用2个字节,相当于从VB0~~VB7。
所以这里最小只能是VB8,当然你可以将起始地址手动设置成VB100。
这样你就可以使用VW0~~VW98之间的存储器。
5、下载并运行PLC后,下载串口测试工具。
发现并不能得到想要的结果,分析程序发现是地址写错了,VW地址不能VW0、VW1……VW6,应该是VW0、VW2……VW12,这样库存储区的起始地址就不能使8了,至少也要是14,我们直接修改到200,方面以后的测试。
我们将程序做如下修改:将MODBUS初始化程序MBUS_INIT的MaxHold保留区的地址直接修改到100(小于库存储区的起始地址VB200)。
至此程序调试结束。
6、串口调试软件(/share/link?shareid=238269468&uk=537242271)的使用方法详见软件操作说明里面的具体图片。
西门子200PLC编程实例
这是网上擂台的题目:一台电动机要求在按下起动按钮后,电动机运行10秒,停5秒,重复3次后,电动机自动停止。
同时设置有手动停机按钮和过载保护。
编写梯形图控制程序。
PLC可以随便选用,要有相关说明。
注意:要有PLC控制电路和I/O分配表。
1、硬件选择:一台PLC(S7-200)、一个交流接触器Z0(控制电机运行)、2个按钮开关(SB1、SB2)及1个过流继电器(FR),电路图如下:(不包括粉色虚线框部分)2、编程:用不同思路,可编出几种不同的控制方案,都可实现该项目要求。
(1)、最简单的编程方案,就是选用5个通电延时定时器:其3个定时10秒,用于电机启动运行,另2个定时5秒,使电机停。
具体编程也有二种方式,见下图:上图中的方案一与方案二,同用5个定时器,完成同样的功能。
方案一是这样编程:按下启动按钮(I0.0),使断开。
在此过程中,M0.0、MO.2、M0.4都是10秒的导通时间,用它们去控制Q0.7,其彼此间隔时间为5秒(即M0.1、M0.3的通导时间)。
?8?1延时?8?1M0.0=1,T101得电开始延时,延时10秒,T101吸合使M0.1=1、M0.0=0,使T101断电,而T102得电开始延时,5秒后T102得电吸合,使M0.2=1,M0.1=0。
直到T105得电方案二是这样编程:按下启动按钮(I0.0),使 M0.0=1,T101得电开始延时,延时10秒,T101吸合,使T102得电开始延时,延时5秒,T102吸合,使T103得电开始延时。
直至T105得电延时,延时10秒后动作,使M0.0=0,M0.0=0使T101—T105皆断开,程序结束。
用M0.0的常开触点与T101的常闭触点串联,用T102的常开触点与T103的常闭触点串联,用T104的常开触点与T105的常闭触点串联,三者再并联后去驱动Q0.7,可达到同样的控制作用,由上图可见,由于编程方法不同,其方案二用的指令比方案一少,显然:方案二优于方案一。
200自由口通讯。
西门子自由口使用1.接口定义:2.3G3RV的接线使用RS-485通信时,在变频器的外部让R+,S+短接,R-,S-短接3.接线方式西门子的RS485信号A接R-,S-短接线,RS485信号B连接R+,S+短接线4.程序说明1)XMT指令XMT指令缓冲区格式如表所列T+0 发送字节的个数T+1 数据字节T+2 数据字节T+3 数据字节。
T+255 数据字节2)预先设置变频器以下参数:变频器通讯地址为1通讯波特率9.6K通讯数据偶校验变频器的运行指令采用通讯方式3)使用说明西门子S7-200系列PLC的自由通讯端口编程必定会用到两个指令,即XMT(发送)指令和RCV(接收)指令。
编写程序时需要为这两个指令指定数据缓冲区,一般以最低位数为0的地址作为数据缓冲区的起始地址。
(1).发送指令XMT缓冲区(写/读)VB100 //xmt指令要发送的字节个数VB101 //变频器通讯地址(01)VB102 //modbus功能码(10/03)VB103 //变频器被写地址高位/变频器被读起始地址高位VB104 //变频器被写地址低位/变频器被读起始地址低位VB105 //被写数据个数高位/被读数据字个数高位VB106 //被写数据个数低位/被读数据字个数低位VB107 // 数据数/被发送数据CRC高位VB108 // 最初记录高位/被发送数据CRC低位VB109 // 最初记录低位 /VB110// 以后记录高位 /VB111 // 以后记录低位 /VB112 //被发送数据CRC高位VB113//被发送数据CRC低位(2).接收指令使用中断控制字符接受指令2.CRC校验子程序(SBR0)变频器内置的MODBUS协议采用RTU传输格式,该格式使用CRC校验方式对每次发出或接收的数据帧进行校验。
因此,该子程序使用了多个局部变量,以方便其它子程序调用。
在西门子STEP 7-Micro/Win 编程环境下(如图一),需要在该子程序的局部变量表中预先设定以下局部变量:(1)输入型局部变量(V AR_INPUT)1d_0:DWORD; // 待发送数据地址指针变量lw_4:WORD; // 待发送数据字节个数变量(2)输出型局部变量(V AR_OUTPUT)lb_6:BYTE; // CRC校验值高位变量lb_7:BYTE; // CRC校验值低位变量(3)临时局部变量(V AR)lw_8:WORD; // 待发送数据字节个数计数变量lw_10:WORD; // 待发送数据每字节8位二进制数计数变量Network 1LD SM0.0MOVW 16#FFFF, LW6 //将16位CRC校验寄存器LW6全置为1 Network 2LD SM0.0FOR LW8, +1, LW4 //对待发送数据字节个数(LW4)计数(LW8)循环Network 3LD SM0.0XORB *LD0, LB7 //使待发送数据的第一个字节(*LD0)与//CRC校验寄存器低位字节(LB7)进行异或运算Network 4LD SM0.0INCD LD0 //ld_0指向待发送数据的下一个地址Network 5LD SM0.0FOR LW10, +1, +8 //对每字节8位二进制数计数(LW10)循环Network 6LD SM0.0SRW LW6, 1 //CRC校验寄存器LW6右移一位Network 7LD SM1.1 //若移位后的溢出值SM1.1为1XORW 16#A001, LW6 //则使值16#A001与LW6进行异或运算Network 8NEXT //结束每字节8位二进制数计数循环Network 9NEXT //结束每数据帧字节个数计数循环3.初始化子程序(SBR1)该程序在PLC的第一个扫描周期运行,主要是设置CPU226自由端口的通信格式、数据接收格式及复位各寄存区(参见西门子S7-200编程手册)。
S7-200编程实例
S7-200编程实例H附录H:S7-200 应⽤⽰例本章概述节内容页H.1 模拟电位器 H–2H.2 怎样使⽤⾼速计数器 H–6H.3 ⾃由通信⼝模式的简单应⽤ H–10H.4 处理脉宽调制 H–13H–16H.5 可逆电动机起动器电路――适⽤于改变三相交流感应电动机旋转⽅向H.6 步执⾏顺序(事件⿎定时器) H–19H.7 S7-200⽤⾃由通信⼝模式和并⾏打印机连接 H–23H.8 通过⾃由通信⼝模式接受条形码阅读器的信息 H–27H.9 集成脉冲输出通过步进电机进⾏定位控制 H–31H.10 SIMATICH–37S7-221通过⾃由通信⼝模式控制贺⽒(Hayes)调制解调器H–43H.11 ⼏台SIMATIC S7-200 PLC使⽤⾃由通信⼝模式连接在⼀个远程I/O⽹络上H.12 S7-224与SIMOVERT电机驱动器之间的⾃由通信⼝通信接⼝ H-54H.13 ⽤S7-200 CPU 224 DC/DC/DC进⾏定位控制,并具有位置监H-64视和位置校正H.14 ⽤S7-200实现PID控制 H-80H.15 模拟量输⼊的处理 H-92H.16 S7-200与PC之间的连接:从Windows应⽤程序中读数据 H-98h ttp:///doc/81218a2de2bd960590c677cb.html 免费资料下载:/doc/81218a2de2bd960590c677cb.html H-1H.1 模拟电位器概述本例包含了有关 SIMATIC S7-200 的模拟电位器(POT)的使⽤信息。
电位器的位置转换为 0 ⾄ 255 之间的数字值,然后,存⼊两个特殊存储器字节 SMB28 和 SMB29中,分别对应电位器0和电位器1 的值。
需要⼀把⼩螺丝⼑⽤以调整电位器的位置。
本应⽤⽰例介绍了使⽤模拟电位器调整定时器设定值的三种⽅案。
例图模拟电位器⽅案1说明了⽤模拟电位器对定时器设定值进⾏细调的⽅法。
S7-200自由口通讯教程及编程实例
S7-200自由口通讯教程及编程实例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 CPU22X3. TC35 Terminal GSM调制解调器4. 一个9直通针转接头(用来连结PC/PPI电缆与TC35 Terminal调制解调器)5. 一根九针直通电缆(用来连结计算机与TC35 Terminal调制解调器)6. STEP 7-Micro/Win V3.2或更高版本软件一、TC35 调制解调器AT指令简介要使用TC35发送短消息需要使用TC35的AT指令,我们首先介绍如何用Windows自带的超级终端连接TC35发送短消息。
1.用九针直通的电缆将TC35连接到计算机的串口上2.打开超级终端(开始à程序à附件à通讯à超级终端)3.为连接取名Connect to TC35T4.选择TC35连接的串口COM15.按照下图的参数设置端口。
19 200 bps为TC35默认的端口波特率,如果该波特率已被更改,请选择正确的波特率。
6.在窗口中键入AT回车测试与TC35的连接,如果连接正确,TC35将返回OK。
7.TC35可以发送两种格式的短消息,普通文本格式和PDU格式。
应用普通文本格式时,短消息内容以ASCII码格式直接输入,操作比较简单,缺点是只能发送英文短消息;应用PDU格式时,短消息内容以Unicode格式输入,可以发送任何文字,缺点是短消息内容需要转换成Unicode码,并且要把短消息按PDU格式打包,操作比较复杂(编程复杂)。
西门子S7_200自由口通讯的两种VC实现方法
+> !,%I% +> = , !,G?%
GM% 9’& &G()), ,O&G GM(N&G())
应的寄存器
K8H &G(?)N&G()JNGM(J
在通讯中, 通常还要指令本身的校验, 必须加入指令校验子 程序, 由于各种通讯协议的校验不一致, 这里不对其进行讨论。
*
自由口通讯在 ’) 端利用 +"),-- 控件实现
,!’-.. 控 件 是 ,1B0-5-P4 公 司 提 供 的 简 化 的 C1QE-R5
下串行通讯编程的 HB41S/7 控件,它为应用程 序 提 供 了 通 过 串 口收发数据的简便方法。 在 &’JI% 开 发 环 境 下 使 用 ,!’-.. 控 件 必 须 首 先 利 用 ,F’ 向 导 在 工 程 中 添 加 该 控 件 。 *0-T/B4#UHEE 4- *0-T/B4#U ’-.L-Q/Q45 2QE ’-Q40-3III#U9/V154/0/E HB41S/ ’-Q40-35#U ,B01-5-P4 ’-...WQ1B241-Q5 ’-Q40-3N&JI% , 单 击 6D!A98, 所有步骤缺省。 OX, ?I( 串口的初始化 串 口 的 初 始 化 一 般 在 窗 口 创 建 函 数 ’8/54&1/RYY*0/’0/Z 也可在自定义的函数中实现。 24/C1QE-R[\ 中实现实现,
:F*5:(26GH24K<R;492<,"@A B B 强制清空接收寄存器 E
B B 数据传输速率为 N%"" B B % 位数据位 B B $ 位停止位 B B 无校验
S7-200自由口通信_发送方DEMO
自由口发送方程序:先发送3个字符‘a'、'b'、'c' 到接收方,然后转为接收状态,接收到对方的3个字符'1'、'2'、'3'后重新启动发送指令,将'd'、'e'、'f' 发送到接收方后再启动接收,随后收到3个字符‘4’、‘5’、‘6’。
然后重复上述过程。
网络 11. 初始化自由端口 - 选择9600 波特率; - 选择8位数据位; - 选择无校验。
2. 接收的起始条件:空闲线检测5ms 接收的结束条件:信息定时器100ms 接收的最大字符数:255个MOV_BENOENOUT IN MOV_BENOENOUT IN MOV_WENOENOUT IN MOV_WENOENOUT IN MOV_BENOENOUT IN ATCHENOENINTEVNTENISM0.116#09SMB3016#9C SMB87+5SMW90100SMW92255SMB94INT_0:INT09符号地址注释INT_0INT0发送完成中断:启动接收指令,并连接一个接收完成中断。
网络 2M0.0沿触发后,将第一次需要发送的字符 'a'、'b'、'c' 送到发送缓冲区,并触发发送指令。
PMOV_BENOENOUT IN MOV_BENOENOUT IN MOV_BENOENOUT IN MOV_BENOENOUT IN XMTENOENTBLPORTM0.03VB100'a'VB101'b'VB102'c'VB103VB1000网络 3定义两个字符数据。
为切换不同的发送缓冲区内容做准备。
MOV_BENOENOUT IN MOV_BENOENOUT IN SM0.0'1'VB300'4'VB301网络 4判断接收区第一个字符数据若满足条件,则向发送缓冲区传递新的数据:发送字符数3个,分别是'a'、'b'、'c'。
西门子200系列PLC自由口通信程序设计
西门子200系列PLC自由口通信程序设计之数据的发送在设计自由口通信程序时,自由口通信程序设计的核心就是使用发送指令XMT和接收指令RCV对数据进行发送和接收。
接收指令RCV应用的难点,在于如何设置“判断接收消息的起始条件和结束条件”,而对于发送指令来讲相对的比较简单,只需要准备好数据,然后使用发送指令发送出去即可。
但实际应用中是否是真的就是这样呢?在一个通信程序中,需要发送的数据可能比较多,比如说与三菱变频器的通信,通过三菱变频器的专用通信协议来通信,那么需要发送的数据时有运行命令,频率修改,读取一些参数,而且这些数据均不一样,因此需要先定义好不同的数据在不同的存储器,当发送哪个命令的数据时就需要把数据给过去。
真的是这样做吗?个人不赞同使用这种方法去做,个人比较赞同把需要发送的数据先做成一个功能块,然后根据需要发送的数据填写到这个功能块的管脚上,发送指令放于这个功能块中,当功能块接通一次,就对一次的数据发送出去。
就以三菱专用通信协议为例,发送运行命令和修改频率及读取一些参数的功能为例来进行说明。
三菱专用通信协议内容具体大家可以自己网上查找,这里不做详细的说明,这里我们主要看下PLC需要发送到变频器的数据的格式。
PLC往变频器写数据时需要发送的格式:根据数据长度的不一样分为三种格式,如下所示:PLC读取变频器数据的时需要发送的数据格式变频器运行代码、修改频率、读取变频器参数的代码如下表所示结合上面的发送数据的格式,和代码表,我们可以发现,发现运行命令,和发送频率,以及读取变频器的参数值的格式都不一样,但也有前面部分相同的内容,所以我们在设计功能块时需要做判断,判断是“读命令”还是“写命令”,如果是写命令,则还进一步判断是“写运行命令”还是写“频率命令”根据这原理,我们可以开始设计功能块。
(1)编写变量表(2)程序编写好功能块后,只需要在主程序中调用这些功能块,同时给不同的功能块赋实参即可,如下所示:本程序仅供参考,具体程序可参见技成培训网论坛!本文章由技成培训网曾鑫老师原创,如需转载,请授权!如果对您有帮助,请下载惠存!。
西门子S7-200PLC自由口实例代码
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为例,介绍其组成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的参数进行实时修改,达到管理、控制一体化。