在工控项目中,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协议。
在上一篇文章《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了(否则需要一个232转485模块),直接用COM2和PC相连即可(注意,相关的代码要做一下调整)。
连接之后,你可以看到模拟器的数据在变化,当然你可以输入修改相关的数据,以观看开发板上LCD的变化。
Modbus模拟器下载地址:http://www.sky-walker.com.cn/yefan/MFV40/mod_RSsim.exe
-----------------------------------------------------------------------------------------
【低价开发板】http://item.taobao.com/item.htm?id=7117999726
源码下载:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/MBClient.rar
文章参考: 《.Net Micro Framework 快速入门》
中文讨论组:http://space.cnblogs.com/group/MFSoft/
分享到:
相关推荐
STM32_Nano开发板--原理图 很完整 不错,欢迎下载
STM32F407开发板-标准例程-寄存器版本。有59个例子。涉及所有试验。
两块STM32,一个做主机一个做从机,能够实现主机发送数据以及主机读取从机数据。通过串口调试,以及LED灯来提示工作状态。
STM32F407开发板作为客户端进行网络通信,解压即用
普中STM32-PZ6806L开发板资料光盘结构 | |---1--用户必看 | |--KEIL5安装教程 | |--普中ARM仿真器使用说明 | |--普中PZ6806L开发板入门教程 | |---2--开发板原理图 | |--彩屏原理图-----------------对应...
此资源是《基于探索者stm32f407开发板ucos-iii+lwip1.4.1的tcp server并发服务器解决例程》配套的源码压缩包
安富莱_STM32-V7开发板资料
MP1A开发板是基于ST(意法半导体)公司的STM32MP1系列微处理器而设计的开发板,该系列处理器提供了集成 Arm® Cortex®-A7 和 Cortex®-M4 两种内核的异构架构,在实现高性能且灵活的多核架构以及图像处理能力基础上,...
安富莱_STM32-V5开发板_RL-TCPnet网络教程
教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32...
阿波罗STM32F767开发板立场实验51到65部分,实验51 FPU测试(Julia分形)实验,实验52 DSP测试实验,实验53 手写识别实验,实验54 T9拼音输入法实验,实验55 串口IAP实验,实验56 USB读卡器(Slave)实验,实验57 USB...
STM320518-单片机开发板uCOS-III V3.03.01系统移值源码
安富莱_STM32-V7开发板_用户手册,含BSP驱动包设计,手册详细。
stm32f030青峰开发板代码,定时器,GPIO,RTC,看门狗,uart,PWM等等例程
STM320518-单片机开发板uCOS-II V2.92.07系统移值源码
stm32f411开发板详细说明手册 Programming-with-Stm32-Getting-Started-with-the-Nucleo.pdf
STM32F401 官方开发板原理图 NUCLEO STM32F401 官方开发板原理图 NUCLEO
嵌入式_优质嵌入式项目之低功耗STM32F411开发板设计_原理图+PCB源文件+例程+驱动
STM32F407IGT6开发板-STM32F407IGT6开发板原理图.pdf
源码 1、stm32单片机之开发板介绍源码 1、stm32单片机之开发板介绍源码 1、stm32单片机之开发板介绍源码 1、stm32单片机之开发板介绍源码 1、stm32单片机之开发板介绍源码 1、stm32单片机之开发板介绍源码 1、stm32...