用C#编写HMI界面,用USB转485和PLC通讯,PLC用的是台达的DVP-12SE系列

本文介绍了如何使用C#通过USB转485与台达DVP-12SE系列PLC进行MODBUS通讯。在通讯测试中,需要注意PLC的通讯格式、波特率、奇偶校验等参数设置。在C#中利用SerialPort类和NMODBUS4库实现了RTU模式的读写操作,并建议在读取数据时开启独立线程。此外,文章还提到了在界面上触发写数据的操作,如使用Click事件模拟上升沿。
摘要由CSDN通过智能技术生成

1、首先需要对PLC进行通讯测试,我用的是XCOM串口助手,查看台达的PLC的使用说明书,看到默认是MODBUS协议的ASCII模式,具体按照说明书测试输入输出就行,期间有遇到以下问题:
1)通讯格式必须设置正确,数据位、波特率、奇偶校验、校验码等,以及从站地址可能默认不是01,可以通过PLC那边设置查看
2)ASCII的时候不要打空格,符号需要时是英文的,CRLF就是一个回车键,最好转换为16进制观察是否和说明书上的十六进制相同
3)测试之前可以先用台达自带的软件测试通讯,确保设备485连线无误。
4)用XCOM串口助手调试的时候出现乱码的现象,后来用唐老鸭试了一下无乱码现象。(废了一天调试,一直以为是硬件问题)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
2、串口通讯方面C#中可以用SerialPort类,将通讯格式设置的和说明书中相同。
在这里插入图片描述
3、modbus协议部分C#中用的是NMODBUS4,直接在vs中管理NuGet程序包中下载即可
在这里插入图片描述
其中包含了RTU\ASCII\TCP模式,我让负责PLC的小伙伴帮忙把PLC的通讯格式改成了RTU,具体是修改M1320,程序不太清楚在这里插入图片描述
里面包括了所以MODBUS的读写方法,和说明书中的一一对应即可,其中对于读取方面,建议是开一个线程一直读取数据。(这里用的是静态方法)

设置master在这里插入图片描述
读取数据
这里需要建立线程,并且线程中需要对进程进行操作,需要用到Invoke()方法,且避免进程时界面还未绘制完成产生报错,需要提前判断该界面IsHandleCreated
在这里插入图片描述
在这里插入图片描述

 void Method1()
        {
   
            if (!this.IsHandleCreated)
            {
   


                while (true)
                {
   
                    Thread.Sleep(100);
                    //Y = InitializeModel.master.ReadCoils(1, 1281, 1);
                    Auto = InitializeModel.master.ReadCoils(1, 1280, 3);
                    C = InitializeModel.master.ReadHoldingRegisters(1, 3584, 10);
                    //C = InitializeModel.master.ReadInput
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值