1.使用Zport系列配置工具分别对IND模块进行设置，由于设备已经组网，此处只做演示说明。分别将IND模块设备ID设置为0x30和0x31（即48和49）。

2.建立威纶通EasyBuilder工程，并设置IND模块485通信总线ModbusRTU，由于是两台IND模块，使用可变站号，地址整段间隔需大于条码长度+2，此处我们假设最长条码长度为20，则此处设置为25。

3.设置画面数据信息，
	将48站号的IND模块扫码枪1字符串寄存器地址设置为LW 00000，扫码枪1状态寄存器地址设置为LW 00100 bit 01（即0010001），将扫码枪1条码计数设置为LW 00101；
	将49站号的IND模块扫码枪2字符串寄存器地址设置为LW 00050，扫码枪2状态寄存器地址设置为LW 00100 bit 02（即0010002），将扫码枪2条码计数设置为LW 00102。

3.编写宏指令程序，由于程序已经调试无误，不再作解读，具体参考注释。

4.调试

5.调试完成，可以在程序里编写应用层的数据处理程序。




//*************************程序*************************//




macro_command main()
//*************变量定义*************//
short scanerBarID1 = 48		//设定扫码枪1 ModbusRTU通信站号为48（0x30==48）
short modbusRTUData48[20]	//定义扫码枪1 ModbusRTU数据接收数组
char scanerBarCode1[20]		//定义扫码枪1数据字符串数组
bool scanerBarOnline1		//定义扫码枪1状态变量
int codeNum1 = 0			//定义扫码枪1数据累加变量

short scanerBarID2 = 49		//设定扫码枪2 ModbusRTU通信站号为49（0x30==49）
short modbusRTUData49[20]	//定义扫码枪2 ModbusRTU数据接收数组
char scanerBarCode2[20]		//定义扫码枪2数据字符串数组
bool scanerBarOnline2		//定义扫码枪2状态变量
int codeNum2 = 0			//定义扫码枪2数据累加变量

int row_number = 0 			//定义for循环累加变量

//*****设置Zport系列IND模块485总线当前操作ModbusRTU设备站号*****//
SetData(scanerBarID1, "本机 触摸屏", LW, 10000, 1) // 将当前操作设备站号48赋值给LW 10000
//*****通过ModbuRTU读取IND模块扫码枪1数据寄存器*****//
GetData(modbusRTUData48[0], "Zport系列IND模块485总线", 3x, 0001, 20)
//*****通过ModbuRTU读取IND模块扫码枪1状态*****//
GetData(scanerBarOnline1, "Zport系列IND模块485总线", 1x_single_Bit, 0001, 1)
//*****将IND模块扫码枪状态赋值给LW_Bit 0010001*****//
SetData(scanerBarOnline1, "本机 触摸屏", LW_Bit, 0010001, 1)

//*****判断IND模块扫码枪1第一位不为0时,执行数据转换程序*****//
if modbusRTUData48[0] <> 0 then

for row_number=0 to 19         //将IND模块扫码枪1 short型数据转换为char型字符串。
scanerBarCode1[row_number] = modbusRTUData48[row_number]
next row_number

SetData(scanerBarCode1[0], "本机 触摸屏", LW, 00000, 20)//将字符串数组赋值给LW 00000

GetData(codeNum1, "本机 触摸屏", LW, 101, 1)//获取扫码枪1计数保存值
codeNum1 =codeNum1 + 1						//计数
SetData(codeNum1, "本机 触摸屏", LW, 101, 1)//保存扫码枪1计数值
//*****以下编写 IND模块扫码枪1 应用层程序*****//
//***
//*
//



end if





//*****设置Zport系列IND模块485总线当前操作ModbusRTU设备站号*****//
SetData(scanerBarID2, "本机 触摸屏", LW, 10000, 1) // 将当前操作设备站号49赋值给LW 10000
//*****通过ModbuRTU读取IND模块扫码枪1数据寄存器*****//
GetData(modbusRTUData49[0], "Zport系列IND模块485总线", 3x, 0001, 20)
//*****通过ModbuRTU读取IND模块扫码枪1状态*****//
GetData(scanerBarOnline2, "Zport系列IND模块485总线", 1x_single_Bit, 0001, 1)
//*****将IND模块扫码枪状态赋值给LW_Bit 0010001*****//
SetData(scanerBarOnline2, "本机 触摸屏", LW_Bit, 0010002, 1)

//*****判断IND模块扫码枪1第一位不为0时,执行数据转换程序*****//
if modbusRTUData49[0] <> 0 then

for row_number=0 to 19         //将IND模块扫码枪1 short型数据转换为char型字符串。
scanerBarCode2[row_number] = modbusRTUData49[row_number]
next row_number

SetData(scanerBarCode2[0], "本机 触摸屏", LW, 00050, 20)//将字符串数组赋值给LW 00050

GetData(codeNum2, "本机 触摸屏", LW, 102, 1)//获取扫码枪2计数保存值
codeNum2 =codeNum2 + 1						//计数
SetData(codeNum2, "本机 触摸屏", LW, 102, 1)//保存扫码枪2计数值
//*****以下编写 IND模块扫码枪2 应用层程序*****//
//***
//*
//



end if







end macro_command
