威纶通官方论坛

INPORT指令思路请教!!!

[复制链接]
发表于 2013-5-8 09:10:52 | 显示全部楼层 |阅读模式
请问各位大神:
       程序执行到INPORT指令时,触摸屏会做出哪种反应:
       1、程序会等待数据的接收,接收成功后再执行下一条指令;(就是这条指令会产生一定的延时)
       2、程序执行到INPORT指令时,在这个时刻触摸屏必须接收到数据(如果这时数据没发过来,则接收失败),并执行下一条指令。
      下面是我写的关于通信的宏指令:
macro_command main()
char command[6],response[6],return_value,a=65

FILL(command[0], 0, 6)                                                              //用于发送数据
FILL(response[0],0,6)                                                                //用于接收数据

command[0]=0X01
command[1]=65
command[2]=0X03
command[3]=0X00
command[4]=0X00
command[5]=0X00

OUTPORT(command[0], "Free Protocol", 6) //这句没有问题,调试助手可以接收到数据

INPORT(response[0], "Free Protocol", 6, return_value)   
if(return_value==1) then           //如果接收成功,触摸屏上显示一个字符
   SetData(a, "Local HMI", LW, 0, 1)   
end if
end macro_command
       我的疑问来自两点:
      1、我的这个程序,OUTPORT指令可以发送数据,INPORT无法接收到数据(仿真时);
      2、我以前是学单片机的,因为单片机中有中断,所以接收数据很好理解,但这里好像没有中断,所以在细节上我就不太明白了。
     谢谢!!!
发表于 2013-5-8 09:26:34 | 显示全部楼层
while return_value<1
        INPORT(number,"Free Protocol",1,return_value)
wend
SetData(number,"Local HMI",LW,4,1)
我的接收部分这么写的,可以接到数据
 楼主| 发表于 2013-5-8 10:50:15 | 显示全部楼层
回复 2# 航空之神


    谢谢你的帮助,我会试用你的建议。非常感谢你。
 楼主| 发表于 2013-5-8 11:33:16 | 显示全部楼层
回复 2# 航空之神


    我使用了你所说的程序,但我发现一个很奇怪的现象:while指令自己跳出了循环,(一开始我以为接收成功了)后面我再用if语句来判断return_value,发现return竟然还是0。这是为什么呢?
macro_command main()
char command[6],response[6],return_value=0,a=65

FILL(command[0], 0, 6)
FILL(response[0],0,6)


command[0]=0X01
command[1]=65
command[2]=0X03
command[3]=65
command[4]=66
command[5]=67


OUTPORT(command[0], "Free Protocol", 6)
  
while(return_value<1)
  INPORT(response[0], "Free Protocol", 6, return_value)
wend
  
if(return_value==1)  then
   SetData(a, "Local HMI", LW, 0, 1)
else
   SetData(a, "Local HMI", RW, 0, 1)
end if

end macro_command
发表于 2013-5-8 16:18:53 | 显示全部楼层
macro_command main()
char number[3]=""
char return_value=0
while 1
        while return_value<1
                INPORT(number[0],"Free Protocol",3,return_value)
        wend
        SetData(number[0],"Local HMI",LW,3,1)
        return_value=0
wend
end macro_command
我也是四月份才学习的,不太懂,当时写的程序,目的是来一个数就将它接收到,再显示出来。我用电脑串口调试助手试过,能达到目的。
现在我调通讯也遇到了好多问题,死活接不到数据。。。没找到类似中断那种功能
 楼主| 发表于 2013-5-8 20:46:52 | 显示全部楼层
回复 5# 航空之神


    感觉你的程序有点问题。
 楼主| 发表于 2013-5-8 20:48:47 | 显示全部楼层
回复 5# 航空之神
macro_command main()
char number[3]=""
char return_value=0

        while return_value<1
                INPORT(number[0],"Free Protocol",3,return_value)
        wend
        SetData(number[0],"Local HMI",LW,3,1)
end macro_command
      我改了一改你的程序。
     这里的INPORT(number[0],"Free Protocol",3,return_value)已经可以收到3个字符了。
 楼主| 发表于 2013-5-8 21:04:05 | 显示全部楼层
回复 5# 航空之神


      我给你一份我自己写的程序,我的之个程序是可以正常收发数据,并且数据接收是可以成功的。
      你可以借鉴我的程序。

macro_command main()
char command[6],response[6],shibai=10,chenggong=11
short return_value=0

FILL(command[0], 0, 6)
FILL(response[0],0,6)


command[0]=0X01
command[1]=65
command[2]=0X03
command[3]=65
command[4]=66
command[5]=67

OUTPORT(command[0], "Free Protocol", 6)


  
while(return_value<1)
  INPORT(response[0], "Free Protocol", 6, return_value)
wend
  
if(return_value==0)  then         //如果接收失败
   SetData(shibai, "Local HMI", LW, 0, 1)
   
else                            //如果接收成功
   SetData(return_value, "Local HMI", LW, 0, 1)
end if

end macro_command

     而且,我还发现了一个奇怪的现象:接收成功后,return_value数值不是1,而是6(我接收数据个数也刚好为6)。这可不像技术手册介绍的那样,接收成功后return_value为1.
发表于 2013-5-9 09:38:42 | 显示全部楼层
回复 8# levison


你这个程序能够自动接数么?  还是每触发一次宏指令才接一次?我当时写while 1就是想我只触发一次宏指令,然后每来一个数就接一个。return_value的值我没注意过,你还提醒我了,应该是你说那样哦
 楼主| 发表于 2013-5-9 12:06:44 | 显示全部楼层
回复 9# 航空之神


      我的这个程序,是按键按下后,就收发一串数据。(触发一次,收发一串数据)
您需要登录后才可以发帖 登录 | 注册

本版积分规则

回复帖子

Archiver|小黑屋|威纶通官网 ( 粤ICP备06054553号 )

GMT+8, 2024-11-22 01:52

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表