目录
一、测试任务
二、测试环境
三、PLC工程
1、组态配置
2、ip地址、端口号
3、全局变量定义
四、C#端Winform程序创建
1创建主界面
2、创建子窗口
3、运行生成,界面效果
4、Modebus协议说明
5、Modebus操作说明
六、测试
1、寄存器读测试
2、MW1300寄存器的BIT位
3、写寄存器测试
4、PLC断电或者断网
七、工程下载连接
一、测试任务
1、PLC作为ModebusTCP端,端口号都是502,PC端上位机软件作为TcpClient去连接多台PLC。PC端读写PLC寄存器。
2、PC端在有的PLC断电、断网的情况下,界面不会阻塞卡死,对其它PLC读写正常。在断网的PLC重新连接网络可以手动连接。
二、测试环境
1、PLC设备:汇川AM402,编程软件InProShop(v1.7.3)
2、PC端:Win10系统、VS2013编程软件。
三、PLC工程
1、组态配置
2、ip地址、端口号
192.168.1.88
502
3、全局变量定义
VAR_GLOBAL
StateArray AT%MW1300 :ARRAY[1..200] OF WORD;
_MW1300Bit0 AT %MX2600.0 :BOOL;
_MW1300Bit1 AT %MX2600.1 :BOOL;
_MW1300Bit2 AT %MX2600.2 :BOOL;
_MW1300Bit3 AT %MX2600.3 :BOOL;
_MW1300Bit4 AT %MX2600.4 :BOOL;
_MW1300Bit5 AT %MX2600.5 :BOOL;
_MW1300Bit6 AT %MX2600.6 :BOOL;
_MW1300Bit7 AT %MX2600.7 :BOOL;
_MW1300Bit8 AT %MX2600.8 :BOOL;
_MW1300Bit9 AT %MX2600.9 :BOOL;
_MW1300Bit10 AT %MX2600.10 :BOOL;
_MW1300Bit11 AT %MX2600.11 :BOOL;
_MW1300Bit12 AT %MX2600.12 :BOOL;
_MW1300Bit13 AT %MX2600.13 :BOOL;
_MW1300Bit14 AT %MX2600.14 :BOOL;
_MW1300Bit15 AT %MX2600.15 :BOOL;
_MW860 AT%MW860 :WORD;
_MW861 AT%MW861 :WORD;
_MW862 AT%MW862 :WORD;
_MW863 AT%MW863 :WORD;
_MW864 AT%MW864 :WORD;
_MW865 AT%MW865 :WORD;
_MW866 AT%MW866 :WORD;
_MW867 AT%MW866 :WORD;
_MW868 AT%MW866 :WORD;
END_VAR
四、C#端Winform程序创建
1创建主界面
在主界面中添加两个Panel控件,用以加载两台PC的Client窗口界面。使用Panel的优点是,对于多台PLC设备,只需要创建一个子窗口加载到多个Panel控件中即可。
2、创建子窗口
3、运行生成,界面效果
4、Modebus协议说明
注意:批量读寄存器,尽量不要太多,一般一次100个左右
//MBAP报文头
//buffer[0] 事务处理标识符Hi
//buffer[1] 事务处理标识符Lo
//buffer[2] 协议标识符 0x00
//buffer[3] 协议标识符 0x00
//buffer[4] 长度
//buffer[5] 长度 即从buffer【6】--校验符前的长度
//buffer[6] 单元标识符 建议:在采用0xFF作为“单元标识符”的无效值
//请求数据
//buffer[7] 功能码(0x03) 读多个寄存器
//buffer[8] 起始地址
//buffer[9] 起始地址
//buffer[10] 寄存器数量1至125(0x7D)
//buffer[11] 寄存器数量1至125(0x7D)
5、Modebus操作说明
批量读寄存器
/// <summary>
/// 读取批量寄存器值:122个寄存器 800-1400
/// </summary>
/// <returns></returns>
public byte[] ReadMultiCmd()
{
readbuffer[5] = 0x06; // 长度
readbuffer[7] = 0x03; //功能码
readbuffer[8] = 0x05; //起始地址-高位
readbuffer[9] = 0x14; //起始地址-低位
readbuffer[10] = 0x00;
readbuffer[11] = 0x7A; //122个寄存器 1300-1422
return readbuffer;
}
写单个寄存器
/// <summary>
/// MW860写值
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public byte[] Write_MW860(int value)
{
writebuffer[5] = 0x06; // 长度
writebuffer[7] = 0x06; //功能码
writebuffer[8] = 0x03; //起始地址-高位
writebuffer[9] = 0x5C; //起始地址-低位 d860
writebuffer[10] = 0x00; //寄存器值
writebuffer[11] = (byte)value;
return writebuffer;
}
六、测试
PLC只有一台。
1、寄存器读测试
读寄存器范围:mw1300-mw1500
给MW1300-MW1306如下赋值
C#读取到的值
2、MW1300寄存器的BIT位
3、写寄存器测试
写寄存器范围:mw860-mw868
C#端写操作
PLC端接收到的
4、PLC断电或者断网
PLC重新上电后接入网络,只需要点击重新连接按钮即可。
七、工程下载连接
分别是Winform程序PLC程序
https://download.csdn.net/download/panjinliang066333/87523222