plc和数显表之间的485通信问题 点击:4921 | 回复:17



张建忠

    
  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-01-18 09:21:00
楼主
 买了一个光栅尺,输出是rs232信号,使用了一个转换器将其变换为485接口,然后连接到es型plc的485端口上。基本想法是把485中的光栅信号传递到plc中。根据例程进行调试,如下:
ld m1002
mov h87 d1120
set m1120
rst m1143
set m1161
mov k100 d 1192
ld m1000
tmr t0 k50
ldp t0
set m1122
ld t0
rs d120 k0 d122 k1
end
然而,在计算机中的软件调试过程中(版本2.08),却发现d122寄存器中的数值为0。
本人初学plc,请教大家,浅薄之处,请勿见笑。谢谢



yangyfeng

  • 精华:4帖
  • 求助:0帖
  • 帖子:37帖 | 764回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-01-18 19:38:00
1楼
rs d120 [color=#800000]k0[/color] d122 k1?

发送0笔数据出去,肯定没有回应啦;应现把你发送的数据放在D120中,K0这个地方改成你发的数据笔数,这个笔数根据你的光栅尺的协议来确定。

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-01-18 22:10:00
2楼
是的确如您所说。
协议已经得到了,需要发送一个信息到数显表中,然后,数显表会发送17个字节的数据到plc中。
现在的问题是:传输的格式为压缩型的8位bcd码,不知道在台达plc的dvp-es如何处理之?一般的d寄存器好像是16位,而有关的bcd命令好像也是16位的,这样没有关系?我想在工业控制方面这种码较多,应该有专用办法处理,但不知道是哪种办法?

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-01-19 19:27:00
3楼
再作程序的时候发现一个非常奇怪的现象。这个程序只能发射两次数据,然后,发射等待显示为开。是否定时器设置上面有什么问题。由于初学这种东西,希望方家不吝赐教。

yangyfeng

  • 精华:4帖
  • 求助:0帖
  • 帖子:37帖 | 764回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-01-20 15:14:00
4楼
很多RS485串行通讯一般来说是半双工的,所以,必须要等待一次通讯完成(一发一收)才能发送下次数据,最好用通讯完成标志位作为通讯触发的条件。

拉拉拉

  • 精华:0帖
  • 求助:0帖
  • 帖子:15帖 | 75回
  • 年度积分:0
  • 历史总积分:189
  • 注册:2001年8月12日
发表于:2006-01-20 20:52:00
5楼
将BCD码转为16进制有专用的命令。

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-01-20 21:51:00
6楼

我想使用rs命令就是如您所说的一发一收功能。例如:
rs d100 k1 d120 k17
在先前的程序中d100寄存器设置为H52(这个数显表中使用的这样的方法:先发送一个h52,然后数显表自动返回一个17位的压缩型的bcd码,其中包括三个轴的数据,正负号,开始和结束标志等等,可能大多数这样的东西都是这样吧)。
现在我使用串口测试工具测量,plc可以发送,但是只能发送两次,检测定时器(200ms),会发现定时器出现正相脉冲好像不太规律,并且好像通讯延时一直等待下去,而使用数显表和计算机直接连接,在计算机上的测试软件就没有发现这个现象,测试很正常。
以上说明,可能是程序错误,或者plc本身不太适应。
所以,我想请教一些485串口的一些意义。那个台达网站上的程序编写文件好像也没有专题介绍,只是散见于命令中。比如,这个通信协议测量正常应该是9600,8,n,1。不需要硬件握手程序。在plc中如何实现?
扫描时间远远比定时器的周期要小得多,这样会不会产生问题?
如果上面都正常的话,那么可能的问题在哪里?
谢谢网友们的回答!

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-01-21 21:05:00
7楼
还有一个问题,经过测试。好像是plc发生定时脉冲不稳定,也就是说,在发射端的232接口接收信号不稳定。请教一下各位,又没有什么解决的办法?

yangyfeng

  • 精华:4帖
  • 求助:0帖
  • 帖子:37帖 | 764回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-01-25 08:36:00
8楼
先要弄清楚理论上应该发什么报文,回应什么报文?然后在串口软件中监控中实际是发什么报文,回应什么报文?
列出来一对照就知道是什么原因了。

注意,台达PLC用RS指令来与其他具有RS485通讯口的设备进行无协议的通讯时,头码和尾码一般也是需发送出去的。

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-02-17 16:21:00
9楼
谢谢回答。
经过测试,还是不能通信。测试过程如下:
连接情况  plc的485口经过485-rs232的转换以后,直接连接到计算机的232口上,plc本身的写入端口连接到另一个计算机的串口中作为监控之用。
软件调试  使用串口调试程序向plc发送信号(例如16位的数值),并使用标准的例子(帮助文件中所带的)进行测试。在串口调试程序中,发现通信正常,plc既能接收数据,也能发送数据。这是否说明,硬件连接是没有问题的。
具体的通信协议是 9600 n 8 1
没有硬件握手协议。

然而一旦换到光栅尺表头上,就会出现无法通信的情况。光栅尺表头的通信是:由PC機送出一個字元’R’(0X52)﹐本數顯箱在接收了一個’R’後﹐馬上回送17個字節給PC機。这个是说明书的,具体的字节意义我想与此无关,他们是压缩型的bcd码。
出现这种情况的原因是什么?


ps:
注意,台达PLC用RS指令来与其他具有RS485通讯口的设备进行无协议的通讯时,头码和尾码一般也是需发送出去的。

楼上的网友,能解释得更清楚一些么?我没有看懂头码和尾码是什么,我使用的是编程软件中的485连接程序中的自动编程功能,不知道有什么错误。

新四军

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 337回
  • 年度积分:0
  • 历史总积分:390
  • 注册:2004年10月12日
发表于:2006-02-17 16:54:00
10楼
老大:你将你的光栅尺协议传上来,我们看看,才好建议,你每次一点,太累了!

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-02-17 17:33:00
11楼
WE6800通訊協議
1  壓縮BCD碼格式

由PC機送出一個字元’R’(0X52)﹐本數顯箱在接收了一個’R’後﹐馬上回送17個字節給PC機。這17個字節如下﹕
Byte 1st﹕Head =0x0fe (十六進制值)。
Byte 2nd﹕符號位   
        位5-7=0﹕保留
        位4﹕0(表示公制mm)﹐1(表示英制inch)。
        位3=0﹕保留
        位2﹕Z 軸符號位﹐0表示”+”﹐1表示”-“。
        位1﹕Y 軸符號位﹐0表示”+”﹐1表示”-“。
        位0﹕X 軸符號位﹐0表示”+”﹐1表示”-“。

Byte 3rd: 狀態位       
        位7-3=0﹕保留
位2:  Z軸狀態﹐ 0表示OK﹐1表示ERROR。
位1:  Y軸狀態﹐ 0表示OK﹐1表示ERROR。
位0:  X軸狀態﹐ 0表示OK﹐1表示ERROR。

Byte 4th-7th: X軸的值﹐採用壓縮BCD碼格式即
          X-value = B4 + B5 *102+B6*104+B7*106
          例如﹕設X軸的值為 1234.567
                那么 B4=0X67, B5 = 0X45 ﹐B6 = 0X23 , B7=01
      注﹕ B4指第4個BYTE, B5指第5個BYTE

Byte 8th-11th: Y軸的值。也採用壓縮BCD碼格式即
           Y-value = B8 + B9 *102+B10*104+B11*106
Byte 12th-15th: Z軸的值﹐同樣採用壓縮BCD碼格式即
           Z-value = B12+B13*102+B14*104+B15*106

Byte 16th-17th: 保留

注意﹕
1. 不要關心不存在的軸的數值﹐例如﹕
如果Byte 8th-11th 是Y-value的值﹐則 4th -7th 和12th -15th 不使用。
2. B4: 是指第4字節。其他類似。
3. 從B4 TO B17是壓縮BCD碼格式。

2 壓縮BCD格式舉例

下面舉例說明該十七字節中內容如何生成。
設三個數軸X﹑Y﹑Z軸其中﹕ x=-3.509, y=123.478, z=250.465。
1. 因為x為負數﹐其他軸的值為正數﹐所以Byte 2nd各位值如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0    0    0    0    0    0    0    1
      



      位4﹕0 (公制 mm)
      位3﹕0 (保留)
      位2﹕0 (表示Z軸值為正數)
      位1﹕0 (表示Y軸值為正數)
      位0﹕1 (表示X軸值為負數)。
 
2.  Byte 3th:,  沒有ERROR信號
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 0 0

4. Byte 4th-7th是X軸的值
現在把X軸的值分解取出各位上的數分別為3﹐5﹐0﹐9﹐低位0和9存儲在Byte 4th,高位3和5存儲在Byte 5th中。以下各圖下方的標示中的數位(如百分位﹑個位等)僅適用於本例。    

  Byte 4th的各位情況如下﹕               
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    0    0    1    0    0    1



Byte 5th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0    0    1    1    0    1    0    1



Byte 6th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0    0    0    0    0    0    0    0
      


Byte 7th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    0    0    0    0    0    0



5. Byte 8th-11th是Y軸的值
將Y軸的值分解取出各位上的數分別為1﹐2﹐3﹐4﹐7﹐8﹐低位7和8存儲在Byte 8th中﹐3和4存儲在Byte 9th中﹐1和2存儲在Byte 10th中。

Byte 8th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   1    1    1    1    0    0    0


Byte 9th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    1    1    0    1    0    0



Byte 10th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    0    1    0    0    1    0


Byte 11th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    0    0    0    0    0    0

    
6. Byte 12th-15th是Z軸的值
將Z軸的值分解取出各位上的數分別為2﹐5﹐0﹐4﹐6﹐5﹐低位6和5存儲在Byte 12th中﹐0和4存儲在Byte 13th中﹐2和5存儲在Byte 14th中。
Byte 12th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   1    1    0    0    1    0    1


Byte 13th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    0    0    0    1    0    0


Byte 14th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    1    0    0    1    0    1


Byte 15th的各位情況如下﹕
  D7   D6   D5   D4   D3   D2   D1   D0
   0
   0    0    0    0    0    0    0



6. Byte 16th和17th保留 
      
7. 當單位為mm(毫米)時﹐小數位數是3位﹐單位為inch(英寸)時﹐小數位數是4位。

8. 以上介紹的十七字節的內容歸納如下﹕
 字節  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17
 內容 0feH 0 1H 00H 09H 35H 00H 00H 78H 34H 12H 00H 65H 04H 25H 00H 00H 00H
  9. 本系統中絕對值公制最大顯示9999.999﹐英制最大顯示999.9999。

-------------------------
以上是说明书中涉及到通信的内容。

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-02-17 17:36:00
12楼
9600 n 8 1
是根据串口数据传输测试软件所得的结果

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-02-17 17:38:00
13楼
串口测试测试软件为
《RS-232/RS-485 串口通讯调试器 XP》

河北理工学院唐山数字设备厂的产品!

engo

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 35回
  • 年度积分:0
  • 历史总积分:128
  • 注册:2003年11月06日
发表于:2006-02-21 12:28:00
14楼
 yangyafeng:  引用   加为好友   发送留言   2006-1-20 15:14:00 
    很多RS485串行通讯一般来说是半双工的,所以,必须要等待一次通讯完成(一发一收)才能发送下次数据,最好用通讯完成标志位作为通讯[color=#FF0000]触发的条件[/color]。 

[color=#008000]如上:你的程序里T0没有复位,所以RS指令只被执行了一次。这以后便不再触发。[/color]

张建忠

  • 精华:1帖
  • 求助:1帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2003年12月20日
发表于:2006-03-04 22:33:00
15楼
问题搞了好几周,解决了。主要问题是通信格式,压缩型的bcd码实际上用8位就可以了,加上头码和尾码,一共11位数据,而17位数据是不行的,通讯没有完成,接口仍在等待,所以造成了以上结果。还有一个,是232的接线问题,和普通的接线是不一样的。里面的技巧,真是让人开眼界了。

grass7670

  • 精华:1帖
  • 求助:0帖
  • 帖子:90帖 | 193回
  • 年度积分:0
  • 历史总积分:591
  • 注册:2009年5月22日
发表于:2008-02-25 16:38:00
16楼
最终的PLC程序是怎么样的呢?

jianguoye

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2011年10月28日
发表于:2011-10-28 22:07:32
17楼
我想问下我的ES-8Y轴走0。005坐标那里就出显10。685 是那里有问题呢?

热门招聘
相关主题

官方公众号

智造工程师