PCHMI 技术文档

PCHMI8 二次开发C#常用API参考文档

本文档面向具备一定C#基础,需要做二次开发的上位机工程师,整理PCHMI常用C#调用接口示例代码。

1、PCHMI启动代码 & 系统公共接口

//PCHMI组件初始化启动
config1.START(this);

//判断控件是否启动完成,只有启动完成之后才可以使用操控PLC的指令。
PCHMI.PClass.SystemRun;

//判断PLC通讯状态,0表示第一个PLC
PCHMI.PClass.IsPlcLink(0);

//获取或设置当前使用的语言
PCHMI.PClass.Language = 0;

//关闭第一个PLC通讯
PCHMI.CONFIG.PLC_OFF[0]=True;

//重启程序,可以用在长时间通讯超时,无法恢复的情况下使用。
PCHMI.UpConfig.ReBoot();

//调用通信配置窗口
new PCHMI.UpConfig().ShowDialog();

//将文字转语音播放出来
PCHMI.PClass.Speech("你好!");

//触发按键音
new PCHMI.PClass().KEYBEEP();

//关闭或开启按键音
PCHMI.CONFIG.KEY_BEEP.启用=false;

//子窗口等比缩放
new PCHMI.AutoFormChange(this);

2、权限管理

//权限登录,弹出输入密码窗口
PCHMI.PClass.Login();

//权限修改,修改密码
PCHMI.PClass.UpPwd();

//获取或设置当前权限等级
PCHMI.PClass.NowAuthority = 1;

//获取或设置自动注销时间
PCHMI.CONFIG.nottime;

//获取当前登录用户名
PCHMI.PClass.UserName;

//获取当前登录时间
PCHMI.PClass.LoginTime;

3、沿边检测(触发器TIRGGER)

参数说明:1、PLC编号 2、位地址 3、模式:"上升沿|下降沿|值变化"
//实例化边沿检测对象,监控0号PLC U0.0上升沿
PCHMI.TIRGGER TG = new PCHMI.TIRGGER(0, "U0.0", "上升沿");

private void timer_Tick(object sender, EventArgs e)
{
   if(TG.Enable) 
   { 
       MessageBox.Show("哈哈,上升沿被我捕捉到拉"); 
   }
}

4、文件读写

//将字符串"123"保存到指定的文件
PCHMI.PClass.WFile(@"D:\PLCIP.TXT", "123");

//从指定的文件读取文本内容
PCHMI.PClass.RFile(@"D:\PLCIP.TXT");

5、CSV读写

using System.Collections.Generic;
using System.Data;

//写入一行数据到CSV文件
PCHMI.CSV.WriteLine(@"D:\文件名.csv", new List<string>(){"内容1", "内容2", "内容3", "内容4" });

//写入多行数据到CSV文件
List<List<string>> rows = new List<List<string>>()
{
      new List<string>() { "A1", "B1", "C1", "D1" },
      new List<string>() { "A2", "B2", "C2", "D2" }
};
PCHMI.CSV.WriteLines(@"D:\文件名.csv", rows);

//读取CSV文件内容到DataTable
DataTable TAB = PCHMI.CSV.CsvToDataTable(@"D:\文件名.csv");

//将DataTable里的内容写入CSV文件
PCHMI.CSV.DataTableToCsv(@"D:\文件名.csv", TAB);

6、配方功能

//从指定的配方文件调用配方
new PCHMI.配方().CALL_TECH("配方文件名", "配方名");

//保存指定配方文件名的配方
new PCHMI.配方().SAVE_TECH("配方文件名");

//删除指定配方文件名的配方
new PCHMI.配方().DEL_TECH("配方文件名");

7、打印功能

//打印控件里的画面
//参数:1、控件名 2、打印机驱动名 3、是否预览
new PCHMI.PRINT().PrintControl(面板1, "", true);

//打印表格
//参数:1、表格控件GridView 2、打印机驱动名 3、标题 
PCHMI.PRINTDGV.Print(数据表1.GridView,"","");

//打印预览表格
PCHMI.PRINTDGV.PrintPreview(数据表1.GridView,"","");

8、TCP服务端

using System.Net.Sockets;
using System.Text;

private void Main_Load(object sender, EventArgs e)
{
     //在窗口LOAD事件里配置TCP服务
     new PCHMI.TCPServer("127.0.0.1", 7800, RECV);
}

//回调函数,用来处理客户端发来的信息
public void RECV(NetworkStream NS, byte[] recvBytes)
{
      //将接收到客户端发来的信息更新UI,必须使用Invoke跨线程
      this.BeginInvoke(new System.EventHandler(UpdateUI), Encoding.Default.GetString(recvBytes));
      
      Byte[] RDT = Encoding.Default.GetBytes("收到");//要返回的内容
      NS.Write(RDT, 0, RDT.Length);//发送给客户端
}

//将服务器接收到客户端的信息显示到文本框
private void UpdateUI(object o, System.EventArgs e)
{
    TBox1.Text += o.ToString() + "\r\n";
}

9、TCP客户端

using System.Net.Sockets;

//声明一个TCP客户端链接
PCHMI.TCPClient TCPC=new PCHMI.TCPClient("127.0.0.1", 7800);

private void 发送按钮_Click(object sender, EventArgs e)
 {
      //向服务器发送数据,并将返回的数据放到字节数组里。	
      Byte[] RDT=TCPC.TSEND(Encoding.Default.GetBytes("HELLO"));
 }

/*TCP客户端在第一次TSEND时会自动与服务器建立链接,如果想手动实现还可以使用下面两个方法。*/
//打开链接并设置IP、端口、链接超时时间。
TCPC.socket = new PCHMI.TimeOutSocket().Connect("127.0.0.1", 7800, 1000);

//关闭链接
TCPC.socket.Close();

10、单次读取数据 ONE_TIME

注意:单次通讯在通讯质量不好的状态下,会一直等待,直到超时为止。会有界面卡顿现象。避免这种情况可以自己创建一个子线程去完成。
//连续读取10个字放到数组里
UInt16[] U = PCHMI.ONE_TIME.GET_WORDs(0,"DB1.0",10);

//连续读取10个字放到数组里,ISOUTTIME是返回的超时状态
UInt16[] U = PCHMI.ONE_TIME.GET_WORDs(0,"DB1.0",10,out bool ISOUTTIME);

//连续读取10个字放到数组里,并设置为1000ms的超时时间
UInt16[] U = PCHMI.ONE_TIME.GET_WORDs(0,"DB1.0",10,1000,out bool ISOUTTIME);

11、参数读写 ParamHelper

//1、批量修改参数文件名
参数设置界面 PARFORM = new 参数设置界面();
ControlBatch.UpAllTagBox(PARFORM, "原来参数文件名", "现在参数文件名");
PARFORM.Show();

//2、读F32参数
ParamHelper.GET_F32(@"参数文件名", "参数名").ToString();

//3、写F32参数
ParamHelper.SET_F32(@"参数文件名", "参数名",0.25F).ToString();
补充说明:示例代码中的中文类名、控件名("参数设置界面"、"配方"、"面板1"、"数据表1")为PCHMI内部组件名称,直接复制使用;实际项目根据窗体与控件名称修改。