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

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

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

有所不同的是,红牛开发的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

// 端口初始化

LDSM0.1

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

Network 2

// 服务程序

LDSM0.0

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

Network 3

LDSM0.0

TONT32, 1000

Network 4

// 1s钟更新一次

LDT32

RT32, 1

INCBVB5

Network 5

// IO 映射到V变量区

LDSM0.0

MOVBVB0, QB1

MOVBVB1, QB0

MOVBIB0, VB3

MOVBIB1, VB2

运行后的效果图如下:

MF2010070701.jpg

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

MF2010070702.jpg

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

MF2010070703.jpg

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值