网站首页 > 编程文章 正文
本次交流用到的工具清单
开发环境:win7系统
编程软件:易语言、 pcomm模块.ec
调试软件:MODBUS调试软件
硬件清单:
1.K型温控仪带RS485通讯协议
2.RS485串口转USB数据线
3.K型感温探头
4.电源
先上个硬件图
首先我们需要将硬件设备的连接部分要先搞好,我用CAD绘制了一张电路接线图,实际应用可以参照一下
接下来是打开电脑设备管理器 查看串口
我们得知当前温控仪连接上的是COM3端口,然后找一款MOUBUS协议串口调试软件
下面部分就用易语言来写代码 实现数据采集,我就不做详解了,懂易语言的朋友直接将代码填入进去就可以测试了。
根据自己喜欢,制作一个窗口界面。
填入代码后 运行看看是否能采集成功
可以看到。自己编写的组态软件已经可以成功采集到数据了。
以下是易语言的全部代码
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
时钟1.时钟周期 = 1000
.子程序 _时钟1_周期事件
时钟1.时钟周期 = 0
编辑框1.内容 = 串口发送 (3, 9600, 8, 0, 2, “010300000001”, “1”, 20170418)
时钟2.时钟周期 = 1000
.子程序 _时钟2_周期事件
时钟2.时钟周期 = 0
编辑框1.内容 = 串口发送 (3, 9600, 8, 0, 2, “010400050001”, “1”, 20170418)
时钟1.时钟周期 = 1000
.子程序 串口发送, 文本型, 公开
.参数 端口号A, 整数型
.参数 波特率A, 整数型
.参数 数据位数A, 整数型
.参数 效验位A, 整数型
.参数 停止位A, 整数型
.参数 发送的数据, 文本型
.参数 小数点位数, 文本型
.参数 通讯, 整数型
.局部变量 波特率, 整数型
.局部变量 数据位数, 整数型
.局部变量 校验位, 整数型
.局部变量 停止位, 整数型
.局部变量 临时波特率, 文本型
.局部变量 临时数据位数, 文本型
.局部变量 临时效验位, 文本型
.局部变量 临时停止位, 文本型
.局部变量 长度, 整数型
.局部变量 N, 整数型
接收的代码 = “”
小数点 = “”
临时波特率 = 到文本 (波特率A)
临时数据位数 = 到文本 (数据位数A)
临时效验位 = 到文本 (效验位A)
临时停止位 = 到文本 (停止位A)
小数点 = 小数点位数
.如果真 (通讯 ≠ 20170418)
返回 (到文本 (端口号A))
.如果真结束
' ==================================================
' ------------- 波特率选择 ----------
' ==================================================
.如果真 (临时波特率 = “110”)
波特率 = #MODE_B110
.如果真结束
.如果真 (临时波特率 = “300”)
波特率 = #MODE_B300
.如果真结束
.如果真 (临时波特率 = “600”)
波特率 = #MODE_B600
.如果真结束
.如果真 (临时波特率 = “1200”)
波特率 = #MODE_B1200
.如果真结束
.如果真 (临时波特率 = “2400”)
波特率 = #MODE_B2400
.如果真结束
.如果真 (临时波特率 = “4800”)
波特率 = #MODE_B4800
.如果真结束
.如果真 (临时波特率 = “9600”)
波特率 = #MODE_B9600
.如果真结束
.如果真 (临时波特率 = “19200”)
波特率 = #MODE_B19200
.如果真结束
.如果真 (临时波特率 = “38400”)
波特率 = #MODE_B38400
.如果真结束
.如果真 (临时波特率 = “57600”)
波特率 = #MODE_B57600
.如果真结束
.如果真 (临时波特率 = “115200”)
波特率 = #MODE_B115200
.如果真结束
.如果真 (临时波特率 = “230400”)
波特率 = #MODE_B230400
.如果真结束
.如果真 (临时波特率 = “460800”)
波特率 = #MODE_B460800
.如果真结束
' ==================================================
' ------------- 数据位选择 ----------
' ==================================================
.如果真 (临时数据位数 = “5”)
数据位数 = 0 ' 5位数据位
.如果真结束
.如果真 (临时数据位数 = “6”)
数据位数 = 1 ' 6位数据位
.如果真结束
.如果真 (临时数据位数 = “7”)
数据位数 = 2 ' 7位数据位
.如果真结束
.如果真 (临时数据位数 = “8”)
数据位数 = 3 ' 8位数据位
.如果真结束
' ==================================================
' ------------- 校验位选择 ----------
' ==================================================
.如果真 (临时效验位 = “NONE”)
校验位 = 0 ' NONE 无校验
.如果真结束
.如果真 (临时效验位 = “ODD”)
校验位 = 8 ' ODD 奇校验
.如果真结束
.如果真 (临时效验位 = “EVEN”)
校验位 = 24 ' EVEN 偶校验
.如果真结束
' ==================================================
' ------------- 停止位选择 ----------
' ==================================================
.如果真 (临时停止位 = “1”)
停止位 = 0 ' 1位停止位
.如果真结束
.如果真 (临时停止位 = “2”)
停止位 = 4 ' 2位停止位
.如果真结束
' ===============================================
' ------------端口启动----------------------
' ===============================================
.如果 (打开串口 (端口号A) = 0)
.如果 (设置数据到达事件 (端口号A, &数据到达事件, 1) = 0)
.如果 (设置串口 (端口号A, 波特率, 数据位数 + 校验位 + 停止位) = 0)
长度 = 生成代码 (发送的数据)
长度 = 写出字符串 (端口号A, 取变量数据地址 (程_生成的代码), 长度)
读取完毕 = 假
.计次循环首 (5, N)
.如果真 (读取完毕 = 真)
关闭串口 (端口号A)
返回 (接收的代码)
跳出循环 ()
.如果真结束
.计次循环尾 ()
关闭串口 (端口号A)
返回 (“读取失败”)
.否则
关闭串口 (端口号A)
返回 (“设置通讯端口打开失败,请检查是否有此端口”)
.如果结束
.否则
关闭串口 (端口号A)
返回 (“设置数据到达事件失败”)
.如果结束
.否则
关闭串口 (端口号A)
返回 (“通讯端口打开失败,请检查是否有此端口”)
.如果结束
关闭串口 (端口号A)
.子程序 校验码3, 文本型, 公开
.参数 需计算校验码的文本, 文本型
.局部变量 计次, 整数型
.局部变量 校验码, 文本型
校验码 = “65535” ' 十六进制“FFFF”
计次 = 1
.计次循环首 (取文本长度 (需计算校验码的文本) ÷ 2, )
校验码 = 进制转换 (到文本 (校验码), 10, 16)
校验码 = 到文本 (位异或 (到整数 (进制转换 (校验码, 16, 10)), 到整数 (进制转换 (取文本中间 (需计算校验码的文本, 计次, 2), 16, 10))))
计次 = 计次 + 2
.计次循环首 (8, )
.如果 (位与 (到整数 (校验码), 1) = 1)
校验码 = 到文本 (位异或 (右移 (到整数 (校验码), 1), 到整数 (进制转换 (“A001”, 16, 10))))
.否则
校验码 = 到文本 (右移 (到整数 (校验码), 1))
.如果结束
.计次循环尾 ()
.计次循环尾 ()
校验码 = 进制转换 (校验码, 10, 16)
.如果真 (取文本长度 (校验码) = 1)
校验码 = “000” + 校验码
.如果真结束
.如果真 (取文本长度 (校验码) = 2)
校验码 = “00” + 校验码
.如果真结束
.如果真 (取文本长度 (校验码) = 3)
校验码 = “0” + 校验码
.如果真结束
校验码 = 取文本右边 (校验码, 2) + 取文本左边 (校验码, 2)
返回 (校验码)
.子程序 进制转换, 文本型, 公开, 。
.参数 被转换文本, 文本型
.参数 被转换进制, 整数型
.参数 转换的进制, 整数型
.局部变量 欲转换文本, 文本型
.局部变量 临时文本, 文本型
.局部变量 临时数值, 长整数型
.局部变量 计次变量, 整数型
.如果真 (被转换进制 < 2 或 转换的进制 < 2 或 被转换进制 > 36 或 转换的进制 > 36) ' 判断两个“进制系数”是否正确
返回 (“参数错误-进制只能在2-36之间”)
.如果真结束
被转换文本 = 到大写 (到半角 (被转换文本)) ' 规范参数
.计次循环首 (取文本长度 (被转换文本), 计次变量)
临时文本 = 取文本中间 (被转换文本, 计次变量, 1)
.如果真 (寻找文本 (取文本左边 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 被转换进制), 临时文本, , 假) = -1)
临时文本 = “参数错误-” + 被转换文本 + “不是一个有效的” + 取文本左边 (数值到金额 (被转换进制, 真), 取文本长度 (数值到金额 (被转换进制, 真)) - 4) + “进制数!”
跳出循环 ()
.如果真结束
.如果真 (计次变量 = 取文本长度 (被转换文本))
临时文本 = “”
.如果真结束
.计次循环尾 ()
.如果真 (临时文本 ≠ “”)
返回 (临时文本)
.如果真结束
' 以上为数据处理代码
.如果真 (被转换进制 = 转换的进制)
返回 (被转换文本)
.如果真结束
.计次循环首 (取文本长度 (被转换文本), 计次变量) ' 整数转换开始
临时数值 = (寻找文本 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 取文本中间 (被转换文本, 计次变量, 1), , 真) - 1) × 求次方 (被转换进制, 取文本长度 (被转换文本) - 计次变量) + 临时数值
.计次循环尾 ()
.判断循环首 (临时数值 > 转换的进制 - 1)
欲转换文本 = 取文本中间 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 到数值 (到文本 (临时数值 % 转换的进制)) + 1, 1) + 欲转换文本
临时数值 = 取整 (临时数值 ÷ 转换的进制)
.判断循环尾 ()
欲转换文本 = 取文本中间 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 临时数值 + 1, 1) + 欲转换文本 ' 整数转换结束
返回 (欲转换文本)
.子程序 十六到十, 长整数型
.参数 十六, 文本型
.局部变量 z
.局部变量 位置1, 文本型
.局部变量 结果, 长整数型
.计次循环首 (取文本长度 (十六), z)
位置1 = 取文本中间 (十六, z, 1)
结果 = (寻找文本 (“0123456789ABCDEF”, 位置1, , 真) - 1) × 求次方 (16, 取文本长度 (十六) - z) + 结果
.计次循环尾 ()
返回 (结果)
.子程序 生成代码, 整数型, , 内
.参数 命令字符串, 文本型, , 如“010321020002”
.局部变量 命令代码, 文本型
.局部变量 临时文本, 文本型
.局部变量 校验码, 文本型
.局部变量 计次, 整数型
.局部变量 i, 整数型
.局部变量 文本长度, 整数型
校验码 = 校验码3 (命令字符串)
命令代码 = 命令字符串 + 校验码
文本长度 = 取文本长度 (命令代码)
计次 = 1
重定义数组 (程_生成的代码, 假, 文本长度 ÷ 2)
.计次循环首 (文本长度 ÷ 2, i)
临时文本 = 取文本中间 (命令代码, 计次, 2)
程_生成的代码 [i] = 到字节 (进制转换 (临时文本, 16, 10))
计次 = 计次 + 2
.计次循环尾 ()
返回 (i - 1)
.子程序 数据到达事件
.参数 串口号
.局部变量 读入的字节集, 字节集
.局部变量 计次, 整数型
.局部变量 收到的字节长度, 整数型
.局部变量 临时文本, 文本型
.局部变量 临时分割, 文本型, , "0"
.局部变量 临时, 文本型, , "0"
.局部变量 总数, 整数型
.局部变量 结果, 文本型
.局部变量 i, 整数型
.局部变量 结果1, 文本型
.局部变量 总数1, 整数型
.局部变量 临时1, 文本型, , "0"
.局部变量 i1, 整数型
.局部变量 数值1, 文本型
.局部变量 数值2, 文本型
.局部变量 统计接收次数, 整数型, 静态
.局部变量 临时值, 文本型
.局部变量 读到的频率, 文本型, , "0"
.局部变量 组合, 文本型
读入的字节集 = 取空白字节集 (20)
收到的字节长度 = 读入字符串 (1, 读入的字节集, 20)
.如果真 (收到的字节长度 = 7)
.计次循环首 (收到的字节长度, 计次)
临时文本 = 进制转换 (到文本 (读入的字节集 [计次]), 10, 16)
.如果真 (取文本长度 (临时文本) = 1)
临时文本 = “0” + 临时文本
.如果真结束
接收的代码 = 接收的代码 + 临时文本 + “#”
.计次循环尾 ()
读到的频率 = 分割文本 (接收的代码, “#”, )
组合 = 进制转换 (读到的频率 [4] + 读到的频率 [5], 16, 10)
总数 = 取数组成员数 (临时) - 到整数 (小数点)
.计次循环首 (取数组成员数 (临时), i)
结果 = 结果 + 临时 [i]
.如果真 (i = 总数)
结果 = 结果 + “.”
.如果真结束
.计次循环尾 ()
接收的代码 = 结果
读取完毕 = 真
清除数组 (读到的频率)
.如果真结束
猜你喜欢
- 2024-09-09 中文编程日记:如何在屏幕上写字?(在屏幕上写字怎么写)
- 2024-09-09 勒索病毒首现要微信支付 还窃取QQ、支付宝等账户信息
- 2024-09-09 中文编程易语言是否能用过来写游戏脚本?
- 2024-09-09 注意!“勒索病毒”又来了,这次瞄准的是……
- 2024-09-09 「开源」朗读你的所选——调用百度语音合成例子
- 2024-09-09 易语言 如何开发网站(易语言搭建网站)
- 2024-09-09 中文编程日记:如何对外部软件发送和取出内容?
- 2024-09-09 Q群沉默坛友流泪“有偿修改代码”竟是勒索病毒下的
- 2024-09-09 勒索病毒首现微信支付 还窃取QQ、支付宝等账户信息
- 2024-09-09 小伙利用C++模仿酷狗7(Kugou7) UI界面源码,附带炫酷动画效果哦
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)