台达界面A系列宏中通讯的几条指令求助! 点击:794 | 回复:13



笨笨猫

    
  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 13:43:43
楼主

我公司一直用台达的界面,都是和PLC直接通讯,没有问题。现在我们自己搞了一块板,想用台达界面做上位机,控制板的运行。

但是通讯的时候遇到了一下问题:

1.用INITCOM指令时候,等号前面的那个地址如何选取?使用手册上没有说明,是不是可以随便选取一个就OK了?

2.PUTCHARS和GETCHARS等号前面的地址如何选取?就是返回值的地址,如果我不需要返回值是不是就可以随便选取?

3.通讯的时候是不是初始化通讯口之后就可以直接用PUTCHARS进行输出数据了呢?

4.如果我要输出$20~$25的数据,用PUTCHARS的时候那个数据长度(V3)是6还是12?就是说一个$20相当于几个字节?




笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 13:49:07
1楼

我在试验的时候,选择了三菱的控制器,设置了通讯参数后,用BASE PORT的地址写了一个数据,一连线就开始发数据。

可是我用内部地址,就是$开头的地址写了数据之后怎么也发不出数据,不管是在“选项”--“设置模块参数”--“通讯”里面进行设置还是用宏进行端口初始化,用PUTCHARS输送数据,都不行。

请aibi帮帮忙,谢谢!

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 13:54:44
2楼

我现在是这样做的:

我在界面上写一个“数值输入”的元件,地址为$20,再做一个按钮,地址为$30.0。

在按钮里面编写“执行后宏”:(协议为:RS232,9600,n,8,1。选择com2)

$50 = INITCOM(1, 0, 1, 0, 0, 6, 0)
$60 = PUTCHARS($20, 2, 500)

可是这样好像没有数据输出,好像是宏有问题,请各位指点一下,谢谢!

aibi

  • 精华:1帖
  • 求助:0帖
  • 帖子:7帖 | 1027回
  • 年度积分:0
  • 历史总积分:1975
  • 注册:2008年6月03日
发表于:2009-11-04 15:06:57
3楼

这个程序少了选择com口

 呵呵 比如你想用com2口送出去,虽然你初始化了com口 但还需要选择com2口送出

 应该是

$50 = INITCOM(1, 0, 1, 0, 0, 6, 0)   #初始化com口,$50是com口有没有被初始化成功,成功为1不成功为0
SELECTCOM(1)                                #选择com2口作为数据发送和接受口,0 代表com1 1 代表com2
$60 = PUTCHARS($20, 2, 500)    #数据送出$60代表送出数据成功,从$20地址开始送,连续送出2个beyt。500ms还没有送出去表示送数据失败。


$60 = PUTCHARS($20, 2, 500)

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 15:09:56
4楼

谢谢aibi,那从$20开始送,连续送2个beyt,是不是把$21里面的内容也送走了?还是就只有$20的内容?

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 15:17:16
5楼

另外,如果在这里用宏进行通讯,而且电路板是自己做的,那么选择控制器的时候是不是就可以选择“NULL”了呢?还是也要选择一个控制器呢?

如果要选择控制器,在“通讯”参数里面那些通讯参数是不是也要进行设置呢?

 

谢谢!

aibi

  • 精华:1帖
  • 求助:0帖
  • 帖子:7帖 | 1027回
  • 年度积分:0
  • 历史总积分:1975
  • 注册:2008年6月03日
发表于:2009-11-04 15:31:22
6楼

猫兄,连续送2个beyt其实就是1个word,呵呵 不过需要注意是先送低字节后送高字节,如果$20的值是1234h  那么送出去就应该是34 12 。呵呵 这个需要注意,

   如果控制器是自己做的协议,那么就在控制器里面选择null。通讯参数里面也不用进行其他设置了 (~ o ~)~zZ

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 15:42:27
7楼

呵呵,aibi兄弟今天回复了很多帖子,看来比较累了,呵呵,谢谢你啊!

我刚才按照你说的做了,现在没问题了,我在界面上面写了两个数值显示的元件,一个$50,一个$60,用来显示是否初始化成功和送出数据成功。当我按下按钮的时候,都显示了1,说明初始化和输送数据都成功了,但是当我再次按下按钮的时候,初始化的显示却变成了0,这样是不是说明端口初始化只能够进行一次啊?这样的话是不是应该在画面的“initial宏”里面进行端口初始化呢?

感谢aibi的回答,谢谢!

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 15:47:38
8楼

我在“initial宏”里面写了:

$50 = INITCOM(1, 0, 1, 0, 0, 6, 0)

SELECTCOM(1)

在“传送数据”按钮的“执行后宏”里面写了:

$60 = PUTCHARS($20, 2, 500)

当我运行的时候,一开机$50显示1,说明端口初始化成功。但是不论我怎么按“传送数据”按钮,$60都是0,说明数据没有传送出去,是不是哪里又有问题了?

谢谢

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 15:50:14
9楼

明白了,SELECTCOM(1) 要在“传送数据”按钮的宏里面。这样就成功了!

呵呵,再次感谢aibi。

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-04 17:12:13
10楼

aibi,我的通讯成功了,但是美中不足的就是高低字节颠倒了,这个有没有办法搞定啊?或者哪里可以设置一下不让他颠倒?

比如我$60 = PUTCHARS($20, 4, 500),$20中存放了1234,$21中存放了1324,结果我收到了:34122413,不知道可否有办法解决?谢谢!

另外如果$20用的是Unsigned Decimal,当$20中的数值小于128是收到的是正常的,大于128时收到的就是错误的代码。

如果$20用的时Hexadecimal, 比较小的数值就没有问题,比如5678就可以显示7856,但是较大的数值比如9876却显示为FFFF7698,这是为什么呢?

请aibi有空的时候帮我瞧瞧是怎么回事,谢谢!

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-05 10:17:28
11楼

今天又看了一下通信的指令,找到了SWAP指令,呵呵,可以进行高低位字节的互换。

昨天没有仔细看使用手册,哈哈。

不过那个太大的数出现错误代码的问题还需要再继续研究。

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-11-05 11:04:58
12楼

找到原因了,呵呵,是我们自己编写的软件有一点点问题,每次16进制8080一下就没问题,8081以上就有问题,后来怀疑是我们的软件的问题,呵呵,改了之后就没问题了。

现在通讯完全成功了,谢了!

做了一次通讯之后对此有了很大的理解!

zyw3166

  • 精华:0帖
  • 求助:0帖
  • 帖子:16帖 | 2756回
  • 年度积分:442
  • 历史总积分:30819
  • 注册:2007年7月13日
发表于:2010-10-13 14:40:59
13楼
我也学习了,谢谢!大家一起学习

热门招聘
相关主题

官方公众号

智造工程师