当前位置:首页 > 代码 > 正文

modbus主站源代码(modbus主机程序)

admin 发布:2022-12-19 19:10 183


本篇文章给大家谈谈modbus主站源代码,以及modbus主机程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

modbus+rtu功能码是什么进制数

其实任何数制都是一回事,大多协议相关资料在解释协议的时候,多采用十六进制表达MODBUS协议码,但这只是一种习惯而已,十进制表达也没有错的,只是大家不这样表达而已。无论什么协议数据,在进行信道上进行传输时都是以二进制码串的方式进行的。

有人移植过RT Thread 上的那个modbus主站程序么

1、目前项目已经在Github中开源

2、主机的相关的框架已经修改完成,初始化、配置Modbus主机相关接口与原有从机接口基本相同;

3、移植主机相关硬件配置与原有从机方式一致,需要修改FreeModbus源码中port文件夹中后缀带_m相关文件;

4、Modbus主机请求主机请求功能目前实现了所有与保持寄存器、输入寄存器、线圈及离散输入相关的功能,并测试通过

5、目前的Modbus主机请求功能是异步模式,后期考虑方便上层调用,可以同时给上层提供同步模式的控制方法;

6、主机的异常处理任务还未添加,只留了接口,后期考虑给上层提供回调接口,相关异常功能上层也能自动做处理;

7、目前最新代码同时支持Modbus主机及Modbus从机两种模式,两者互不干涉,用户可以在/FreeModbus/modbus/mbconfig.h中自行裁剪。

求 基于java的Modbus/TCP协议 源代码

public static void TestModbus() throws Exception{

IpParameters params = new IpParameters();

params.setHost("localhost");//地址

params.setPort(502);//端口

ModbusFactory factory = new ModbusFactory();

ModbusMaster master = factory.createTcpMaster(params, true);

// 初始化

try {

master.init();

readHoldingRegistersTest(master,1,0,3);

} catch (ModbusInitException e) {

e.printStackTrace();

} finally {

master.destroy();

}

}

public static void main(String[] args) {

try {

TestModbus();

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

private static void readHoldingRegistersTest(ModbusMaster master,

int slaveId, int start, int len) {

try {

// ReadInputRegistersRequest request = new ReadInputRegistersRequest(

// slaveId, start, len);

// ReadInputRegistersResponse response = (ReadInputRegistersResponse) master

// .send(request);

ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(

slaveId, start, len);

ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master

.send(request);

if (response.isException()) {

System.out.println("Exception response: message="

+ response.getExceptionMessage());

} else {

ByteQueue byteQueue= new ByteQueue(12);

response.write(byteQueue);

System.out.println(byteQueue);

System.out.println(Arrays.toString(response.getShortData()));

short[] list = response.getShortData();

for(int i = 0; i list.length; i++){

System.out.print(list[i] + " ");

}

}

} catch (ModbusTransportException e) {

e.printStackTrace();

}

}

哪位有MODBUS的DLL的源码,急求一份,谢谢!!

See the following, hope to help.

// 档名: RS232_x.C--

// 缘由:为了VIGOR PLC modbus与PC图控软体的RS232连线

// 使用说明:

//

/*

01: Read coil status

02: Read input status

03: Read holding register

04: Read input registers

05: Force single coil

06: Preset single register

15: Force multiple coils

16: Preset multiple registers

22: Mask write register

23: Read/Write registers

*/

#pragma option w32

#include "msvcrt.h--"

#include "windows.h--"

#include "wingdi.h--"

//2006/10/19 HK

#include "winbase.h--"

#include "winerror.h--"

#include "advapi.h--"

#include "winuser.h--"

#define NUM 50

#define NUM_1 NUM+1

#define PI 3.141592654

#define ID_TIMER 1

byte Text="欢迎您 RS232 MODBUS测试程式 2006/10/19 ";

// 还是取好记一点的名字较好,避免用 a、b、c 来取名

WNDCLASS wc;

//WNDCLASSEX wc;

HWND hwnd;

DCB dcb; //2006/9/29 HK

// 用小写 p 开头的变数多半是指标功能。

//站号为1,Y0设为ON

byte spd[8]={1,5,0,0,255,0,140,58}; //1,5,0,0,ff,0,8c,3a

//站号为1,Y0设为OFF

byte spdx[8]={1,5,0,0,0,0,205,202}; //1,5,0,0,0,0,cd,ca

byte abcd[8];

MSG msg;

HDC hdc;

HMENU hMenu ;

HANDLE hFile;

void main()

{

/*

wc.cbSize=sizeof(WNDCLASSEX);//无此行用RegisterClassEx会看不到视窗

*/

wc.hInstance = hThisInst;

wc.lpszClassName = "Hi" ;

wc.lpfnWndProc = #WndProc ;

wc.style = CS_HREDRAW | CS_VREDRAW ;

wc.hbrBackground = GetStockObject(WHITE_BRUSH);

wc.hCursor = LoadCursor(0,IDC_CROSS);

RegisterClass(#wc);

hwnd=CreateWindowEx(0,"Hi",#Text,WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

0,0,hThisInst,0) ;

SetTimer (hwnd, ID_TIMER, 1000, NULL);

hFile=CreateFile("Com4",

GENERIC_READ|GENERIC_WRITE,

0,

NULL,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

0);

if ( hFile == INVALID_HANDLE_VALUE ) //判断COM开启是否成功

{

MessageBox(0,"开启通讯埠 错误!!","Comm Error",MB_OK);

return;

}

//将dcb位址传入,以开启通序参数

GetCommState(hFile ,#dcb ); //得知目前COM的状态

dcb.BaudRate = 19200; //设定鲍率19200

dcb.ByteSize = 8; // 8 bits位元组

dcb.Parity = NOPARITY; //同位元检查为none

dcb.StopBits = ONESTOPBIT; //Stop bit =1

//设定通讯埠

if( !SetCommState(hFile,#dcb) )

{

MessageBox(0,"通序埠设定错误!!!","Set Error",MB_OK);

CloseHandle(hFile);

return;

}

ShowWindow(hwnd,1);

while (GetMessage(#msg,0,0,0))

DispatchMessage(#msg);

}

POINT pt[50];

long WndProc(HWND hwnd, UINT msg,WPARAM wparam, LPARAM lparam) // 视窗函式

{

static int cxClient, cyClient ;

static POINT pt [NUM_1] ;

static BOOL fFlipFlop = FALSE ;

HBRUSH hBrush ;

int i;

float f;

PAINTSTRUCT ps ;

RECT rect ;

switch (msg)

{

case WM_TIMER :

!fFlipFlop ;

InvalidateRect (hwnd, NULL, FALSE) ;

if(fFlipFlop)

WriteFile(hFile,#spd,8,#abcd,NULL);

else

WriteFile(hFile,#spdx,8,#abcd,NULL);

return 0 ;

case WM_SIZE :

cxClient = LOWORD (lparam) ;

cyClient = HIWORD (lparam) ;

break;

case WM_PAINT :

hdc = BeginPaint (hwnd, #ps) ;

GetClientRect (hwnd, #rect) ;

if(fFlipFlop)

{

hBrush = CreateSolidBrush ( RGB(255,0,0) ) ;

FillRect (hdc,#rect, hBrush) ;

DrawText (hdc, "站号为1,Y0设为ON", 16, #rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

}

else

{

hBrush = CreateSolidBrush ( RGB(0,255,0) ) ;

FillRect (hdc,#rect, hBrush) ;

DrawText (hdc, "站号为1,Y0设为OFF", 17, #rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

}

MoveToEx (hdc, 0, cyClient / 2, NULL) ;

LineTo(hdc, cxClient, cyClient / 2) ;

for (i = 0 ; i = NUM ; i++)

{

pt[i].x = i * cxClient /NUM;

f = sin(PI * 2 / NUM * i);

pt[i].y = float 1-f * cyClient/2 ;

}

Polyline (hdc, #pt,NUM_1) ;

EndPaint (hwnd, #ps) ; // 这行原本有错喔!改了变数名字就看出来了

DeleteObject (hBrush) ;

break;

case WM_DESTROY :

KillTimer (hwnd, ID_TIMER) ;

PostQuitMessage(0);

break;

}

return DefWindowProc(hwnd,msg,wparam,lparam);

}

modbus主站源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于modbus主机程序、modbus主站源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/19588.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载