技术论坛

 回复:优化的FB块中用AT访问出错。谢谢。

返回主题列表
作者 主题
question
奇侠

经验值:5626
发帖数:872
精华帖:6
楼主    2017-09-25 16:50:07
主题:优化的FB块中用AT访问出错。谢谢。 精编帖 

看崔坚的西门子书,提到可以在FB优化访问块中用AT访问指令。前提是要把保持性设置为“在IDB中设置”


但是测试了一下,好像有些问题,特来向大神们请教?

谢谢。


下图是书上的内容:



drongh
Letham
至圣

经验值:14196
发帖数:2023
精华帖:43
1楼    2017-09-26 09:10:16
精编帖  主题:回复:优化的FB块中用AT访问出错。谢谢。

可以 肯定 是你的 使用有问题 !


看下 AT 怎么使用吧

1:Message STRING 类型 建立后

2:在下一行,必须是紧挨着的下一行,输入覆盖变量的名称,并且在 datatype 里 输入AT

3:这个时候会在AT_Meaasge 后面 出现 AT"Message“

4:把 AT_Messgae 类型改为 Struct

5:建立AT_Message struct 里面的变量



第 2,3步最为关键




和AT 变量覆盖 有类似功能的 用法 还有 片段访问和 SCATTER/GATHER 指令 ,灵活运用吧!

人生就像一场旅行!
Letham
至圣

经验值:14196
发帖数:2023
精华帖:43
3楼    2017-09-26 10:59:54
精编帖  主题:回复:优化的FB块中用AT访问出错。谢谢。

1:当声明STRING 时没有声明 字符个数时,系统默认为MESSAGE[254];

2:而SINT 的表示范围 -128---+127 之间。


解决办法 把MAX_LENGTH 改为UINT

人生就像一场旅行!
question
奇侠

经验值:5626
发帖数:872
精华帖:6
4楼    2017-09-26 12:07:22
精编帖  主题:回复:优化的FB块中用AT访问出错。谢谢。

谢回复。尝试着改成uint,还是报警,意思大概为At后的变量长度超出原变量。因为uint长度大于sint。我查了相关书籍,string确实为254个byte。


可能是其它原因导致的。

drongh
Letham
至圣

经验值:14196
发帖数:2023
精华帖:43
5楼    2017-09-26 12:47:54
精编帖  主题:回复:优化的FB块中用AT访问出错。谢谢。

不用找了 

最根本原因 就是下面的!

1:当声明STRING 时没有声明 字符个数时,系统默认为MESSAGE[254];

2:而SINT 的表示范围 -128---+127 之间。


我范了原则性错误,字符串所占空间 是 字符个数+2,最大是256,如果将MAX_LENGTH改为 UINT,那么 AT_MESSAGE 的长度 为257 bytes 大于256了!

不要钻牛角尖了 ,缩小 MESSAGE ,或者 将 MAX_LENGHT 改为 USINT (0-255)即可!

人生就像一场旅行!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。