新手报到,按照官方教程来看的,并且完全按照代码来写的,看到宏指令inport和outport部分。发现教程给的例子是将报文发送到所设定的自由协议(Free protocol类型)的设备当中,然后将读取到的地址信息(4x_1和4x_2)显示给本地HMI的显示元件。并且定义了return_value。所以我在另外加了数值元件来显示return_value的值,并且用功能键触发宏指令。
1.但是在触发宏指令后return_value的值显示为64,已经大于了之前声明时候response的位组长度【32】,不知道是怎么回事,而且显示返回数值的元件也没有任何显示两个都是0也不知道为什么
2.此外我想改变自由协议中4x_1和4x_2地址的数据,来测试收到的报文和数据显示是否正确,该如何操作。
初学小白,希望大虾们指点!
代码如下
macro_command main()
char command[32],response[32]
short address,checksum
short read_no,reurn_value,read_data[2]
FILL(command[0], 0, 32)
FILL(response[0], 0, 32)
command[0] = 0x1
command[1] = 0x3
address = 0
HIBYTE(address, command[2])
LOBYTE(address, command[3])
read_no = 2
HIBYTE(read_no, command[4])
LOBYTE(read_no, command[5])
CRC(command[0], checksum, 6)
LOBYTE(checksum, command[6])
HIBYTE(checksum, command[7])
OUTPORT(command[0], "MODBUS RTU Device", 8)
INPORT(response[0], "MODBUS RTU Device", 9, reurn_value)
SetData(reurn_value, "Local HMI", LW, 200, 1)
SetData(response[0], "Local HMI", LW, 10, 9)
if(reurn_value > 0 and response[1] == 0x3)then
read_data[0] = response[4] + (response[3]<<8)
read_data[1] = response[5] + (response[6]<<8)
SetData(read_data[0], "Local HMI", LW, 100, 2)
end if
end macro_command |