欢迎光临入喜工业控制技术(上海)有限公司
当前位置
首页 > 新闻中心
西门子关于使用BLKMOV指令由BYTE转换位字符串的疑问
2021/7/6 10:39:13
西门子关于使用BLKMOV指令由BYTE转换位字符串的疑问

请问可位大神,在DB块中,有一个区间是BYTE【120】,此区间是PC传送给PLC的,并且内容应该是一串字符串。此时我使用了BLKMOV将BYTE[120]这个区间传送到另一个我定义的STRING[120]的区间,转换位字符串。这里有两个问题:一是听说前两个BYTE是字符串的最长长度和有效长度,从第三个BYTE开始才是字符串内容,但是我实际试下来好像并非如此,从第一个BYTE开始就是内容了,请问这是怎么回事?第二个问题是究竟从BYTE【120】传到STRING【120】他里面的内部规则是什么样子的?


图片说明:

           

1、你说的是通讯是系统加的数据流的头和尾,接收后头尾自动删除了,所以你看不到这个信息,除非你自己写通讯功能。
2、它是一一对应的
首先需要厘清2个问题:
1、BLKMOV指令,仅仅以“块BLOCK”为单位搬运数据,没有转换数据类型的功能,是一个空间对另一个空间的存储内容(二进制序列)的复制,不涉及数据类型。
2、字节BYTE并不等同CHAR。CHAR字符在计算机上存储,是以其ASCII码存储的,占一个字节BTYE。换句话说,任何一个字符CHAR有一个BYTE数据与之对应。但并不是所有的byte类型数据都有与之对应的字符,如00H,进行ASCII码转换是空操作,没有对应任何字符。
因此,你在Array of Byte到String进行转换时,必须确认每个字节的值的有效性。
3、字符数组,不等同于字符串。字符数组是字符(ASCII码)为元素的一个队列。而字符串,除了这个队列外,在队列之前还必须有两个字节用于申明:这个队列允许的最大长度是多少,当前实际长度是多少,多了两个字节。
再回到你的问题,建议分两步实现:
1、BLKMOV的目标操作数,修改为:P#DB1074.DBX956.0为P#DB1074.DBX958.0后移两个字节。
2、对DB1074.DBb957赋值120.

用 Chars_TO_Strg 指令。
如图是数据定义、以及测试的示例
资料
https://www.ad.siemens.com.cn/productportal/prods/s7-1200_plc_easy_plus/07-Program/03-instruction/02-Extend/02-String.htm


图片说明:

  

联系方式
CONTACT US

电话:13818569113      15721373211

邮箱:fushidianji@139.com

网址:http://www.jiansujiabc.com

地址:上海青浦区北青公路7171号111-112室

用手机扫描二维码关闭