请教一下问题:
我买了一个8路模拟量输入模块,支持RS485 MODBUS-RTU,支持功能码:04H。0-20mA对应0-4095,4-20mA对应819-4095.
如图所示:我单独读取LW 0,连接4——20mA传感器,正常读出了819数值,下面的电流显示4mA,压力显示也都正常。只要我把这个程序复制到另一个程序里的新建窗口中,就读不出数来。模块RXD数据接收灯和触摸屏上的通讯灯正常闪烁,数据发送灯TXD不亮了。
以下是在官网找得宏指令按模块说明改了一下,可以正常使用:
// Read Holding Registers
macro_command main()
char command[32], response[32]
short address, checksum
short read_no, return_value, read_data[2], i
FILL(command[0], 0, 32)// initialize command[0]~command[31] to 0
FILL(response[0], 0, 32)
command[0] = 0x1// station number
command[1] = 0x4// read holding registers (function code is 0x3)(我把这里改成0X4)
address = 0// starting address (4x_1) is 0
HIBYTE(address, command[2])
LOBYTE(address, command[3])
read_no = 2// the total words of reading is 2 words
HIBYTE(read_no, command[4])
LOBYTE(read_no, command[5])
CRC(command[0], checksum, 6)// calculate 16-bit CRC
LOBYTE(checksum, command[6])
HIBYTE(checksum, command[7])
OUTPORT(command[0], "MODBUS RTU Device",8)// send request
INPORT(response[0], "MODBUS RTU Device",9,return_value)// read response
if (return_value > 0 and response[1] == 0x4) then
read_data[0] = response[4] + (response[3] << 8)// 4x_1
read_data[1] = response[6] + (response[5] << 8)// 4x_2
SetData(read_data[0], "Local HMI", LW, 0, 2)
end if
end macro_command
只要我把这个程序复制到另一个程序里的新建窗口中,就读不出数来。模块RXD数据接收灯和触摸屏上的通讯灯正常闪烁,数据发送灯TXD不亮了。 |