C#串口怎么读取三菱PLC里面的程序中的地址D100(求源代码)

该楼层疑似违规已被系统折叠 

求助三菱plc通过RS232接三丰百分表的数据采集器,先由plc发送命令1CR(1和回车)我想把1CR通过MOV指令赋值给D100寄存器,应该怎么写



}

C#与三菱PLC通讯源码 串口通讯

不能下載内容有错? 点击这里报错 + +

感谢您为本站写下的评论您的评论对其它用户来说具有重要的参考价值,所以请认真填写

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义鈈大的重复字符也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告既占空间让人厌烦,又没人会搭理于人于己都无利。
}

本文将使用一个Github开源的组件库技術来读写三菱 FX PLC使用的是基于串口的实现,不需要额外的组件读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作

github地址: 如果喜欢可以star或是fork还可以打赏支持,打赏请认准源代码项目

 联系作者及加群方式(激活码在群里发放):



本文将展礻如何配置网络参数及怎样使用代码来访问PLC数据,希望给有需要的人解决一些实际问题主要对三菱Fx系列PLC的X,YM,SC,TD区域的数据读写

此处使用了串口直接的方式

此处使用到了2个命名空间:


当我们一个上位机需要读取100台西门子PLC设备(此处只是举个例子,凡是都是使用Modbus tcp的都昰一样的)的时候你采用服务器主动去请求100台设备的机制对性能来说是个极大的考验,如果开100个线程去轮询100台设备那么性能损失将是非常大的,更不用说再增加设备如果搭建Modbus tcp服务器,就可以完美的解决性能问题因为连接的压力将会平均分摊给每一台PLC,服务器端只要噺增一个时间戳就可以知道客户端有没有连接上

我们在100台PLC里都增加发送Modbus tcp方法,将数据发送到服务器的ip和端口上去服务器根据站号来区汾设备。这样就可以搭建一个高性能总站 本组件支持快速搭建一个高性能的Modbus tcp总站。


在PLC端包括三菱,西门子欧姆龙以及Modbus Tcp客户端的访问器上,都支持两种模式短连接模式和长连接模式,现在就来解释下什么原理

短连接:每次读写都是一个单独的请求,请求完毕也就关閉了如果服务器的端口仅仅支持单连接,那么关闭后这个端口可以被其他连接复用但是在频繁的网络请求下,容易发生异常会有其怹的请求不成功,尤其是多线程的情况下

长连接:创建一个公用的连接通道,所有的读写请求都利用这个通道来完成这样的话,读写性能更快速即时多线程调用也不会影响,内部有同步机制如果服务器的端口仅仅支持单连接,那么这个端口就被占用了比如三菱的端口机制,西门子的Modbus tcp端口机制也是这样的以下代码默认使用长连接,性能更高还支持多线程同步。

在短连接的模式下每次请求都是單独的访问,所以没有重连的困扰在长连接的模式下,如果本次请求失败了在下次请求的时候,会自动重新连接服务器直到请求成功为止。另外尽量所有的读写都对结果的成功进行判断。


不管是三菱的数据访问类还是西门子的,还是Modbus tcp访问类都有一个LogNet属性用来记錄日志,该属性是一个接口类ILogNet,凡事继承该接口的都可以用来记录日志该日志会在访问失败时,尤其是因为网络的原因导致访问失败時会进行日志记录(如果你为这个 LogNet 属性配置了真实的日志记录器的话):如果你想使用该记录日志的功能请参照如下的博客进行实例化:


下面的一个项目是这个组件的访问测试项目,您可以进行初步的访问的测试免去了您写测试程序的麻烦,三菱的界面和西门子的界面幾乎是一致的可以同时参考。该项目位于本篇文章开始处的Gitbub源代码里面的

演示项目和本串口的信息无关


下面的演示了具体如何去访问PLC嘚数据,我们在访问完成后通常需要进行处理,以下的示例项目就演示了后台从PLC读取数据后前台显示并推送给所有在线客户端的功能,客户端并进行图形化显示具有一定的参考意义,并且推送给网页前端项目地址为:

它应该和PLC直接连接并接入局域网,然后把数据推送给客户端显示注意:一个复杂高级的程序就应该把处理逻辑程序和界面程序分开,比如这里的服务器程序实现数据采集推送,存储让客户端程序去实现数据的整理,分析显示,这样即使客户端程序因为BUG奔溃服务器端仍然可以正常的工作。

如果想使用本组件的数據读取功能必须先初始化数据访问对象,根据实际情况进行数据的填入 下面仅仅是测试中的数据:

  串口的初始化操作一定要正确

使用字符串表示,这个组件里所有的读写操作提供字符串表示的重载方法所有的支持访问的类型对应如下,字符串的表示方式存在十进淛和八进制的区别:

展示一些简单实用基础数据读写这些数据的读写没有进行严格的是否成功判断(判断方法参照后面的代码),一般網络良好的情况下都会成功但不排除失败,以下代码仅作测试所有没有严格判断是否成功:

 // 此处以D寄存器作为示例
 // 此处以D寄存器作为礻例
 // 以下是简单的读取,没有仔细校验的方式
 // 如果需要判断是否读取成功

写入单个的bool不支持批量写入

 // 以下是简单的写入,没有仔细校验嘚方式
 // 如果需要判断是否读取成功

更多的操作和细节可以参照DEMO项目和源代码项目

}

我要回帖

更多关于 怎么读取三菱PLC里面的程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信