前面经过多方调试和各位的帮忙指导我已经建立了一个传感器与PLC的通信,但还有两个问题需要大家的指导,在此先谢了:
1、数据传送以ASCII方式,PLC接收到的数据为十六进制,即为十六进制的ASCII,如接收到数据30H 39H 31H 34H,实际上最终数值为9.14,因此,如何将上面四个字节的数据转换成一个实数呢?假设上述四组数据地址为VB300、VB301、VB302、VB303,最终结果存放在VD400中,该如何编程呢?
2、使用如下的中断程序完成了一路传感器的通讯,现在我要实现两路传感器分时输入,但只有一个串口可用,两路传感器型号不一样,分别为1、2,需要在程序中做何种修改呢?添加另外两个类似的中断可以吗?如何实现分时呢?谢谢各位,能给我写出程序最好,若是忙的话给出思路也好。
一路通信程序如下:
MAIN:
Network 1 // 网络标题
// 网络注释
LD SM0.1
CALL SBR0
SBR0:
Network 1 // 网络标题
// 网络注释
LD SM0.1
MOVB 16#09, SMB30
MOVB 16#F0, SMB87
MOVB 16#0A, SMB88
MOVB 16#0D, SMB89
MOVW +100, SMW92
MOVB 17, SMB94
ENI
ATCH INT0, 9
MOVB 150, SMB34
ATCH INT1, 10
INT0:
Network 1 // 网络标题
// 网络注释
LD SM0.0
RCV VB200, 0
MOVB 250, SMB34
ATCH INT1, 10
INT1:
Network 1 // 网络标题
// 网络注释
LD SM0.0
DTCH 10
XMT VB100, 0
数据块:
VB100 4
VB101 16#0A
VB102 16#0D
VB103 16#1
VB104 16#0D
问题补充:
谢谢各位的指导,目前我已经完成了数制转换和两路传感器分时通信,但是就像LaoHuai说的,传输过程中如果某一路传感器掉电,那么PLC将不能接收到数据,具体就是:两路传感器可以通信,仅型号2可以通信,此时型号1存储数据为0,但是仅型号1却不能通信,不能接收到数据,现将主要的分时程序和中断程序写出来,希望大家能帮忙指点一下:
Network 2
// 产生周期2秒的时钟脉冲,一秒OFF,一秒ON
LDN T34
TON T33, 150
TON T34, 300
网络3:分时定义不同的传感器机型号,以辨别向不同的传感器发送
LD T33
MOVB 16#1, VB53
NOT
MOVB 16#02, VB53
中断1:
Network 1 // 网络标题
// 传感器向PLC发送数据,存放在VB100数据缓冲区
LD SM0.0
LPS
AB= VB53, 1
RCV VB99, 0
LRD
AB= VB53, 2
RCV VB499, 0
LRD
MOVB 250, SMB34
LPP
ATCH INT1, 10
中断2:
Network 1 // 网络标题
// 向传感器传送数据
LD SM0.0
DTCH 10
XMT VB50, 0
最佳答案
1、
回答问题前我说些无关的话
a、我是在看到你问题后一边看帮助一边实验,我也希望你以后可以多按F1,自己实验得到的知识一般印象很深。
b、从转换的结果和我查码表的结果来看,你的问题答案是914.0,
你应该是忘了告诉大家,小数位是固定的2位,对不对?
使用 STR 指令
LD SM0.0
STR VB299, 1, VD400 //VB299存放的是字符串的长度,本例为4
如果还不清楚,请在转换/STR指令上按F1
2、
使用定时方式改变VB100开始发送数据区的内容,如果我猜的不错的话应该是让VB103为1 或者 2 ,接收的时候通过通讯协议来判断是哪个设备返回的,做相应的处理。
提问者对于答案的评价:
谢谢您的帮助,让我受益匪浅,谢谢。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345038.html