java上位机

2023-05-16

可以做,我有做好的底层通讯程序,无需了解通讯协议,只要正确配置就可以读出相应的寄存器的值,数据类型支持short,int,float等,我也有做好的界面,打成了jar运行包,有需要的联系我

package com.tminfo.wang.unit;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Toolkit;


import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;


import javax.swing.*;
import com.mhl.tools.MyTools;


import java.util.Timer;  
import java.util.TimerTask;
import java.util.Vector;


public class JieMian extends JFrame implements Runnable,ActionListener{


/**
* @param args
*/
JTextField  jtf1,jtf2,jtf3,jtf4;
JLabel jlb1,jlb2,jlb3,jlb4;
JPanel jp1;
JButton jstart,jstop,jsclecthih,jsclectman;
int data1=0;
static BaseUnit BaseUnit1=null;
Myjpanel myj;
static int numvalue[]=new int[10];
public static void main(String[] args) {
// TODO Auto-generated method stub
//界面初始化并启动线程jar包qq群 576982602
JieMian JieMian=new JieMian();
Thread t1 =new Thread(JieMian);
t1.start();
//实例化读数据
BaseUnit1=new BaseUnit();
}
public JieMian()
{
myj=new Myjpanel(BaseUnit1);
myj.setBackground(Color.gray);
this.add(myj);

//jp1面板布局为空
jp1=new JPanel();
jp1.setLayout(null);
jstart=new JButton("启动");
// jstart.setFont(MyTools.f1);
jstart.setBounds(3,90,70,30);
jstart.addActionListener(this);
jp1.add(jstart);
jstop=new JButton("停止");
jstop.setBounds(80,90,70,30);
jstop.addActionListener(this);
jp1.add(jstop);
jsclecthih=new JButton("高速切换");
jsclecthih.setBounds(155,90,90,30);
jsclecthih.addActionListener(this);
jp1.add(jsclecthih);
jsclectman=new JButton("手自动切换");
jsclectman.setBounds(252,90,99,30);
jsclectman.addActionListener(this);
jp1.add(jsclectman);

   //标签
jlb1=new JLabel("温度");
jlb1.setFont(MyTools.f1);
jlb1.setBounds(10, 20, 50, 30);
jp1.add(jlb1);
// 建立一个文本框
jtf1=new JTextField(20);
jtf1.setFont(MyTools.f1);
jtf1.setBounds(60, 25, 60, 25);
jtf1.setBorder(BorderFactory.createLoweredBevelBorder());
jp1.add(jtf1);

//标签
jlb2=new JLabel("湿度");
jlb2.setFont(MyTools.f1);
jlb2.setBounds(10+160, 20, 50, 30);
jp1.add(jlb2);
// 建立一个文本框
jtf2=new JTextField(20);
jtf2.setFont(MyTools.f1);
jtf2.setBounds(10+160+50, 25, 60, 25);
jtf2.setBorder(BorderFactory.createLoweredBevelBorder());
jp1.add(jtf2);

// jp1.setLayout(new GridLayout(3,2));
this.add(jp1);
//不显示边框
// this.setUndecorated(true);

this.setLayout(new GridLayout(2,1));
int width=Toolkit.getDefaultToolkit().getScreenSize().width;
int height=Toolkit.getDefaultToolkit().getScreenSize().height;
this.setSize(370, 300);
this.setLocation(width/2-200, height/2-200);
this.setVisible(true);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
@Override
public void run() {
// TODO Auto-generated method stubr
while (true)
{
//系统启动后延时500ms
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//读数据
BaseUnit1.readdata();
//写数据
BaseUnit1.writedata();

myj.repaint();
//将数据关联到界面
jtf1.setText(Integer.toString(BaseUnit1.getValueint().get(10)));
jtf2.setText(Integer.toString(BaseUnit1.getValueint().get(11)));
}

}
//按钮的监听事件
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource().equals(jstart))
{
System.out.println("启动");
if (numvalue[2]==1)
{
numvalue[0]=1;
numvalue[1]=0;
}
BaseUnit1.setNumvalue(numvalue);

}else if(e.getSource().equals(jstop))
{
System.out.println("停止");
numvalue[0]=0;
numvalue[1]=1;
BaseUnit1.setNumvalue(numvalue);
}else if(e.getSource().equals(jsclectman))
{
System.out.println("手自动切换");
if(numvalue[2]==0)
{
numvalue[2]=1;
numvalue[3]=0;
}else
{
numvalue[0]=0;
numvalue[1]=1;
numvalue[2]=0;
numvalue[3]=1;
}
BaseUnit1.setNumvalue(numvalue);
}else if(e.getSource().equals(jsclecthih))
{
System.out.println("高低速切换");
if (numvalue[3]==1)
{
if (numvalue[4]==1)
{
numvalue[4]=0;
numvalue[5]=1;
}else
{
numvalue[4]=1;
numvalue[5]=0;
}
}
BaseUnit1.setNumvalue(numvalue);
}
}


public static BaseUnit getBaseUnit1() {
return BaseUnit1;
}
public static void setBaseUnit1(BaseUnit baseUnit1) {
BaseUnit1 = baseUnit1;
}
}


package com.tminfo.wang.unit;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;


import javax.swing.JPanel;


//创建面板画图
public class Myjpanel extends JPanel 
{
BaseUnit BaseUnit1=null;
Color Colorstring=null;
int x;
int y;


public Myjpanel( BaseUnit BaseUnit1)
{
Colorstring=new Color(0,0,0);
//设置灯之间的距离
x=50;
}
public void paint(Graphics g)
{
if (BaseUnit1.getValueint().size()>0)
{
super.paint(g);
g.setFont(new Font("宋体",Font.BOLD,20)); 
this.drawstring(g, 100,30,Colorstring,"上位机监控画面");

g.setFont(new Font("宋体",Font.BOLD,12));
this.drawoval(g, 30,70,this.judgecolor(BaseUnit1.getValueint().get(0)));
this.drawstring(g, 30,110,Colorstring,"运行");


this.drawoval(g, 30+x,70,this.judgecolor(BaseUnit1.getValueint().get(1)));
this.drawstring(g, 30+1*x,110,Colorstring,"停止");

this.drawoval(g, 30+2*x,70,this.judgecolor(BaseUnit1.getValueint().get(2)));
this.drawstring(g, 30+2*x,110,Colorstring,"自动");

this.drawoval(g, 30+3*x,70,this.judgecolor(BaseUnit1.getValueint().get(3)));
this.drawstring(g, 30+3*x,110,Colorstring,"手动");

this.drawoval(g, 30+4*x+10,70,this.judgecolor(BaseUnit1.getValueint().get(4)));
this.drawstring(g, 30+4*x-5,110,Colorstring,"手动高速");

this.drawoval(g, 30+5*x+15,70,this.judgecolor(BaseUnit1.getValueint().get(5)));
this.drawstring(g, 30+5*x+5,110,Colorstring,"手动低速");
}

}
//画圆
public void drawoval(Graphics g,int x,int y,Color color)

{
//画笔颜色
g.setColor(color);
//画圆 
g.fillOval(x, y, 20, 20);
}
//写字
public void drawstring(Graphics g,int x,int y,Color color,String description)

{
//画笔颜色
g.setColor(color);
g.drawString(description,x,y);

}
public void drawrectangle(Graphics g,int x,int y,Color color)

{

g.setColor(color);
//画矩形
g.fill3DRect(x, y, 30, 30, false);

}
//判断颜色
public Color judgecolor(int value)
{

if (value==0)
{
return new Color(255, 255, 255);
}else if(value==1)
{
return new Color(0, 255, 0);

}else
{
return null;
}

}

}

package com.tminfo.wang.unit;


import java.io.IOException;
import java.util.Vector;


import com.tminfo.plcscaner.modbus.ModbusException;
import com.tminfo.plcscaner.modbus.facade.ModbusTCPMaster;
import com.tminfo.plcscaner.modbus.procimg.Register;
import com.tminfo.plcscaner.modbus.procimg.SimpleRegister;
import com.tminfo.plcscaner.modbus.procimg.SimpleRegisterint;


public class BaseUnit implements Runnable {


/**
* @param args
*/
ModbusTCPMaster ModbusTCPMaster1=null;
static Register Registers[]=null;
static  Vector<Integer> valueint=new Vector<Integer>() ;

static int numvalue[]=new int[10];
static Register Registersw[]=new Register[numvalue.length];
static BaseUnit BaseUnit=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
BaseUnit=new BaseUnit();
Thread t=new Thread(BaseUnit);
t.start();
BaseUnit.valueint = valueint;
numvalue[0]=7;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true)
{
this.readdata();
System.out.println("num"+numvalue[0]);
this.writedata();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
public void readdata()
{
ModbusTCPMaster1=new ModbusTCPMaster("127.0.0.1",502,1);
try {
ModbusTCPMaster1.connect();
try {
valueint.clear();
//读取0到20个字。。读20个int
Registers=ModbusTCPMaster1.readMultipleRegisters(100,15,1);
for (int i=0;i<15;i++)
{
valueint.add(Registers[i].getValue());
// System.out.println(valueint.get(i));
}

} catch (ModbusException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
ModbusTCPMaster1.disconnect();
}
}

public void writedata()
{
ModbusTCPMaster1=new ModbusTCPMaster("127.0.0.1",502,1);

try {
ModbusTCPMaster1.connect();
for (int i=0;i<numvalue.length;i++)
{
Registersw[i]=new SimpleRegister(numvalue[i]);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ModbusTCPMaster1.writeMultipleRegisters(100,Registersw);
} catch (ModbusException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
ModbusTCPMaster1.disconnect();
}

}


public static Register[] getRegistersw() {
return Registersw;
}
public static void setRegistersw(Register[] registersw) {
Registersw = registersw;
}
public static Vector<Integer> getValueint() {
return valueint;
}
public static void setValueint(Vector<Integer> valueint) {
BaseUnit.valueint = valueint;
}
public static int[] getNumvalue() {
return numvalue;
}
public static void setNumvalue(int[] numvalue) {
BaseUnit.numvalue = numvalue;
}


}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java上位机 的相关文章

  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi

随机推荐