lanjinghao
师夷洋技以制夷!!!
级别: 略有小成
精华主题: 0
发帖数量: 21 个
工控威望: 234 点
下载积分: 600 分
在线时间: 21(小时)
注册时间: 2009-05-06
最后登录: 2012-09-18
查看lanjinghao的 主题 / 回贴
楼主  发表于: 2009-07-15 10:58
  程序说明:EM235用采样交流电压信号,1ms执行一次采样中断。将采样值存储到VW4000~VW4198中100个空间。并将VW4000~VW4198的值在触摸屏显示出来,用于观察交流电压信号波形。现在建立一个指针VD4488,并且把指针指向VW4000地址。然后将AIW0赋给×VD4488,然后VD4488加2进行指针偏移。当VD4488=4198时再重新初始化指针VD4488。

AIW0数据处理




数据存储处理




-----------------------
现在问题出来了: VD4488的值竟然为134222128,而不是4000~4198之间的值。无法执行指针偏移以下的指令。这是为什么啊?VD4488存储空间的值应该是个地址啊,怎么会是134222128?
伟大的光荣的正确的中国人民万岁!!
lanjinghao
师夷洋技以制夷!!!
级别: 略有小成
精华主题: 0
发帖数量: 21 个
工控威望: 234 点
下载积分: 600 分
在线时间: 21(小时)
注册时间: 2009-05-06
最后登录: 2012-09-18
查看lanjinghao的 主题 / 回贴
1楼  发表于: 2009-07-16 11:14
怎么没人指导啊?
我用填表指令解决这个问题了,还是搞不懂上面的指针问题
伟大的光荣的正确的中国人民万岁!!
以恒
Blog: http://ye_w.plcjs.cn/
级别: 工控侠客

精华主题: 5 篇
发帖数量: 467 个
工控威望: 3090 点
下载积分: 4172 分
在线时间: 68(小时)
注册时间: 2007-08-26
最后登录: 2024-09-22
查看以恒的 主题 / 回贴
2楼  发表于: 2009-07-16 15:00
指针是VW4000对应的实际物理地址,而不是VW4000本身
本帖最近评分记录:
  • 下载积分:+2(sjm213) 热心助人,加分表扬
  • 欢迎大家访问我的BLOG:  [URL]http://ye_w.plcjs.cn/[/URL]

    1、ABB AC500系列PLC培训或技术支持
    2、购买PLC和方案咨询电话:13973322058
    3、其他请通过邮箱:07330731@163.com
    以恒
    Blog: http://ye_w.plcjs.cn/
    级别: 工控侠客

    精华主题: 5 篇
    发帖数量: 467 个
    工控威望: 3090 点
    下载积分: 4172 分
    在线时间: 68(小时)
    注册时间: 2007-08-26
    最后登录: 2024-09-22
    查看以恒的 主题 / 回贴
    3楼  发表于: 2009-07-16 15:02
    地址指针是先建立后使用,你弄反了
    欢迎大家访问我的BLOG:  [URL]http://ye_w.plcjs.cn/[/URL]

    1、ABB AC500系列PLC培训或技术支持
    2、购买PLC和方案咨询电话:13973322058
    3、其他请通过邮箱:07330731@163.com
    lanjinghao
    师夷洋技以制夷!!!
    级别: 略有小成
    精华主题: 0
    发帖数量: 21 个
    工控威望: 234 点
    下载积分: 600 分
    在线时间: 21(小时)
    注册时间: 2009-05-06
    最后登录: 2012-09-18
    查看lanjinghao的 主题 / 回贴
    4楼  发表于: 2009-07-17 08:09
    指针我已经建立了,在初始化时就建立了。没有贴出来而已。WOVD &VB4000 VD4488.
    按理来说VD4488存储空间的值应该是VB4000的地址了,那VD4488的值是否为4000?
    伟大的光荣的正确的中国人民万岁!!
    醉湮邃虞
    醉湮邃虞话老黑
    级别: 略有小成
    精华主题: 0
    发帖数量: 229 个
    工控威望: 409 点
    下载积分: 1577 分
    在线时间: 209(小时)
    注册时间: 2009-01-16
    最后登录: 2015-03-18
    查看醉湮邃虞的 主题 / 回贴
    5楼  发表于: 2009-07-17 12:21
    感觉你有概念性的错误。网络2是中断程序吧?
    首先VD4488中如果是PLC的地址,那个数值是没有错误的,在PLC表示的绝对地址的表述是那样的。所以网络2中的比较指令是错误,比较指令错误的。如果需要,你比须这样试验一下:
    MWD &VB4000 VD0
    mwd &vb4198 vd4
    运行后观察 VD0和VD4的值。不同类型的PLC可能数值也不相同,
    我用的224XP,这分别是:134221728 和 134221926


    你的指针赋值也有问题,建议你在VD4448中,放置偏移量。
    然后这样
    赋值指针:
    MOVD  &VB4000 ,AC1
    ADD AC1,VD4488
    保存数据及修正指针
    MOVE 数据 *AC1
    INC  VD4488
    INC  VD4488
    IF VD4488>100 than vd4488=0
    中断返回

    你的程序中,找不到指针移动的语句。或许你在中断以外移动了。(这不可能)
    或许你认为那句是移动了,但是按照你程序的思想,你使用了>号,故移动指针指令是不执行的(实际因为概念性错误是永远执行的,指针数据因此在大约4秒后,遭到破坏)、而而指针初始化操作的地址,VD4488也写成了,VD488,所以,你的中断程序没有对指针进行任何操作。

    这样程序很清晰,AC0中是数据,AC1是地址指针。VD4488中是偏移量

    这样做还有个好处,特别是指针操作,使用累加器比使用内存来的快的多。毕竟你的程序使用了1毫秒中断,需要很高的处理速度,有可能会发上上个中断还没处理完,另个中断已经到来了,会发生中断队列溢出,、而而造成系统崩溃或采集数据失真。PLC的扫描周期通常在7毫秒左右,视程序大小,大的会长些,小的会短些。
    你中断程序中竟然还要调用子程序,你应该把数据准备好,或者直接读取原始数据,分析与处理放在中断以外。

    其实你完全没有必要使用1毫秒中断,触摸屏的显示与PLC中的数据通常不同步,长的能相差2秒以上呢。如果把中断调整到10或50毫秒,调试起来会很轻松。也没必要追求指令执行时间。
    [ 此帖被醉湮邃虞在2009-07-17 13:04重新编辑 ]
    本帖最近评分记录:
  • 下载积分:+5(sjm213) 优秀文章,加分奖励
  • 棋牌比赛免费得实物,闲暇好去处
    http://www.jj.cn/indexTG.html?promoterid=108502812
    lanjinghao
    师夷洋技以制夷!!!
    级别: 略有小成
    精华主题: 0
    发帖数量: 21 个
    工控威望: 234 点
    下载积分: 600 分
    在线时间: 21(小时)
    注册时间: 2009-05-06
    最后登录: 2012-09-18
    查看lanjinghao的 主题 / 回贴
    6楼  发表于: 2009-07-17 15:03
    呵呵,谢谢楼上的指导。上午我用指针加计数器勉强解决这个问题,你提出的方案更好一些。我已经把指针处理的程序移到中断之外了,中断仅仅做数据采样,而且我发现调用库里头的数据处理子程序算出来的数据有问题,可能和1ms的中断时间太短有关。后来改为自己计算处理,勉强能得出合理的数据。这个程序主要是想显示电压波形,没办法50HZ工频只能用1ms的中断来采样了。

    现在还有个问题是,触摸屏不能显示负整型数值,也就是说不能显示负值,把正负标志位当成1来显示了,有什么办法来解决这个问题啊?改为实数也有这个问题。   
    伟大的光荣的正确的中国人民万岁!!
    lanjinghao
    师夷洋技以制夷!!!
    级别: 略有小成
    精华主题: 0
    发帖数量: 21 个
    工控威望: 234 点
    下载积分: 600 分
    在线时间: 21(小时)
    注册时间: 2009-05-06
    最后登录: 2012-09-18
    查看lanjinghao的 主题 / 回贴
    7楼  发表于: 2009-07-17 16:08
    ac0是不是全局变量?从程序中发现好像是局部变量啊
    伟大的光荣的正确的中国人民万岁!!
    sjm213
    有小知识,无大学问。
    级别: 论坛版主

    精华主题: 7 篇
    发帖数量: 5200 个
    工控威望: 7423 点
    下载积分: 158819 分
    在线时间: 3162(小时)
    注册时间: 2007-11-21
    最后登录: 2024-11-27
    查看sjm213的 主题 / 回贴
    8楼  发表于: 2009-07-17 22:29
    AC0是累加器~~
    醉湮邃虞
    醉湮邃虞话老黑
    级别: 略有小成
    精华主题: 0
    发帖数量: 229 个
    工控威望: 409 点
    下载积分: 1577 分
    在线时间: 209(小时)
    注册时间: 2009-01-16
    最后登录: 2015-03-18
    查看醉湮邃虞的 主题 / 回贴
    9楼  发表于: 2009-07-18 10:32
    你是要用图形显示数据吧?
    作一下数据转换,不过要知道最大值或最小值。
    比如最小值是-2000,最大值是+5000
    将-2000---+5000转换为0--6999的数据,就可以处理了
    棋牌比赛免费得实物,闲暇好去处
    http://www.jj.cn/indexTG.html?promoterid=108502812