当前位置: 主页 > PLC控制

s7 200如何往一个字节中写入一个字符?

请教各位老师,我测试了一个自由口发送I/O状态程序,但遇到个问题,我无法用MOVB‘F’,VB60写一个字符到一个字节中,编译成功的,但下载PLC中就跳ERROR了。请问各位老师该怎么处理?
PS:小程序在下面,主要想实现把I/O口用16进制字符串形式通过自由口发送到上位机,但基础较差,不会将一个字节内数据转成字符串,只好用笨办法读表,各位老师有什么好方法吗?还请不吝指导,分比较少,先谢谢了。
主程序:
LDSM0.1
CALLInitialize:SBR0

Initialize:SBR0程序:
LDSM0.0
MOVB16#09,SMB30
MOVB100,SMB34
ATCHINT_0:INT0,10
ENI

io_CONVERT:SBR1程序:
//I/O状态映射表
LDSM0.0
LPS
AB=VB50,16#0F
MOVB‘F’,VB60
LRD
AB=VB50,16#0E
MOVB‘E’,VB60
LRD
AB=VB50,16#0D
MOVB‘D’,VB60
LRD
AB=VB50,16#0C
MOVB‘C’,VB60
LRD
AB=VB50,16#0B
MOVB‘B’,VB60
LRD
AB=VB50,16#0A
MOVB‘A’,VB60
LRD
AB=VB50,16#09
MOVB‘9’,VB60
LRD
AB=VB50,16#08
MOVB‘8’,VB60
LRD
AB=VB50,16#07
MOVB‘7’,VB60
LRD
AB=VB50,16#06
MOVB‘6’,VB60
LRD
AB=VB50,16#05
MOVB‘5’,VB60
LRD
AB=VB50,16#04
MOVB‘4’,VB60
LRD
AB=VB50,16#03
MOVB‘3’,VB60
LRD
AB=VB50,16#02
MOVB‘2’,VB60
LRD
AB=VB50,16#1
MOVB‘1’,VB60
LPP
AB=VB50,16#0
MOVB‘0’,VB60

//INT0中断程序
TITLE=INT0中断程序
Network1
//将IB0低四位取反再取出,存于vb20按照格式0000XXXX
LDSM0.0
MOVBIB0,VB10
AENO
INVBVB10
AENO
MOVBVB10,VB20
ANDB2#1111,VB20
Network2
//将IB0高四位取反再取出,存于vb25按照格式0000XXXX
LDSM0.0
MOVBVB10,VB24
AENO
ANDB2#11110000,VB24
AENO
MOVBVB24,VB25
SRBVB25,4
Network3
//将IB1低四位取反再取出,存于vb30按照格式0000XXXX
LDSM0.0
MOVBIB1,VB11
AENO
INVBVB11
AENO
MOVBVB11,VB30
ANDB2#1111,VB30
Network4
//将IB1高四位取反再取出,存于vb35按照格式0000XXXX
LDSM0.0
MOVBVB11,VB34
AENO
ANDB2#11110000,VB34
AENO
MOVBVB34,VB35
SRBVB35,4
Network5
//将vb0低4位转化成字符串,VB50为参数入口,vb60为结果出口,下同
LDSM0.0
LPS
MOVBVB20,VB50
AENO
CALLSBR1
LPP
MOVBVB60,VB105
Network6
//将vb0高4位转化成字符串
LDSM0.0
LPS
MOVBVB25,VB50
AENO
CALLSBR1
LPP
MOVBVB60,VB104
Network7
//将vb1低4位转化成字符串
LDSM0.0
LPS
MOVBVB30,VB50
AENO
CALLSBR1
LPP
MOVBVB60,VB103
Network8
//将vb1高4位转化成字符串
LDSM0.0
LPS
MOVBVB35,VB50
AENO
CALLSBR1
LPP
MOVBVB60,VB102
Network9
LDSM0.0
MOVB‘>’,VB101
MOVB‘@’,VB106
Network10//网络标题
//将16通道I/O口接通情况发送至自由口,协议为:<+16位通道I/O状态+@
LDSM0.0
MOVB6,VB100
XMTVB100,0

问题补充:
WWCWWC:你好,感谢回答。我只用到自由口定时发送数据,上位机只接收。还需要通过SMB86/SMB88/SMB89设定协议的起始符和结束符吗?我在中断程序中设定的协议起始符和结束符是上位机做判断一串数据用的。
您能否留个邮箱或者发封邮件给我,我想关于这个问题详细问问,这里回复不了,交流不友好,我邮箱是:baobao13579190@sina.com
谢谢!

最佳答案

没有plc无法测试,只能凭自己以前做过的认识。
字符写入到VB区是没有问题的,只能总感觉你调用定时中断SMB34内容太多;你定义了起始、结束符标记,但没有定义标记值,即SMB86/SMB88/SMB89,这些定义在初始化子程序(SBR_0)中定义,而不是在中断程序的网络9定义的。
补充问题回复:
要的,这个是通讯的规约。用户只能选择起始、结束符;空闲线时间或者两者的结合。

提问者对于答案的评价:
老师,我单独试通讯是成功的(就是把I/O_CONVERT程序屏蔽)PLC也亮绿灯,单独新建一个程序就测试这个语句不涉及通讯就不行,PLC亮红灯,请问是语句格式错了还是什么问题?
LDSM0.0
MOVB”F”,VB60
您能给我发个邮件吗?我想向您详细问下感谢!我邮箱是:baobao13579190@sina.com

最佳答案作者回复:
写入字符是用单引号,如‘F’,这个你应该注意。另外你采用16#制数传送试试。
LDSM0.0
MOVB16#0F,VB60

  • 关注微信

猜你喜欢

微信公众号