7
西门子6ES7331-7HF01-0AB0接线图形
西门子S7-200程序中可以用以下几种方法实现:
种方法利用时基中断程序
时基中断包括定时中断和定时器中断.
定时中断可用来支持一个周期性的活动,周期时间以1ms为计量单位,周期时间可从5ms~255ms。对于定时中断0,把周期时间写入SMB34,对于定时中断1,把周期时间写入SMB35。每当达到定时时间值,相关定时器溢出,执行中断处理程序。
定时器中断可以利用定时器来对一个的时间段产生中断。这类中断只能使用1ms通电和断电延时定时器T32和T96。当所用定时器的当前值等于预设值时,在主机正常的定时刷新中,执行中断。下面分别给出程序例子:ORGANIZATION_BLOCK 主程序:OB1
TITLE=主程序:利用定时中断产生时钟脉冲
Network 1
LD SM0.1
MOVB 100, SMB34
ATCH INT0, 10
ENI
END_ORGANIZATION_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序:利用定时中断产生时钟脉冲
Network 1
LD SM0.0
INCB VB0
Network 2
LDB>= VB0, 10
XORB 2#1, 0
XORB VB0, VB0
END_INTERRUPT_BLOCK
ORGANIZATION_BLOCK 主程序:OB1
TITLE=主程序:利用定时器中断产生时钟脉冲
Network 1
LD SM0.1
ATCH INT0, 21
ENI
Network 2
LD SM0.0
LPS
AN M0.0
TON T32, 1000
LPP
A T32
= M0.0
END_ORGANIZATION_BLOCK
INTERRUPT_BLOCK INT_0:INT0
Network 1 LD SM0.0
XORB 2#1, 0
END_INTERRUPT_BLOCK
这种方法时钟周期可以调整,但打开和关闭时间相同。把程序代码拷贝下来,粘贴到一个文本文件中,然后就可以在STEP7-MicroWIN中导入。
二种方法,利用通电和断电延时定时器来实现,此方法不但可以调整时钟周期,还可以产生打开和关闭时间不同的时钟脉冲。下面给出两段例子程序。
段例子程序,我们用两个定时器产生时钟脉冲,实现原理是定时器1计时到位置位输出继电器位,同时启动定时器2开始计时,定时器2计时到位复位输出继电器位,同时启动定时器1开始计时,循环往复。两个计时器预设值的和为时钟周期,分别调整定时器1的预设值或定时器2的预设值,即可实现产生打开和关闭时间不同的时钟脉冲。
ORGANIZATION_BLOCK 主程序:OB1
TITLE=主程序:用两个定时器产生时钟脉冲
Network 1
LD SM0.0
LPS
AN Q0.0
TON T37, 10
LPP
A T37
S Q0.0, 1
Network 2
LD SM0.0
LPS
A Q0.0
TON T38, 20
LPP
A T38
R Q0.0, 1
END_ORGANIZATION_BLOCK
二段例子程序,我们用一个定时器同样可以实现上段例子的效果。实现原理是用一个定时器产生一个周期循环,即计时器到位复位重新计时,用一个比较指令,当计时器当前值大于某值时,置位输出继电器,计时器计时到位时复位输出继电器,调整计时器预设值可调整时钟周期,改变比较值,可实现产生打开和关闭时间不同的时钟脉冲。
ORGANIZATION_BLOCK 主程序:OB1
TITLE=主程序:用一个定时器产生时钟脉冲
Network 1
LD SM0.0
LPS
TON T37, 30
AW>= T37, 10
S Q0.0, 1
LPP
A T37
R Q0.0, 1
= M0.0
END_ORGANIZATION_BLOCK
对于一般要求精度不高的应用,我们使用这种方法。
三种办法,使用高速脉冲输出。
高速脉冲输出功能是指可以在可编程控制器的某些输出端产生高速脉冲,用来驱动负载实现控制。
对于西门子S7-200PLC,其开关量输出Q0.0和Q0.1编程时可用作高速脉冲输出。支持两种形式高速脉冲,高速脉冲串输出PTO和宽度可调脉冲输出PWM。我们使用宽度可调脉冲输出PWM也可实现时钟脉冲功能。下面给出程序范例:
ORGANIZATION_BLOCK 主程序:OB1
TITLE=主程序:用高速脉冲输出产生时钟脉冲
Network 1
LD SM0.1
MOVB 16#DB, SMB67
MOVW 3000, SMW68
MOVW 2000, SMW70
PLS 0
END_ORGANIZATION_BLOCK
此方法一般用于周期较短,控制精度要求较高的场合。把程序代码拷贝下来,粘贴到一个文本文件
四种方法,使用特殊存储器位SM。
特殊存储器位SM0.4提供1分钟时钟脉冲,该脉冲在1分钟的周期内关闭(OFF)30秒,打开(ON)30秒。
特殊存储器位SM0.5提供1秒钟时钟脉冲,该脉冲在1秒钟的周期内关闭(OFF)0.5秒,打开(ON)0.5秒。
特殊存储器位SM0.6提供扫描周期时钟脉冲,该脉冲为一次扫描打开,然后下一次扫描关闭。
这种方法使用简单,但时钟周期和开关时间固定,很多情况下不能满足要求
1 概述
电弧炉以及精炼炉在运行过程中其产生的高次谐波及强电磁场所形成的强大干扰,是严重威胁控制和通讯系统运行的主要原因。50吨炼钢电弧炉的电炉变压器额定容量为31500KVA,二次额定电流可达到42KA以上,其冲击和短路电流有时可达到和过100KA。强电磁场和电弧的弧光放电引起的宽带噪声干扰及高次谐波分量与闪变(电压波动),成为计算机及通讯网络,电子设备稳定和运行的主要问题。在方案设计和系统设计及PLC选型以及制造工艺设计时,都充分考虑和关注到系统所处的恶劣运行现场工业环境的抗扰问题。
在为太钢集团公司炼钢厂设计的50吨炼钢电弧炉及60吨钢包精炼炉控制系统中?穴50吨电弧炉和60吨钢包精炼炉的系统总结构图略,可向作者索取?雪,两台电炉的控制系统全部采用SIEMENS公司的S7-300系列PLC及其通讯技术。经过现场调试和运行结果证明该系统运行状态良好,性能稳定。 2 系统的总体设计
2.1 硬件结构的设计
整个系统采用4台SIEMENS S7-315-2DP PLC主站分别完成对电弧炉炉体控制、电弧炉电调节,钢包精炼炉炉体控制和钢包精炼炉电调节。在四台PLC主站之间采用SIEMENS公司的CP-342通讯模块构成PROFIBUS-S7通讯网完成各主站间的数据通讯。电弧炉炉体和钢包精炼炉炉体控制PLC主站共下设6个ET200远程从站,通过SIEMENS公司工业现场总线PROFIBUS-DP完成主——从通讯。系统设计使用一台工程师站,两台操作员站。三台工业计算机中分别采用SIEMENS公司CP5412网过PROFIBUS-S7 数据通讯网络完成计算机与各PLC主站之间的数据通讯。操作员站的画面组态软件选用SIEMENS公司的WINCC完成用户二次软件的开发。
炼钢电弧炉炉体控制PLC主站主要完成对35KV高压系统的合分闸操作及高压系统事故分闸的控制,对31500KVA电炉变压器及变压器油水冷却系统运行状态的监控和保护,并完成电炉水冷炉盖、水冷炉壁等水冷系统23个测温点水温变化情况的模拟量实时数据采集以及冷却水系统压力、流量等的实时数据采集监视和越限及事故报警。同时通过PROFIBUS-S7网向操作员站进行实时数据的传输,由人机界面完成监控数据的记录、显示和故障报警。
炼钢电弧炉的各ET200远程从站分别设置在炉前操作室、炉后操作室、液压泵站和液压阀站以及炉门碳氧喷的操作站内。分别构成炉前的炉盖和炉体动作操 作和控制炉前倾炉操作,三相立柱锁定和炉前电升降操作及炉门钢水测温I/O。炉后倾炉及EBT出钢操作、出钢钢包车操作和修理平台的旋转操作I/O。液 压泵站主、辅液压泵的切换和运行控制,对高压液罐和气罐的液位和压力控制、空气压缩机的控制、主液箱和回液箱的液位自动控制及液压介质自动温度控制的 I/O ,液压阀台的I/O 及炉门碳氧喷三维动作的操作及控制I/O。
钢包精炼炉炉体控制PLC主站的作用同炼钢电弧炉相似,ET200远程从站仅设置在钢包精炼炉的液压站内。
用于控制炉内电弧功率的炼钢电弧炉和钢包精炼炉电调节系统设计各采用一台SIEMENS S7-315-2DP PLC主站。主要承担输入炉内的三相电弧功率的实时自动控制,根据不同冶炼工艺和冶炼期自动修正功率配电曲线和控制参数,以满足冶炼工艺要求。设计采用 立设置的两套PLC主站作为电炉和精炼炉电调节系统可以减轻电炉和精炼炉炉体控制PLC主站CPU的负担,缩短程序扫描周期,有利于提高实时系统相应的 响应速度和调节精度。
2.2 控制软件的设计
四台PLC主站的用户程序是在基于SIEMENS公司的SIMATIC STEP7 Basis V5.0 软件平台上完成硬件组态、地址和站址的分配以及电弧炉和钢包精炼炉用户程序的设计开发的,在主程序(OB1)中将各种控制功能和各PLC站点间的通讯数据分别编写在不同的子程序(功能块FB、DB、FC)中,其中35KV高压合分闸、事故高压分闸,模拟量信号的输入均充分考虑了现场工业运行环境的强干扰问题,在软件设计中采用了抗干扰措施。
人机界面的画面组态采 用SIEMENS公司的SIMATIC WINCC作为二次用户程序开发的软件平台,在工程师站安装WINCC-RC用于开发,操作员站安装WINCC-RT用于运行,WINCC运行于 bbbbbbs NT V4.0 操作系统平台之上,以增加系统运行和稳定性,并给用户将来建立工厂管理网带来方便。
现场操作人员通过分别设置在电炉和精炼炉操作员站的人机界面监视整个系统各个主要参数的运行情况;这些参数包括:
输入炉内的三相电弧电流,三相电弧电压,三相电弧功率,电能耗的实时显示和历史趋势显示。冷却水系统温度监测点的水温监测以及流量及压力的监测和温越 限报警。35KV高压系统过流、欠压监测。电炉变压器的各种故障报警信号监测和报警,变压器低压侧过电流和高压跳闸信号的监测。炉体状态显示及液压系统的 工作状态监测。同时,在不同冶炼阶段炉内三相电弧工作电流的给定值、冶炼时间、35KV高压通电时间,钢水温度的显示以及各种报警参数的历史记录和打印报 表的生成。
2.3 通讯网络的组态
网络组态采用SIEMENS公司的SIMATIC NET,NCM S7 PROFIBUS组态软件完成PROFIBUS S7通讯网的网络组态。
在工程师站、操作员站分别设计安装CP5412网卡,在四台PLC主站安装CP342-5通讯模块,通过SIEMENS公司的PROFIBUS S7通讯电缆完成工程师站、操作员站和分别分布在电弧炉及钢包精炼炉主控制室的四台PLC主站之间的通讯网络硬件组态
3 抗干扰措施的设计和实施
在电弧炉炼钢的工业环境中,切实有效的硬件和软件抗干扰措施的实施成为系统设计和工厂设计及设备制造和安装过程中谨慎考虑的非常主要的环节。
根据现场运行实践证明,电炉变压器在高压合闸瞬间所产生的浪涌,大电流运行时变压器所产生的强磁场,炉内电弧以及大电流线路在电弧短路时所产生的强电磁 场,电网的谐波分量等诸因素综合起来的干扰源可视为一个从低频到甚高频的宽带噪声源,其所产生的各种干扰都将严重威胁系统运行及通讯网络的和稳定。 故而在设计中针对各种干扰的存在考虑了以下的抗干扰措施:
3.1 隔离电源
PLC主站和远程从站的工作电源均通过带屏蔽的隔离变压器完成对PLC电源供电,使PLC与大功率电气设备的电位隔离开来,以避免供电线路带来的噪扰。
3.2 电源滤波器
隔离变压器的二次侧采用电源滤波器以滤除和衰减以共模和串模形态出现的工频干扰。共模形态出现的干扰将沿地线被滤除,串模干扰则被旁路。
3.3 有源隔离端子
现场引入的模拟量输入信号和输出信号采用有源隔离端子将由地环路引起的噪声隔离,切断通过现场引入的模拟量信号地环路中的噪声通道。
3.4 模拟量输入通道的滤波
三相电弧电流、电弧电压等主要电气参数的模拟量采样信号输入通道在进入PLC模拟量通道前在经过有源隔离后再由有源滤波器抑制模拟量通道中的串模干扰,在保证有用信号不被衰减的情况下大限度地将高频噪声衰减,提高通道的信噪比。有源滤波能确保通道信号的增益。
3.5 模拟量通道的屏蔽
模拟量通道的输入信号传输导线设计采用耐高温的有屏蔽的双绞线电缆以降低辐射干扰和电磁耦合性干扰。
3.6 数字量输入通道的隔离
PLC的数字量输入通道采用光电隔离模块,从强电场现场环境(如高压开关室的真空断路器柜)引入的数字量信号在其触点和模块间加设中间继电器对通道进行双重隔离,防在真空断路器合闸操作同时强干扰串入而引起真空断路器误分闸动作。
3.7 数字量输出通道的隔离
PLC的数字量输出通道主要驱动交流和直流感性负载,大电流负载采用中间继电器过渡,所有通道均设计采用浪涌吸收和RC组件做为保护。
3.8 电磁屏蔽
工程师站和操作员站采用钢壳机箱的工控机,系统中的电子设备亦采用屏蔽外壳,再置入控制柜台内形成与柜台外壳间绝缘的双重电磁屏蔽。PLC采用悬浮安置方式将金属安装底版与柜壳绝缘隔离。所有电子设备均采用立引出的地线接地,柜台的外壳则接保护地。
3.9 电子设备的浮地供电
电子设备的直流供电电源采用浮地供电,输入和输出通道直流供电电源各自立。计算机采用在线式UPS电源供电,电子设备采用线性电源供电,其它直流负载采用开关电源供电。
3.10 通讯电缆的敷设
两个物理层的通讯电缆采用SIEMENS公司的 PROFIBUS通讯电缆(bus cable solid)?熏在敷设时单金属穿管。电缆的屏蔽层通过电缆插头的金属外壳经PLC的通讯模块CP和DP的接口接入立引出的地线接地。同时在电缆走向上注意避免与动力电缆平行,并尽可能远离电炉炉体和大电流线路。
3.11 地线
电弧炉炉体外壳采用相对立的接地线引出接地。
电气设备的保护接地进入工厂接地网。
计算机、PLC和通讯网络及电子设备的接地则进入立的地线。浮地处理的电子设备的地线各自立。
3.12 电气设备制造工艺的保
电气设备柜内的布局,柜内各种电缆和导线(动力、信号、通讯以及接地)的走向,屏蔽和接地的合理布置也是须在设计和设备制造过程中加以认真考虑的。
3.13 软件设计中的抗干扰处理
合理设置PLC的硬件时间及采样中断时间。在程序设计中对数字量输入信号采用脉宽甄别、锁存、指令复执技术。在对缓变的模拟量信号进行运算处理之前采用滑动均值滤波等数字滤波技术措施。在PID调节过程中对干扰比较敏感的一是当偏差e较小时,易受影响,二是微分项易引起较大变动。前者用一阶及一阶滞后滤波处理,后者则用不微分型PID算法。
设置合理的通讯波特率?熏包括PROFIBUS-S7和PROFIBUS-DP通讯物理层。
4 结语
在系统的热负荷调试和以后的运行情况表明,在设计中只要充分注意和采用正确合理的抗干扰措施,在恶劣的工业环境中SIEMENS S7-300系列PLC(四台主站设计选型均为S7-315-2DP)及其PROFIBUS的S7和DP通讯网络的稳定及经济运行是可以得到保证的。
SIEMENS公司的SIMATIC STEP7 Basis V5.0 编程平台安装在工程师站。基于bbbbbbs NT操作平台的支持下在系统运行过程中对各PLC主站程序的诊断、在线监控、修改和下载都比较方便和快捷。而符号名寻址方式使用户参照硬件原理图阅读理解 程序变得简明,NCM、Configuration等组态工具以及PID、Fuzzy Control++等软件开发工具包给设计编程人员减少了二次开发的工作量。
PROFIBUS S7通讯网和DP现场总线结构的集散控制方式使得现场布线的大量简化成为可能,工程造价的降低以及运行维护的经济性,系统设计的灵活性将受到用户的认可和欢迎。



西门子PPI协议分析:
西门子S7-200 PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。但是西门子公司没有公布PPI协议的格式。用户如果想使用PPI协议监控,购买其监控产品或三方厂家的组态软件。这样给用户自主开发带来一定困难,特别是自行开发的现场设备就不能通过PPI协议接入PLC。其它通讯方式编程也存在编程复杂,需要购买软件和授权等局限性(1)。通过数据监视、分析的方法,我们找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200 CPU之间通讯。
PC与PLC采用主从方式通讯,PC按如下的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC再返回给上位机相应数据。
一般上位机要连接PLC就要先发送如下数据 10 02 00 49 4B 16 你可以理解为我们常用的对讲机通话模式:00呼叫02,听到请回答 10起始符 02是之上位机要联系的下位级的地址站号 00就是上位级本本身自己的站号 49寻呼指令 16终止符 其中4B为校验码,是这样得来的:02+00+49的后两位就是校验码,这就是所说的偶校验或称和校验。计算器在16进制计算时公式(02+00+49)mod 100得出的数就是校验码,你计算一下是不是等于4B啊!其他的所有ppi协议校验都是如此。如02站号的PLC收到寻呼信号那么会回答: 10 00 02 00 02 16 意思是:报告00 ,02收到,请指示 这样的解释是不是有意思啊!你有好的解释吗?
我们先来看看西门子老型号的PLC的读密码指令:
请用串口软件以16进制发送,端口设置9600;e;8;1
发送:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16 意思:要求传送系统存储区05E0位开始的8个字符。
如果通讯无误,PLC会返回 E5,意思:已经收到
那么这时上位机再次发送指令 10 02 00 5C 5E 16 意思:请执行命令。那么这时PLC就真的执行命令了返回如下字符:68 1D 1D 68 00 02 08 32 03 00 00 00 00 00 02 00 0C 00 00 04 01 FF 04 00 40 9B 98 02 06 9D 9A 00 76 7D 16
好了,说到这里就此停止,大家看看密码是多少啊!你多做实验一定能得出的。
CN plc中的二次加密:
上面是plc所返回的密码,但是已经加密了,你如果不懂解码,还是算不出密码来。其实新版的plc不光cn一种,所有02版的plc在加密的时候都改动了密码,密码在传输的过程中进行了再加密!这就是的二次加密!看下面我做的通过串口监视截获的数据:
我下载程序,当软件要求我输入下载密码的时候,我输入密码:22222222,可是截获的竟然是一组这样的数据:68 21 21 68 02 00 7C 32 07 00 00 00 19 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 67 67 00 00 67 67 00 00 FE 16
提示: 67 67 00 00 67 67 00 00 其实就是我刚才输入的8个2的密码,在这里加密了。。。。
下面呢我公布一下二次加密的代码。大家来算一下,这个数据是怎么得来的。
密码代码:无大小写区分
0=65 1=64 2=67 3=66 4=61 5=60 6=63 7=62 8=6D 9=6C A=14 B=17 C=16 D=11 E=10 F=13 G=12 H=1D I=1C J=1F K=1E L=19 M=18 N=1B O=1A P=05 Q=04 R=07 S=06 T=01 X=0D Y=0C Z=0F
怎样读取PLC的版本号:
我们在***中要确定的是PLC的版本号。就是要看看是老版本还是02版的,也好做出加***方案。他的通讯源码是这样的:68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16
发送完上面数据PLC返回E5.再次发送确认指令:10 02 00 5C 5E 16 这时plc的版本号就返回来了。看下面:
68 29 29 68 00 02 08 32 03 00 00 00 00 00 02 00 18 00 00 04 01 FF 04 00 A0 43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 D7 16
你看这一段:43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 就是plc版本号的ascii码。用asc方式显示就会看的明白上面数据是:C P U SP 2 2 6 SP C N 0 2 0 1 (sp就是空格)
读取密码保护位(保护等级)指令
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 03 00 05 D8 C3 16
全部清空plc指令:
68 21 21 68 02 00 7C 32 07 00 00 00 24 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 16 19 06 0D 01 08 18 1E EE 16
读命令分析
一次读一条数据
对于一次读取一个数据,读命令都是33个字节。的0—21字节是相同的,为 :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
开始符 长度 长度 开始符 站号 源地址 功能码
SD LE Ler SD DA SA FC
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
0 1 2 3 4 5 6 7 8 9 10
SD LE LER SD DA SA FC DSAP
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
22 23 24 25 26 27 28 29 30 31 32
读取长度 数据个数 存储器类型 偏移量 校验 结束
DU FCS ED
02 00 08 00 00 03 00 05 E0 D2 16
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16
68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16
因为是PC上发的读PLC数据的命令,SA=00,DA=02,如果有b多个站,DA要改成相应的站号。读命令中从DA到DU的长度为1B即27个字节。从22字节开始根据读取数据的类型、位置不同而不同。表一是读不同存储器命令的Byte22—32。
字节 22 23 24 25 26 27 28 29 30 31 32
功能 读取长度 数据个数 存储器类型 偏移量 校验 结束
读q0.0 01 00 01 00 00 82 00 00 00 64 16
读m0.0 01 00 01 00 00 83 00 00 00 65 16
读M0.1 01 00 01 00 00 83 00 00 01 66 16
读SMB34 02 00 01 00 00 05 00 01 10 F9 16
读VB100 02 00 01 00 01 84 00 03 20 8B 16
读VW100 04 00 01 00 01 84 00 03 20 8D 16
读vd100 06 00 01 00 01 84 00 03 20 8F 16
读i0.5 01 00 01 00 00 81 00 00 05 68 16"
读i0.7 01 00 01 00 00 81 00 00 07 6A 16"
表 一 读命令的Byte22-32
从表中我们可以得出以下:
Byte 22 读取数据的长度
01:1 Bit 02:1 Byte
04:1 Word 06:Double Word
Byte 24数据个数,这里是01 ,一次读多个数据时见下面的说明。
Byte 26 存储器类型,01:V存储器 00:其它
Byte 27 存储器类型
04:S 05:SM 06:AI 07:AQ 1E: C
81:I 82:Q 83:M 84:V 1F: T
Byte 28,29,30存储器偏移量指针(存储器地址*8),如:VB100,存储器地址为100,偏移量指针为800,转换成16进制就是320H,则Byte 28—29这三个字节就是:00 03 20。
Byte 31 校验和,已说到这是从(DA+SA+DSAP+SSAP+DU) Mod 256 。
一次读多条数据
对于一次读多个数据的情况,前21Byte与上似只是长度LD,LDr及Byte 14不同:
Byte 14 数据块占位字节,它指明数据块占用的字节数。与数据块数量有关,长度=4+数据块数*10,如:一条数据时为4+10=0E(H);同时读M,V,Q三个不同的数据块时为4+3*10=22(H)。
Byte 22 总是02 即以Byte为单位。
Byte 24 以字节为单位,连续读取的字节数。如读2个VD则Byte24=8
Byte 19---30 按上述一次读一个数据的格式依次列出,
Byte 31---42 另一类型的数据,也是按上述格式给出。
以此类推,一次多读取222个字节的数据。
写命令分析
一次写一个Double Word类型的数据,写命令是40个字节,其余为38个字节。
写一个Double Word类型的数据,的0—21字节为 :
68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
写一个其它类型的数据,的0—21字节为 :(与上面比较,只是长度字节发生变化)
68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
从22字节开始根据写入数据的值和位置不同而变化。表二是几个写命令的Byte22—40。
字 节 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
写入位置及值长度 个数 类型 偏移量 位数 值、校验码、 结束符
M0.0=1 01 00 01 00 00 82 00 00 00 00 03 00 01 01 00 71 16
M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16
M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16
vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16
vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16
VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16
VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 16
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
开始符 长度 长度 开始符 站号 源地址 功能码
00 05 05 01 12 0A 10
68 21 21 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
68 20 20 68 2 0 7C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10
2 0 1 0 1 84 0 32 00 4 0 8 C B9 16
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
数据长度 数据个数 存储类型 偏移量 数据形式 数据位数 写入值 校验码 结束符
02 00 01 00 01 84 00 03 20 00 04 00 08 0C B9 16
01 00 01 00 00 82 00 00 00 00 03 00 01 01 79 16
表二 写命令的Byte22—40
经分析我们可以得出以下:
Byte 22-- Byte 30 写入数据的长度、存储器类型、存储器偏移量与读命令相同。T,C等不能用写命令写入。
Byte 32 如果写入的是位数据这一字节为03,其它则为04
Byte 34 写入数据的位数
01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word
Byte 35--40值、校验码、结束符
如果写入的是位、字节数据,Byte35就是写入的值,Byte36=00,Byte37=检验码,Byte38=16H,结束。如果写个的是字数据(双字节),Byte35,Byte36就是写入的值, Byte37=检验码,Byte38=16H,结束。如果写个的是双字数据(四字节),Byte35—38就是写入的值, Byte39=检验码,Byte40=16H,结束。
1、 报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值。其中蓝色的DA应为SA,即从二个其始符68H后一个字节到校验码个字节。
2“68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16
PLC返回数据 E5 后,确认读取命令,发送以下数据:
10 2 0 5C 5E 16
然后上位机VB程序接受到以下数据:
68 16 16 68 0 2 8 32 3 0 0 0 0 0 2 0 5 0 0 4 1 FF 4 0 8 22 78 16
识别目标地址和源地址,确认是这次申请的返回数据,然后经过校验检查,正确后解析出26号数据(&H22)即为VB100字节的数据。”用这个格式可以读S7-200中V变量的连续字节,从1个到222个(未验证,采用原文数据)。
对于上位机发出次指令中红色数据在读数时会改变,意义如下:
红色1表示的是读的字节数,可从1到222。
红色84为数据类型,参见上文。
红色03 20表示读的字节数的起始地址指针,从该地址开始连续读1到222个字节。
红色8B是校验码。
上位机接收到E5后发出的确认命令在读V变量是不会改变,一直是该几个字符。
下位机后发送的字符串中红色数据的意义如下:
红色16是报文长度,在这里也有规律,即读一个字节为16,读两个字节为17,N个字节为16+N—1。
红色0 8表示读的字节数,以8为单位,一个字节为8,两个字节为10,采用16进制,8个字节为40,依此类推。
红色22的这个位置在读N个字节时可以有N个数据,数据从起始字节地址开始依次排列。
红色78为校验码。