网页控制聚英继电器JY-DAM3200代码

    第一次使用web控制一个实体硬件,需要通过网页调用串口,摸索了一阵子,终于选定用python+php+jQuery+html实现了。

 第一部分:web首页界面 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>继电器调控测试</title>
<script src="/public/js/jquery.js"></script>
<script>
$(document).ready(function(){
$("input").each(function(){
$(this).bind("click",function(){
com($(this)[0].checked,$(this).attr("lu"))
})
})
})

function com(s,lu){
$.ajax({
type:'get',
async:true,
timeout : 20000,//20秒
url: "http://bsfx.longsunhd.com:60096/jdq.php?lu="+lu+"&s="+s,
data: "",
dataType: "html",
success: function(html){
}
});
}
</script>

</head>
<body>
<input type=checkbox on="FE 05 00 00 FF 00 98 35" off="FE 05 00 00 00 00 D9 C5" lu="0">第1路<br>
<input type=checkbox on="FE 05 00 01 FF 00 C9 F5" off="FE 05 00 01 00 00 88 05" lu="1">第2路<br>
<input type=checkbox on="FE 05 00 02 FF 00 39 F5" off="FE 05 00 02 00 00 78 05" lu="2">第3路<br>
<input type=checkbox on="FE 05 00 03 FF 00 68 35" off="FE 05 00 03 00 00 29 C5" lu="3">第4路<br>
<input type=checkbox on="FE 05 00 04 FF 00 D9 F4" off="FE 05 00 04 00 00 98 04" lu="4">第5路<br>
<input type=checkbox on="FE 05 00 05 FF 00 88 34" off="FE 05 00 05 00 00 C9 C4" lu="5">第6路<br>
<input type=checkbox on="FE 05 00 06 FF 00 78 34" off="FE 05 00 06 00 00 39 C4" lu="6">第7路<br>
<input type=checkbox on="FE 05 00 07 FF 00 29 F4" off="FE 05 00 07 00 00 68 04" lu="7">第8路<br>
<input type=checkbox on="FE 05 00 08 FF 00 19 F7" off="FE 05 00 08 00 00 58 07" lu="8">第9路<br>
<input type=checkbox on="FE 05 00 09 FF 00 48 37" off="FE 05 00 09 00 00 09 C7" lu="9">第10路<br>
<input type=checkbox on="FE 05 00 0A FF 00 B8 37" off="FE 05 00 0A 00 00 F9 C7" lu="10">第11路<br>
<input type=checkbox on="FE 05 00 0B FF 00 E9 F7" off="FE 05 00 0B 00 00 A8 07" lu="11">第12路<br>
<input type=checkbox on="FE 05 00 0C FF 00 58 36" off="FE 05 00 0C 00 00 19 C6" lu="12">第13路<br>
<input type=checkbox on="FE 05 00 0D FF 00 09 F6" off="FE 05 00 0D 00 00 48 06" lu="13">第14路<br>
<input type=checkbox on="FE 05 00 0E FF 00 F9 F6" off="FE 05 00 0E 00 00 B8 06" lu="14">第15路<br>
<input type=checkbox on="FE 05 00 0F FF 00 A8 36" off="FE 05 00 0F 00 00 E9 C6" lu="15">第16路<br>
<input type=checkbox on="FE 05 00 10 FF 00 99 F0" off="FE 05 00 10 00 00 D8 00" lu="16">第17路<br>
<input type=checkbox on="FE 05 00 11 FF 00 C8 30" off="FE 05 00 11 00 00 89 C0" lu="17">第18路<br>
<input type=checkbox on="FE 05 00 12 FF 00 38 30" off="FE 05 00 12 00 00 79 C0" lu="18">第19路<br>
<input type=checkbox on="FE 05 00 13 FF 00 69 F0" off="FE 05 00 13 00 00 28 00" lu="19">第20路<br>
<input type=checkbox on="FE 05 00 14 FF 00 D8 31" off="FE 05 00 14 00 00 99 C1" lu="20">第21路<br>
<input type=checkbox on="FE 05 00 15 FF 00 89 F1" off="FE 05 00 15 00 00 C8 01" lu="21">第22路<br>
<input type=checkbox on="FE 05 00 16 FF 00 79 F1" off="FE 05 00 16 00 00 38 01" lu="22">第23路<br>
<input type=checkbox on="FE 05 00 17 FF 00 28 31" off="FE 05 00 17 00 00 69 C1" lu="23">第24路<br>
<input type=checkbox on="FE 05 00 18 FF 00 18 32" off="FE 05 00 18 00 00 59 C2" lu="24">第25路<br>
<input type=checkbox on="FE 05 00 19 FF 00 49 F2" off="FE 05 00 19 00 00 08 02" lu="25">第26路<br>
<input type=checkbox on="FE 05 00 1A FF 00 B9 F2" off="FE 05 00 1A 00 00 F8 02" lu="26">第27路<br>
<input type=checkbox on="FE 05 00 1B FF 00 E8 32" off="FE 05 00 1B 00 00 A9 C2" lu="27">第28路<br>
<input type=checkbox on="FE 05 00 1C FF 00 59 F3" off="FE 05 00 1C 00 00 18 03" lu="28">第29路<br>
<input type=checkbox on="FE 05 00 1D FF 00 08 33" off="FE 05 00 1D 00 00 49 C3" lu="29">第30路<br>
<input type=checkbox on="FE 05 00 1E FF 00 F8 33" off="FE 05 00 1E 00 00 B9 C3" lu="30">第31路<br>
<input type=checkbox on="FE 05 00 1F FF 00 A9 F3" off="FE 05 00 1F 00 00 E8 03" lu="31">第32路<br>
<br>
<input type=checkbox on="FE 05 00 1F FF 00 A9 F3" off="FE 05 00 1F 00 00 E8 03" lu="32">全路<br>
</body>
</html>


第二部分 jdq.php
<?php
$_REQUEST[s]=($_REQUEST[s]=="true")?0:1;
$result=shell_exec("D:/Python/python.exe com.py $_REQUEST[lu] $_REQUEST[s]");

第三部分 COM.py
 
 from sys import argv
import serial
import string
import time
import binascii
import sys
import struct
import re
f,lu,s = argv

cm=[]
cm.append([[0xFE,0x05,0x00,0x00,0xFF,0x00,0x98,0x35],[0xFE,0x05,0x00,0x00,0x00,0x00,0xD9,0xC5]])
cm.append([[0xFE,0x05,0x00,0x01,0xFF,0x00,0xC9,0xF5],[0xFE,0x05,0x00,0x01,0x00,0x00,0x88,0x05]])
cm.append([[0xFE,0x05,0x00,0x02,0xFF,0x00,0x39,0xF5],[0xFE,0x05,0x00,0x02,0x00,0x00,0x78,0x05]])
cm.append([[0xFE,0x05,0x00,0x03,0xFF,0x00,0x68,0x35],[0xFE,0x05,0x00,0x03,0x00,0x00,0x29,0xC5]])
cm.append([[0xFE,0x05,0x00,0x04,0xFF,0x00,0xD9,0xF4],[0xFE,0x05,0x00,0x04,0x00,0x00,0x98,0x04]])
cm.append([[0xFE,0x05,0x00,0x05,0xFF,0x00,0x88,0x34],[0xFE,0x05,0x00,0x05,0x00,0x00,0xC9,0xC4]])
cm.append([[0xFE,0x05,0x00,0x06,0xFF,0x00,0x78,0x34],[0xFE,0x05,0x00,0x06,0x00,0x00,0x39,0xC4]])
cm.append([[0xFE,0x05,0x00,0x07,0xFF,0x00,0x29,0xF4],[0xFE,0x05,0x00,0x07,0x00,0x00,0x68,0x04]])
cm.append([[0xFE,0x05,0x00,0x08,0xFF,0x00,0x19,0xF7],[0xFE,0x05,0x00,0x08,0x00,0x00,0x58,0x07]])
cm.append([[0xFE,0x05,0x00,0x09,0xFF,0x00,0x48,0x37],[0xFE,0x05,0x00,0x09,0x00,0x00,0x09,0xC7]])
cm.append([[0xFE,0x05,0x00,0x0A,0xFF,0x00,0xB8,0x37],[0xFE,0x05,0x00,0x0A,0x00,0x00,0xF9,0xC7]])
cm.append([[0xFE,0x05,0x00,0x0B,0xFF,0x00,0xE9,0xF7],[0xFE,0x05,0x00,0x0B,0x00,0x00,0xA8,0x07]])
cm.append([[0xFE,0x05,0x00,0x0C,0xFF,0x00,0x58,0x36],[0xFE,0x05,0x00,0x0C,0x00,0x00,0x19,0xC6]])
cm.append([[0xFE,0x05,0x00,0x0D,0xFF,0x00,0x09,0xF6],[0xFE,0x05,0x00,0x0D,0x00,0x00,0x48,0x06]])
cm.append([[0xFE,0x05,0x00,0x0E,0xFF,0x00,0xF9,0xF6],[0xFE,0x05,0x00,0x0E,0x00,0x00,0xB8,0x06]])
cm.append([[0xFE,0x05,0x00,0x0F,0xFF,0x00,0xA8,0x36],[0xFE,0x05,0x00,0x0F,0x00,0x00,0xE9,0xC6]])
cm.append([[0xFE,0x05,0x00,0x10,0xFF,0x00,0x99,0xF0],[0xFE,0x05,0x00,0x10,0x00,0x00,0xD8,0x00]])
cm.append([[0xFE,0x05,0x00,0x11,0xFF,0x00,0xC8,0x30],[0xFE,0x05,0x00,0x11,0x00,0x00,0x89,0xC0]])
cm.append([[0xFE,0x05,0x00,0x12,0xFF,0x00,0x38,0x30],[0xFE,0x05,0x00,0x12,0x00,0x00,0x79,0xC0]])
cm.append([[0xFE,0x05,0x00,0x13,0xFF,0x00,0x69,0xF0],[0xFE,0x05,0x00,0x13,0x00,0x00,0x28,0x00]])
cm.append([[0xFE,0x05,0x00,0x14,0xFF,0x00,0xD8,0x31],[0xFE,0x05,0x00,0x14,0x00,0x00,0x99,0xC1]])
cm.append([[0xFE,0x05,0x00,0x15,0xFF,0x00,0x89,0xF1],[0xFE,0x05,0x00,0x15,0x00,0x00,0xC8,0x01]])
cm.append([[0xFE,0x05,0x00,0x16,0xFF,0x00,0x79,0xF1],[0xFE,0x05,0x00,0x16,0x00,0x00,0x38,0x01]])
cm.append([[0xFE,0x05,0x00,0x17,0xFF,0x00,0x28,0x31],[0xFE,0x05,0x00,0x17,0x00,0x00,0x69,0xC1]])
cm.append([[0xFE,0x05,0x00,0x18,0xFF,0x00,0x18,0x32],[0xFE,0x05,0x00,0x18,0x00,0x00,0x59,0xC2]])
cm.append([[0xFE,0x05,0x00,0x19,0xFF,0x00,0x49,0xF2],[0xFE,0x05,0x00,0x19,0x00,0x00,0x08,0x02]])
cm.append([[0xFE,0x05,0x00,0x1A,0xFF,0x00,0xB9,0xF2],[0xFE,0x05,0x00,0x1A,0x00,0x00,0xF8,0x02]])
cm.append([[0xFE,0x05,0x00,0x1B,0xFF,0x00,0xE8,0x32],[0xFE,0x05,0x00,0x1B,0x00,0x00,0xA9,0xC2]])
cm.append([[0xFE,0x05,0x00,0x1C,0xFF,0x00,0x59,0xF3],[0xFE,0x05,0x00,0x1C,0x00,0x00,0x18,0x03]])
cm.append([[0xFE,0x05,0x00,0x1D,0xFF,0x00,0x08,0x33],[0xFE,0x05,0x00,0x1D,0x00,0x00,0x49,0xC3]])
cm.append([[0xFE,0x05,0x00,0x1E,0xFF,0x00,0xF8,0x33],[0xFE,0x05,0x00,0x1E,0x00,0x00,0xB9,0xC3]])
cm.append([[0xFE,0x05,0x00,0x1F,0xFF,0x00,0xA9,0xF3],[0xFE,0x05,0x00,0x1F,0x00,0x00,0xE8,0x03]])
cm.append([[0xFE,0x0F,0x00,0x00,0x00,0x10,0x02,0xFF,0xFF,0xA6,0x64],[0xFE,0x0F,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xA7,0xD4]])
#需要将硬件RTU格式命令(十六进制)如 FE 05 00 00 FF 00 98 35,转成字节码形式,即在前面加0x,变成数组形式[0xFE,0x05,0x00,0x00,0xFF,0x00,0x98,0x35]输送给硬件串口,以实现指令过程。

try:
ser = serial.Serial('COM3', 9600)  #需要连接串口线后,通过在硬件管理里查看串口的名字(这里是COM3)。
except:
print('open serial failed.')
exit(1)

cmd_send=cm[int(lu)][int(s)]
s=ser.write(cmd_send)
print(cmd_send)
ser.close()

转载于:https://www.cnblogs.com/yzs1013/p/7761835.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

monaco-editor 监听保存按钮

个人已经觉得monaco-editor比CodeMirror好了&#xff0c;所以开始研究monaco-editor。 基本用法网上很多&#xff0c;我的需求是写一段文字后&#xff0c;直接保存&#xff0c;实时在浏览器中显示效果。 但是默认的command s会直接跳出浏览器的保存网页操作&#xff0c;所以…

http://w3cschool.codecloud.net/python/python-object.html?ref=myread

Python 面向对象教程 http://w3cschool.codecloud.net/python/python-object.html?refmyread

工作145:vue里面取消console和debugger

开发过程中&#xff0c;经常需要使用console.log、console.info、alert等操作来输出内容&#xff0c;测试代码&#xff0c;而在生产环境之中&#xff0c;这些打印的东西最好是不要显示、特别是用户名、密码相关。 一个个去删除、注释显然是很麻烦的一件事&#xff0c;所以我们可…

Program type already present: android.support.design.widget.xx

主要提示错误意思是support版本问题。 解决方法&#xff1a; 统一build.gradle中所以关于support依赖的版本&#xff0c;有的25就都改为25&#xff0c;有点27就都改为27。 Sync。同步即可

推荐一个好库 热键监听 hotkeys-js

使用代码 import hotkeys from hotkeys-js hotkeys(commands, function (event, handler) {// 阻止窗体自带事件event.preventDefault()alert(you pressed commands!) })

js的加密和解密

最近在研究js的加密和解密的问题&#xff0c;上网上搜出来很多方法&#xff0c;不过不知道到底哪一个会比较管用。这里是今天找到的一些关于base64加密解密的js代码&#xff0c;已经经过试验&#xff0c;可以使用&#xff0c;不过网上很多加密解密的工具&#xff0c;这种方式加…

TCP/IP协议三次握手与四次握手流程解析

一、TCP报文格式TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图&#xff1a;图1 TCP报文格式上图中有几个字段需要重点介绍下&#xff1a;&#xff08;1&#xff09;序号&#xff1a;Seq序号&#xff0c;占32位&#xff0c;用来标识从TCP源端向目的端…

Android 使用ViewPager实现导航页面

PagerAdapter类 /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;13164716840163.com* 日期&#xff1a;2018/7/23 17*/public class GuidePageAdapter extends PagerAdapter {private List<View> views;public GuidePageAdapter(List<View> views) {thi…

js动态创建样式style

我的样式是从后台动态获取&#xff0c;前端进行渲染的&#xff0c;核心代码如下 const style .vue-preview .text {color: #4fc08d;} this.styleEl document.createElement(style) this.styleEl.type text/css this.styleEl.innerHTML style; document.getElementsByTagN…

h5有哪些新特性?

面试的时候会问到这一道题&#xff0c;根据w3school上的文档是这样的 新特性 HTML5 中的一些有趣的新特性&#xff1a; 用于绘画的 canvas 元素用于媒介回放的 video 和 audio 元素对本地离线存储的更好的支持新的特殊内容元素&#xff0c;比如 article、footer、header、nav、…

jmeter 入门操作

今天用领导交给我一个任务&#xff0c;有一个链接需要调用200次&#xff0c;但是其中的一个参数需要变化。如果要用手工&#xff0c;哦&#xff0c;&#xff2e;&#xff2f;&#xff0c;我不敢往下想。。。。。 想想jmeter强大的功能&#xff0c;就用这个来试试吧&#xff0c;…

either fix the issues identified by lint, or modify your build script as follows

Android studio 在打包时报错如下&#xff1a; Lint found fatal errors while assembling a release target. To proceed, either fix the issues identified by lint, or modify your build script as follows: ... android { lintOptions { checkReleaseBuild…

node npm包安装 save和save-dev的区别

进行npm包安装的时候&#xff0c;我们经常使用 npm install package-name --save npm install package-name --save-dev或者 yarn add package-name yarn add package-name --dev在我们本地开发&#xff0c;需要一些调试工具库的时候&#xff0c;使用--dev进行安装&#xff0…

Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

网站日志分析项目案例&#xff08;一&#xff09;项目介绍&#xff1a;http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例&#xff08;二&#xff09;数据清洗&#xff1a;http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例&#…

Jmeter使用流程及简单分析监控

一、安装Jmeter 1、下载Jmeter 下载地址&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 目前最新版为2.9&#xff0c;其余文件如源代码等也可从如下官网下载&#xff1a; http://jmeter.apache.org/download_jmeter.cgi 2、安装Jmeter之前 安装Jmeter之前需要先配置…

Android 后台线程Thread调用前台线程Handler,延时线程,runOnUiThread使用,Timer延时,定时循环,倒计时

UI线程 /*** 发送message*/ public static void sendMessage(int what, Object obj, Handler mHandler) {Message msg new Message();msg.what what;if (obj ! null) {msg.obj obj;}mHandler.sendMessage(msg); } 发送 AppUtils.sendMessage(1, object, mHandler); 接收 …

SQLAllocStmt与SQLFreeStmt

1、申请语句句柄    SQLAllocStmt函数为应用程序分配语句句柄&#xff0c;其格式为&#xff1a;RETCODE SQLAllocStmt(HDBC hdbc, HSTMT FAR * phstmt)  其中&#xff0c;   hdbc为连接句柄。每个语句句柄总是与一个连接句柄相关联&#xff0c;所以在申请语句句柄时&…

工作150:1、根据后台传值动态显示开关状态及文字说明(0为文字,1为图标)

实施方法 Swich默认是boolean类型&#xff0c;而后台传值 为number类型&#xff0c;这个时候我们需要用number来取代boolean类型&#xff1b; <template slot-scope"scope"><el-switch v-model"state"on-value"1"off-value"0&quo…