开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【STM32 .Net MF开发板学习-08】远程PLC读写控制

简介:
+关注继续查看

   在工控项目中,PLC一般必不可少,现场控制一般以它为核心,而PC系统一般只是起到远程监控、图表和数据存储的作用。除了PLC之间,PCPLC之间通信外,一般一些智能显示模块(如型号各异的触摸屏 HMI系统)也和PLC通信,我们就要把把承载.NET MF的系统打造成一个最简单的HMI系统,远程操控PLC

    一般国外每一个PLC厂家,其通信协议一般都是不同的,如西门子PLCPPI/MPI、欧姆龙 PLCHostLinkAB PLCDF1、施奈德 PLCModbus等等,由于Modbus协议简单、并且公开,所以国内一些PLC和智能模块大都是支持Modbus协议的,西门子200系列的PLC只要加载一个官方Modbus库,也是可以非常方便的支持Modbus协议。

   在上一篇文章《PC通过Modbus协议远程操控开发板》,我们把Modbus Rtu client运行在PC端,这次我们把这部分程序移植到.Net Micro Framework系统上,让.Net Micro Framework开发板直接访问PLC

    有所不同的是,红牛开发的COM3直接支持RS485通信,这样我们和PLC直接用两个线相连就可以通信了,此外RS485是半双工通信,所以需要自己手动进行收发切换,除此之外和RS232通信代码基本一致。

     不同之处的代码如下:

     //发送数据

     if (RS485)

     {

        RTS.Write(true);

     }

     serial.Write(bytSendData, 0, intSendNum);

     if (RS485)

     {

        while (serial.BytesToWrite > 0) ;

        RTS.Write(false);

     }    

    具体的测试代码如下:

    public static void Main()  

    {

        Client mbclient = new Client();

        mbclient.RS485 = true;

        mbclient.RTS_Pin = (Cpu.Pin)GPIO_NAMES.PF11;

        mbclient.Open("COM3", 19200, System.IO.Ports.Parity.None);

        UInt16[] data=new UInt16[3];

        Graphics.Clear(Color.Black);

        Graphics.FillRectangle(0, 0, 239, 19, Color.White);

        Graphics.DrawString(60, 3, "Modbus Rtu Test"Color.Blue);

        byte QW0 = 0;

        while (true)

        {

            if (++QW0 > 128) QW0 = 0;

            mbclient.Write(1, 0, new UInt16[] { QW0 }, 1);   

            Thread.Sleep(300); 

 

            if(mbclient.Read(1,0,data,3) == 0)

            {

                Graphics.SuspendLayout();

                Graphics.FillRectangle(0, 40, 239, 100, Color.Black);

                Graphics.DrawString(20, 43, "QW0 : " + data[0].ToString(), Color.Yellow);

                Graphics.DrawString(20, 63, "IW0 : " + data[1].ToString(), Color.LightGreen);

                Graphics.DrawString(20, 83, "VW2 : " +data[2].ToString(), Color.Orange);

                Graphics.ResumeLayout();

            }            

            Thread.Sleep(300); 

        }

}

由于我们仅实现了Modbus协议的3,16号指令,所以要想操作PLC的I、Q,我们对V变量区进行了映射,具体的代码如下

   TITLE=Modbus测试

Network 1

// 端口初始化

LD     SM0.1

CALL   YFMB_INIT, 1, 1, 19200, 0, 0, 128, 32, 2000, &VB0, M0.0, MB1

 

Network 2

// 服务程序

LD     SM0.0

CALL   YFMB_SLAVE, M0.1, MB2             //Modbus Slave 服务程序

 

Network 3

LD     SM0.0

TON    T32, 1000

 

Network 4

// 1s钟更新一次

LD     T32

R      T32, 1

INCB   VB5

 

Network 5

// IO 映射到V变量区

LD     SM0.0

MOVB   VB0, QB1

MOVB   VB1, QB0

 

MOVB   IB0, VB3

MOVB   IB1, VB2

   运行后的效果图如下:

  

 

   没有PLC朋友也不要气馁,这里提供一个Modbus RTU Slave的模拟器,可以运行在Windows平台上,如下图:  

   要设为串口模式(Modbus RS-232),串口参数如下:

 

这时候红牛开发板就没有必要用COM3了(否则需要一个232485模块),直接用COM2PC相连即可(注意,相关的代码要做一下调整)。

连接之后,你可以看到模拟器的数据在变化,当然你可以输入修改相关的数据,以观看开发板上LCD的变化。

Modbus模拟器下载地址:http://www.sky-walker.com.cn/yefan/MFV40/mod_RSsim.exe

-----------------------------------------------------------------------------------------

   【低价开发板】http://item.taobao.com/item.htm?id=7117999726 

 

 






本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/346480,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
高校学生学习云计算平台
计算机专业学生借助阿里云平台了解云计算虚拟机
200 0
机器学习之阿里云天池大赛--Docker入门(二)
本文为作者参加天池大赛Docker入门赛记录文章,接续上一篇(机器学习之阿里云天池大赛--Docker入门),比分从30到100。
122 0
【STM32 .NET MF开发板学习-29】摄像头蓝牙图像远程获取
目前M3的开发板,虽然前段时间可以支持WPF了,但是SRAM毕竟还是有限,所以从串口摄像头直接获取的jpg图像,并不能在LCD屏上显示出来(在模拟器上没有这个问题,可以直接呈现),所以我借助蓝牙接口,把另一个串口获取的图像数据发送到一台带蓝牙的PC上,PC上的程序否则实现数据接收,并把图像呈现出来。
615 0
【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板
本示例包含两部分,一部分运行到开发板上,作为Modbus RTU Slave服务存在;另一部分典型的.Net Framework代码,实现了Modbus RTU Client端功能,可以借助开发板上的Slave服务控制开发板上的LED灯和获取按钮状态。
561 0
STM32学习笔记(二)——串口控制LED
开发板芯片:STM32F407ZGT6 PA9-USART1_TX,PA10-USART1_RX; PF9-LED0,PF10-LED1;   一、串口1配置过程(不使用串口中断): 1.使能时钟,包括GPIO时钟和串口1时钟使能,注意它们是挂载在不同的时钟总线上的。
1432 0
PHP再学习5——RESTFul框架 远程控制LED
0.前言       去年(2013年)2月第一次接触yeelink平台,当时该平台已经运行了一些时间也吸引了不少极客。试想自己也将投身IoT(物联网)行业,就花了些时间研究了它。陆陆续续使用和研究了一年,大致围绕两个问题展开——1.yeelink平台如何使用,2.如何构造一个功能简单些的yeelink平台。
1326 0
【STM32 .Net MF开发板学习-19】DHT11温湿度传感器通信(上)
前段时间开发远程医疗系统(Dr.Cloud)就曾用到过温湿度传感器,不过当时考虑到集成难度,选了一个RS485接口的传感器,该传感器实现了Modbus Rtu Slave的功能,只要客户程序实现Modbus Rtu Client即可读出温湿度数据。
516 0
【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板
从2002年就开始接触Modbus协议,以后陆续在PLC、DOS、Windows、.Net Micro Framework等系统中使用了该协议,在我以前写的一篇博文中详细记载了这一段经历,有兴趣的朋友可以看一看《我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)》。
627 0
+关注
6819
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载