6GK7343-1EX30-0XE0参数详细
通信功能的实现
通信程序要实现S7-300向一个S7-200站发送7个字节的数据,然后接收并存储该S7-200返回的6个字节数据。S7-300发送的7个字节中,第1个字节是地址信息,第2、3、4字节是吸泥泵及刮泥桥控制数据信息,第5、6字节是1、2字节和3、4字节异或值,作为校验判断信息,第7位字节数据信息无意义,仅仅是为了触发一次S7-200的字符接收中断程序;S7-200向S7-300发送的6个字节中,第1个字节是S7-200的站地址信息,第2、3、4字节是吸泥泵及刮泥桥状态数据信息,第5、6字节为校验信息。
3.1 S7-300端通信程序
在自由口模式下,无论S7-200还是S7-300,通信协议完全由程序控制。CP340通过调用FB2 P_RCV来接收数据,调用FB3 P_SEND来发送数据。发送功能块FB3 P_SEND的参数REQ上升沿初始化发送请求,参数DB_NO指定发送数据块编号,参数DBB_NO是发送数据在参数DB_NO指定数据块中起始字节,LEN指定传输数据的字节长度;接收功能块FB2 P_RCV参数EN_R允许读数据,参数DB_NO指定接收数据块编号,参数DBB_NO是接收数据在参数DB_NO指定数据块中起始字节。
S7-300采用轮循方式与两S7-200通信,即秒内向1号站发送数据,然后接收1号站返回的数据(S7-200在接收到S7-300发送的数据后会立刻向S7-300发送数据);第二秒内向2号站发送数据,然后接收2号站返回的数据,不停地循环通信。
S7-300通信程序详细介绍
AN M 30.0
L S5T#2S
SD T 1
A M 30.0
R T 1
L T 1
T MW 40
NOP 0
A T 1
= M 30.0
//设一2秒定时器,定时时间到自动进行下一次定时,当前值存入MW40
A(
L MW 40
L 102
>I
)
A(
L MW40
L 200
)
= M30.1
// 定时器秒钟内,即102 A( L MW 40 L 2 >I ) A( L MW 40 L 100 ) = M 30.2 //定时器第二秒钟内M30.2为1 A ( A M 30.1 JNB _001 L 0 T MW 34 SET SAVE CLR _001: A BR ) JNB _002 T MW 36 _002: NOP 0 // M30.1为1时,即定时器秒内,使MW34=0、MW36=0,作为起始字节值 A ( A M 30.2 JNB _003 L 8 SET SAVE CLR _003: A BR JNB _004 _004: NOP 0 // M30.2为1时,即定时器第二秒内,使MW34=8、MW36=8,作为起始字节值 O M 30.1 O M 30.2 = M 33.0 A M 33.0 = L 20.0 BLD 103 CALL "P_SEND" , DB19 REQ :=L20.0 R := LADDR :=320 DB_NO :=2 DBB_NO:=MW34 LEN :=7 DONE :=M50.1 ERROR :=M50.2 STATUS:=MW52 NOP 0 // 调用发送指令,当M30.1为1时(其上升沿初始化发送请求),即定时器秒内发送DB2.DBB0起始的7个字节,个字节为1站地址;当M30.2为1时(其上升沿初始化发送请求),即定时器第2秒内发送DB2.DBB8起始的7个字节,个字节为2站地址 A M 33.0 = L 20.0 BLD 103 CALL "P_RCV" , DB20 EN_R :=L20.0 R := LADDR :=320 DB_NO :=22 DBB_NO:=MW36 NDR :=M60.1 ERROR :=M60.2 LEN :=MW62 STATUS:=MW64 NOP 0 // 调用接收指令,当M30.1为1时(允许读数据),即定时器秒内接收1号S7-200站回传的6字节数据,存入DB22数据块中,起始字节为DB22.DBB0;当M30.2为1时,即定时器第2秒内接收2号S7-200站回传的6字节数据,存入DB22数据块中,起始字节为DB22.DBB8 3.2 S7-200端通信程序 S7-200 PLC程序分为主程序、子程序和中断程序,主程序完成控制和子程序调用功能,子程序完成通信口初始化功能,中断程序完成数据的接收和发送功能。发送数据采用发送指令XMT,接收数据采用逐字节接收方法,通信口接收每个字节都会暂存到特殊存储器SMB2中,并且产生中断,利用中断程序控制数据的接收。由于S7-200CPU的通信是建立在RS-485半双工通信硬件的基础上,接收和发送不能同时进行。通信中断程序要做到:接收指令不结束,就不能执行发送指令。 反映S7-200CPU工作方式的模式开关当前位置的特殊存储器位为SM0.7,它控制自由端口模式的进入。当模式开关处于TERM位置时,SM0.7为0;当模式开关处于RUN位置时,SM0.7为1。SMB30是自由口模式控制字节,用来设定校验方式、通信协议、波特率等通信参数(其各个位含义参阅相关手册),中断事件号8为端口0接收字符中断,中断事件号9为端口0发送完成中断。 当SM0.7为1时,调用子程序SBR_0设置SMB30,允许进行自由口通信;SM0.7为0时,调用子程序SBR_1重新设置SMB30,停止自由口通信,恢复PPI通信,便于用Micro/WIN软件对CPU运行状态进行监视 S7-200通信程序详细介绍(1号站) 主程序MAIN(只给出与通信有关程序) LD SM0.1 MOVB 1, VB1 //设置站地址 LD SM0.7 EU O SM0.1 CALL SBR_0 //运行或模式开关从TERM打到ON时定义通信口为自由口 LD SM0.7 ED CALL SBR_1 //模式开关从ON拨到TERM时定义通信口为PPI从站 子程序SBR_0 LD SM0.0 MOVB 16#09, SMB30 ENI ATCH INT_11, 8 //定义通信口0为自由口模式,9.6K波特率,无校验,8位数据位,连接接收字符中断为中断程序INT_11 子程序SBR_1 LD SM0.0 MOVB 16#C0, SMB30 DTCH 8 DTCH 9 //恢复普通PPI通信设置 中断程序INT_11 LD SM0.0 AB= SMB2, VB1 MOVW +5, VW200 MOVD &VB640, VD688 ATCH INT_12, 8 //若站地址正确,连接接收字符中断到中断程序INT_12,并使VW200=5来计数,在INT_12中连续接收五个字节;若站地址错误,则继续由INT_11接收字节数据,要在S7-300中程序中将其余六个字节的高位进行设计,避免出现为内容1或2地址信息的字节,即使传输过程中因外界干扰,其余六个字节出现为1或2的假地址情况,程序也会在接下来1~2个接收过程中,因INT_13中断程序中的校验指令作用,得到错误校验值,而恢复到正常接收状态。 中断程序INT_12 LD SM0.0 MOVB SMB2, *VD688 INCD VD688 DECW VW200 //接收5个字节 LD SM1.0 MOVB 1, VB639 MOVW VW639, VW700 XORW VW641, VW700 ATCH INT_13, 8 //通过异或指令进行数据校验,连接接收字符中断到中断程序INT_13,即由第七个字节触发中断程序INT_13 中断程序INT_13 LD SM0.0 DTCH 8 //中断分离 LDW= VW700, VW643 MOVD VD640, VD400 //校验正确,将控制信息数据存到VB400~VB402 MOVB 6, VB600 MOVB VB1, VB601 BMB VB100, VB602, 5 ATCH INT_14, 9 XMT VB600, 0 //校验正确,使能发送,发送6字节数据VB601~VB606,连接发送指令结束到中断程序INT_14 LDW<> VW700, VW643 ATCH INT_11, 8 //校验不正确,连接接收字符中断到中断程序INT_11,进行新一次接收 中断程序INT_14 LD SM0.0 DTCH 9 ATCH INT_11, 8 //发送结束则连接接收字符中断到中断程序INT_11,进行新一次接收 4 电台选型和故障判断 数传电台选择了深圳友讯达科技发展公司的FC-201/B,该数传电台以其价格合理、运行稳定在国内得到广泛应用。通过友讯达提供的电台软件pfc5对电台进行参数设置,在S7-200两个站处将电台参数设置为:发射频率453.00,接收频率465.00,空中速率1200bps,工作模式为透明模式,串口波特率9600bps,串口校验和设为无;在S7-300站处将电台的参数中发射频率设为465.00,接收频率设为453.00,与S7-200站处电台收发频率对应,其余参数一致。 FC-201/B数传电台有一个发送和接收指示灯,当发送数据时为红灯,接收数据时为绿灯。根据此灯可以方便的判断通讯是否正常,正常情况下,S7-300轮循方式与两S7-200通信,即秒内向1号站发送数据,然后接收1号站返回的数据(S7-200在接收到S7-300发送的数据后会立刻向S7-300发送数据);第二秒内向2号站发送数据,然后接收2号站返回的数据,不停地循环通信。S7-300站处电台通讯指示灯红闪一下,接着绿闪一下,处在不停的红-绿-红-绿循环状态。而S7-200站在接收S7-300发送的数据时,要经过地址数据字节判断,确认地址为本站,并且对接收数据进行校验,确定接收数据无误才回传S7-300数据,但是只要S7-300发送数据,S7-200就接收数据,即使是发送给另一个S7-200站的数据。所以在无外界干扰,数据发送没有校验错误的情况下,S7-200站处的电台通讯灯是绿闪两下,红闪一下,处在不停的绿-绿-红循环状态,即接收两次数据,发送一次数据。如果通讯出现故障,根据通讯灯的闪烁状态,便可很容易查出通讯故障所在。 BCD码的大值是9999,因为一个字16个位,每四个为代表一个十进制的数; BCD码(Binary-Coded Decimal)是二进制编码的十进制数的缩写,BCD码用4位二进制数表示一位十进制数。BCD码各位的数值范围为2#0000~2#1001,对应于十进制数0~9。BCD码不能使用十六进制的A~F(2#1010~2#1111)这6个数字。BCD码本质上是十进制数,因此相邻两位逢十进一。
1001100110011001:对应的就是9999,大值
以上的二进制数,在十六进制里的表示也是16#9999,但是它十进制值不是9999,而是39321
一个字节的十六进制数大值是:FFFF
9999十进制转换为十六进制数是270F没有错,这里9999不是BCD码,而是十进制的一个数值;数据在plc都是以二进制的形式存储的,格式上的不同,它的所表示的数也不同,比如某个数据时以BCD码的格式存储的,那么你要显示成十进制,就要进行转换,否者数值是不对的。以系统时钟为例,读取后的时间值是以BCD码存储的,假如取今年的年份,那么这个字节对应的BCD码就是,0001 0101 对应BCD码的值为15 ,但是系统显示的是十进制数,是21;所以要经过转化;
///我的理解是,BCD是一种数据的存储格式,这数据可以被用到别的数据场合,那么它表示的意思就不同了。
BCD码的高位二进制数是符号位,负数的符号位为1,正数为0。16位BCD码的范围为–999~+999。
下图的拨码开关将显示的数字转换为4位二进制数。PLC用12个数字量输入点读取的是3位BCD码,它的值为2#1,即十六进制数16#829。
BCD码没有单独的表示方法,而是借用了十六进制的表示方法,因此二者很容易混淆。
下图是S7-300/400的BCD码和整数的相互转换指令,可以看到在指令中BCD码均用十六进制的形式表示。
在程序中,怎么知道一个数字是BCD码还是十六进制数呢?
1)看数据的来源和用途。BCD码一般用于输入和输出,例如来自拨码开关的数据是BCD码,送给显示电梯楼层的译码器芯片的是BCD码。
2)看手册的规定,例如数据类型DATE_AND_TIME中的日期和时间值是BCD码,计数器的预设值PV和当前计数值CV_BCD为BCD码。
怎样监视BCD码?
在变量表和程序状态监控中,用十六进制格式监视BCD码。
怎样输入BCD码?
从上图可以看出,BCD码用十六进制格式输入,其高位(符号位)为16#F(2#1111)。BCD码的低3位各位只能是0~9,如果是16#A~16#F则会出错。
计数器的预设值PV是0~999的BCD码,可以用格式为C#的常数(C#1~C#999)作为计数器的预设值。
下图用MW42提供计数器的预设值PV,如果用MOVE指令将十进制数348(对应的十六进制数为16#15C)传送给MW42,进入RUN模式时,操作系统将它转换为BCD码时出错(16#15C不是BCD码),不能切换到RUN模式。
输入预设值348时,应改为将C#348传送给MW42,它会自动地变为W#16#348,当然也可以直接输入16#348。没有必要用I_BCD指令将348转换为BCD码W#16#348后,再传送给MW42。S7-300/400有很多好东西,只是我们不太熟悉而已。下面的方法是否更简单好用?
只需要调用IEC库里的FC33 S5TI_TIM,将数据类型S5TIME转换为数据类型TIME。IEC格式的时间TIME是以ms为单位的双字,将TIME格式的时间除以1000就是以秒为单位的时间值。
下图中T0的时间设定值为99s,S5TI_TIM输出的是94500sm(94.5s),显示格式为十进制。将T0的设定值改为9990s、999s和9s,S5TI_TIM都能输出正确的时间值。